整像素运动估计的C语言代码.docVIP

  • 14
  • 0
  • 约9.87千字
  • 约 11页
  • 2017-09-01 发布于宁夏
  • 举报
整像素运动估计的C语言代码.doc

#include math.h #include stdio.h #include stdlib.h #include malloc.h #include string.h #pragma warning( disable : 4996 ) #define SEEK_SET 0 #define BEG 0 //从第几帧开始 #define I_FRAME 2 //读取帧 #define PIC_W 176 //图像宽度 #define PIC_H 144 //图像高度 #define PIC_P F:\\sequence\\yuv\\foreman_qcif.yuv//图像路径 #define MB_W PIC_W / 16 #define MB_H PIC_H / 16 #define SAD_MAX 65536//最大sad值 #define MAX(a, b) ( (a)(b) ? (a) : (b) ) //取a、b中值较大的 #define MIN(a, b) ( (a)(b) ? (a) : (b) ) //取a、b中值较小的 typedef unsigned int uint_t; typedef unsigned char uint8_t; typedef unsigned __int64 uint64_t; enum { P_8x8_UL, P_8x8_UR, P_8x8_DL, P_8x8_DR, P_8x16_L, P_8x16_R, P_16x8_U, P_16x8_D, P_16x16_ }; //宏块分割类型,9种 enum { P_8x8 = 1, P_16x8, P_8x16, P_16x16 }; //最终分割方式 typedef struct { int frame; //帧号 uint8_t *plane[3]; //存放一副图像的原始数据 }picture_t; typedef struct { FILE *fp; //图像文件 int pix_width; //图像宽按像素计 int pix_height; //图像高按像素计 int mb_width; //图像宽按宏块计 int mb_height; //图像高按宏块计 picture_t pic[I_FRAME]; } yuv_t; typedef struct { int mv[2]; //对应的最佳mv uint_t sad; //对应的sad值 }mvs_t; uint8_t sad[16][16]; mvs_t mvs[9]; //存放种最佳mv int partition; int mv[4]; yuv_t* init_yuv(yuv_t*); void init_sad(); int creat_yuv(yuv_t*, int); void start_ime(yuv_t*); void full_search(yuv_t*, int, int); void cal_sad(uint8_t*, uint8_t*, int); void compare(int, int, int, int); uint_t sub_block_sad(int[], int[]); void free_yuv(yuv_t*); void final_opt(); void adjust_range(int*, int*, int, int); void adjust_mv(int, int, int); int main(int argc, char *argv[]) { yuv_t *h = NULL; h = init_yuv(h); //初始化yuv if (!h) return -1; if (creat_yuv(h, I_FRAME) 0) //读图像 { free_yuv(h); return -1; } start_ime(h); //开始整像素搜索 free_yuv(h); //释放内存 return 0; } //初始化yuv yuv_t* init_yuv(yuv_t *h) { int i; h = (yuv_t*)malloc(sizeof(yuv_t)); //分配内存 //初始化像素指针 for (i = 0; i I_FRAME; ++i) h-pic[i].plane[0] = NULL; h-fp = f

文档评论(0)

1亿VIP精品文档

相关文档