?? full.cpp
字號:
int dx=0;
int dy=0;
void main()
{
for(int i=0;i<16;i++)
{
for(int j=0;j<16;j++)
{
cur_block[i][j]=cur_frame[i+16*m][j+16*n];
}
}//取出幀中的一個像素塊放到cur_block[16][16]中去
int error_full[16][16];
int result_full=0;
result_full=full_search();
dx=16*m-full_x[result_full];
dy=16*n-full_y[result_full];
for(int a=0;a<16;a++)
{
for(int b=0;b<16;b++)
{
error_full[a][b]=0;
}
}
cout<<"該塊的帶運動補償的全搜索的預測誤差為:"<<endl;
for(int a7=0;a7<16;a7++)
{cout<<" ";
for(int b7=0;b7<16;b7++)
{
error_full[a7][b7]=cur_block[a7][b7]-old_frame[full_x[result_full]+a7][full_y[result_full]+b7];
cout<<error_full[a7][b7]<<" ";
}
cout<<endl;
}
cout<<"運動矢量為:("<<dx<<","<<dy<<")"<<endl;
}
int mad(int curblock[16][16],int oldblock[16][16])
{
int temp=0;
int value=0;
int sum=0;
int mad_value=0;
for(int i2=0;i2<16;i2++)
{
for(int j2=0;j2<16;j2++)
{
temp=curblock[i2][j2]-oldblock[i2][j2];
value=(int)abs(temp);
sum=sum+value;
}
}
mad_value=sum/256;
return mad_value;
}//兩塊的平均絕對幀差MAD
int full_search()
{int temp_full[900];
int i_full=0;
for(int i=0;i<900;i++)
{
temp_full[i]=0;
full_x[i]=0;
full_y[i]=0;
}
int j=0;
for(int i1=0;i1<30;i1++)
for(int j1=0;j1<30;j1++)
{
for(int i_1=0;i_1<16;i_1++)
{for(int j_1=0;j_1<16;j_1++)
{old_block[i_1][j_1]=old_frame[16*m-d+i1+i_1][16*n-d+j1+j_1];}
}
temp_full[j]=mad(cur_block,old_block);
full_x[j]=16*m-d+i1;
full_y[j]=16*n-d+j1;
j++;
}
int temp_full1[900];
for(int i2=0;i2<900;i2++)
{
temp_full1[i2]=temp_full[i2];
}
int temp_full2=0;
for(int i3=0;i3<900;i3++)
{
for(int j3=i3+1;j3<900;j3++)
{
if(temp_full1[i3]>temp_full1[j3])
{
temp_full2=temp_full1[i3];
temp_full1[i3]=temp_full1[j3];
temp_full1[j3]=temp_full2;
}
}
}//從小到大排序
for(int i4=0;i4<900;i4++)
{
if(temp_full1[0]==temp_full[i4])
{
i_full=i4;
}
}
return i_full;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -