• 大小: 297KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: 其他
  • 标签: 菱形算法  

资源简介

块匹配运动算法 菱形算法 块匹配运动算法 菱形算法 块匹配运动算法 菱形算法

资源截图

代码片段和文件信息

#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


评论

共有 条评论

相关资源