資源簡介
塊匹配運動算法 菱形算法
塊匹配運動算法 菱形算法
塊匹配運動算法 菱形算法

代碼片段和文件信息
#include?“stdio.h“
#include?“stdlib.h“
#include?“malloc.h“
#include?“string.h“
#include?“sys/timeb.h“
#include?“math.h“
#include?“inf.h“
#define?MIN(ab)?((a)<(b))?(a):(b);
#define?MAX(ab)?((a)>(b))?(a):(b);
int?SAD(const?int?oxconst?int?oyconst?int?dxconst?int?dyconst?int?heightconst?int?widthuint32?&best_sad)
{
const?int?rx=ox+dxry=oy+dy;
if(?abs(dx)>MAX_MOTION?||?abs(dy)>MAX_MOTION?||?flag_search[dx][dy]>0?)
return?0;
if(?rx<0?||?ry<0?||?rx+height>XX?||?ry+width>YY?)
return?0;
uint32?sad=0;
frame_info.frame_pot++;
const?uint8?*p1=¤t_frame[ox][oy]*p2=&ref_frame[rx][ry];
for(int?i=0;i {
for(int?j=0;j {
sad+=abs(*(p1++)-*(p2++));
}
p1+=(YY-width);p2+=(YY-width);
}
flag_search[dx][dy]=1+sad;
if(sad>=best_sad)
return?0;
best_sad=sad;
return?1;
}
void?rebuilt(const?int?xconst?int?yconst?int?heightconst?int?width)
{
const?int?dx=frame_info.mv[x][y].dxdy=frame_info.mv[x][y].dy;
const?int?ox=x*BLOCK_HEIGTHoy=y*BLOCK_WIDTH;
const?int?rx=ox+dxry=oy+dy;
int?tmp;
const?uint8?*p1=¤t_frame[ox][oy]*p2=&ref_frame[rx][ry];
if(?abs(dx)>MAX_MOTION?||?abs(dy)>MAX_MOTION?)
exit(0);
if(?rx<0?||?ry<0?||?rx+height>XX?||?ry+width>YY?)
exit(0);
for(int?i=0;i {
for(int?j=0;j {
tmp=*(p1++)-*(p2++);
frame_info.frame_sse+=tmp*tmp;
}
p1+=(YY-width);p2+=(YY-width);
}
}
void?search_FS(const?int?xconst?int?yconst?int?heigthconst?int?width)
{
const?int?ox=x*BLOCK_HEIGTHoy=y*BLOCK_WIDTH;
uint32?sad=0xffffff;
MV?mv;
for(int?i=-MAX_MOTION;i<=MAX_MOTION;i++)
{
for(int?j=-MAX_MOTION;j<=MAX_MOTION;j++)
{
if(SAD(oxoyijheigthwidthsad)==1)
{
mv.dx=i;mv.dy=j;
}
}
}
frame_info.mv[x][y]=mv;
frame_info.sad[x][y]=sad;
frame_info.frame_sad+=sad;
}
void?main()
{
int?num;
if((fp?=?fopen(SOURCE_FILE“rb“))==NULL) return;
frame_info.sum_pot=frame_info.sum_sad=frame_info.sum_sse=0;
frame_info.mv=_mv_buffer[0];frame_info.prev_mv=_mv_buffer[1];
printf(“frame\tcost\tpsnr\n“);
for(num=0;num<100;num++)
{???
int?ij;
fseek(fpXX*YY*3/2*(num+1)SEEK_SET);
if(fread(current_frame[0]XX*YY1fp)==0)?break;
fseek(fpXX*YY*3/2*(num+0)SEEK_SET);
if(fread(ref_frame[0]XX*YY1fp)==0)?break;
frame_info.frame_pot=frame_info.frame_sad=frame_info.frame_sse=0;
for(?i=0;i {
for(?j=0;j {
memset(_flag_search0SEARCH_RANGE*SEARCH_RANGE);
search_FS(ijBLOCK_HEIGTHBLOCK_WIDTH);
rebuilt(ijBLOCK_HEIGTHBLOCK_WIDTH);
}
}
frame_info.sum_pot+=frame_info.frame_pot;
frame_info.sum_sad+=frame_info.frame_sad;
frame_info.sum_sse+=frame_info.frame_sse;
MV?(*mv_tmp)[Y]=frame_info.mv;frame_info.mv=frame_info.prev_mv;frame_info.prev_mv=mv_tmp;
memcpy(frame_info.prev_sadframe_info.sadX*Y*sizeof(uint32));
printf(“%d\t%.2f\t%.2f\n“num(float)frame_info.frame_pot/X/Y10*log10(XX
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????152064??2009-11-18?09:42??02.yuv
?????文件?????152064??2009-11-18?09:42??FSME\01.yuv
?????文件?????152064??2009-11-18?09:42??FSME\02.yuv
?????文件???????4322??2009-08-05?08:41??FSME\FSME.dsp
?????文件????????533??2009-08-05?08:36??FSME\FSME.dsw
?????文件??????66560??2009-11-28?22:57??FSME\FSME.ncb
?????文件??????53760??2009-11-28?22:57??FSME\FSME.opt
?????文件???????1450??2009-11-28?22:43??FSME\FSME.plg
?????文件????????982??2009-11-27?18:47??FSME\inf.h
?????文件???????3175??2009-11-28?22:43??FSME\main.cpp
?????文件???????3377??2009-11-27?11:13??FSME\main.dsp
?????文件????????533??2009-11-27?11:16??FSME\main.dsw
?????文件??????41984??2009-11-27?11:24??FSME\main.ncb
?????文件??????48640??2009-11-27?11:24??FSME\main.opt
?????文件????????242??2009-11-27?11:24??FSME\main.plg
?????文件?????152064??2009-11-18?09:42??01.yuv
?????目錄??????????0??2010-03-19?23:18??FSME
-----------?---------??----------?-----??----
???????????????833814????????????????????17
- 上一篇:ccnbie.doc
- 下一篇:湍流程序仿真
評論
共有 條評論