📄 3bu.cpp
字号:
{138, 136, 137, 136, 132, 137, 146, 148, 149, 137, 129, 125, 119, 119, 116, 120, 119, 128, 138, 137, 136, 134, 134, 134, 139, 138, 131, 125, 114, 101, 93, 72, 60, 54, 49, 57, 60, 61, 64, 66, 69, 69, 70, 74, 70, 69, 71, 69},
{136, 135, 133, 133, 135, 141, 147, 147, 145, 134, 127, 116, 115, 112, 110, 112, 117, 129, 138, 142, 138, 137, 136, 136, 137, 138, 131, 126, 115, 102, 90, 69, 57, 50, 54, 57, 58, 61, 62, 66, 70, 69, 72, 68, 68, 68, 70, 71},
{135, 132, 135, 136, 138, 144, 146, 146, 138, 127, 120, 114, 108, 105, 109, 107, 118, 129, 138, 140, 141, 135, 136, 137, 141, 137, 134, 124, 114, 102, 87, 69, 56, 50, 50, 53, 60, 56, 66, 67, 71, 70, 69, 73, 68, 75, 68, 67},
{132, 136, 134, 139, 143, 144, 145, 142, 134, 128, 115, 108, 95, 93, 101, 108, 117, 133, 137, 139, 139, 137, 137, 137, 141, 138, 134, 127, 113, 105, 86, 69, 54, 45, 54, 53, 58, 59, 62, 64, 67, 70, 64, 66, 70, 70, 70, 69},
{132, 133, 135, 140, 147, 149, 144, 137, 127, 120, 108, 99, 88, 91, 96, 111, 122, 131, 139, 141, 141, 138, 139, 142, 141, 140, 135, 129, 117, 102, 90, 66, 54, 44, 46, 51, 53, 58, 62, 62, 64, 65, 67, 64, 68, 69, 69, 66},
{135, 137, 140, 143, 150, 147, 138, 131, 121, 113, 99, 86, 83, 82, 100, 118, 126, 134, 140, 140, 142, 142, 138, 138, 139, 138, 132, 125, 118, 104, 85, 66, 52, 42, 46, 50, 64, 62, 64, 62, 62, 64, 66, 70, 63, 67, 67, 63},
{135, 137, 146, 148, 148, 144, 134, 128, 121, 105, 87, 74, 68, 79, 96, 113, 124, 134, 140, 144, 140, 141, 138, 141, 136, 140, 133, 131, 116, 107, 90, 67, 53, 50, 46, 52, 58, 55, 61, 67, 69, 70, 65, 65, 65, 67, 65, 67},
{137, 141, 146, 151, 146, 138, 130, 120, 112, 94, 74, 64, 64, 85, 99, 117, 126, 134, 143, 143, 142, 142, 142, 138, 140, 139, 134, 126, 118, 101, 88, 70, 53, 43, 47, 50, 55, 54, 58, 60, 61, 63, 63, 62, 65, 65, 66, 70},
{141, 147, 155, 150, 144, 132, 127, 118, 105, 81, 66, 50, 56, 81, 98, 115, 127, 134, 141, 142, 143, 142, 141, 140, 140, 138, 138, 125, 117, 102, 86, 67, 51, 43, 45, 49, 48, 51, 57, 63, 63, 63, 60, 66, 65, 67, 67, 66},
{146, 152, 155, 148, 138, 130, 119, 113, 95, 74, 57, 43, 61, 81, 101, 115, 126, 139, 142, 143, 142, 143, 144, 137, 137, 138, 133, 121, 114, 102, 86, 70, 50, 44, 41, 46, 51, 56, 62, 59, 58, 62, 63, 62, 63, 67, 65, 68},
{147, 150, 149, 141, 133, 125, 116, 99, 84, 59, 41, 42, 59, 81, 98, 111, 124, 140, 140, 145, 142, 137, 141, 138, 138, 137, 131, 124, 109, 98, 84, 67, 52, 40, 40, 49, 54, 57, 60, 63, 60, 66, 67, 64, 64, 68, 66, 67},
{149, 147, 146, 139, 131, 120, 108, 89, 70, 45, 41, 48, 63, 82, 99, 111, 121, 136, 142, 145, 144, 137, 140, 141, 140, 139, 130, 122, 108, 101, 85, 69, 47, 40, 39, 50, 56, 51, 59, 64, 70, 72, 71, 72, 66, 71, 67, 65},
{148, 148, 144, 133, 126, 114, 98, 84, 58, 45, 40, 51, 65, 80, 97, 112, 123, 135, 143, 145, 145, 142, 142, 138, 136, 134, 132, 122, 111, 102, 84, 66, 44, 44, 39, 49, 53, 58, 61, 63, 67, 68, 65, 75, 67, 67, 61, 66},
{149, 146, 137, 130, 120, 107, 86, 68, 48, 44, 42, 51, 65, 86, 99, 109, 127, 137, 143, 145, 143, 142, 141, 138, 139, 137, 131, 120, 113, 98, 86, 67, 44, 41, 42, 50, 53, 58, 63, 61, 66, 64, 68, 71, 67, 71, 66, 68},
{144, 139, 134, 125, 113, 96, 76, 53, 57, 50, 43, 52, 67, 85, 99, 112, 123, 138, 141, 143, 142, 144, 142, 138, 136, 134, 132, 123, 115, 97, 85, 63, 44, 42, 41, 49, 51, 51, 63, 62, 70, 63, 62, 63, 64, 68, 66, 67},
{140, 135, 126, 118, 105, 86, 63, 45, 50, 54, 49, 47, 64, 83, 97, 113, 124, 133, 142, 143, 146, 144, 145, 140, 137, 134, 133, 126, 113, 102, 83, 68, 50, 39, 46, 49, 57, 52, 63, 69, 72, 66, 64, 68, 69, 65, 68, 65},
{133, 133, 121, 109, 93, 77, 58, 45, 50, 51, 52, 50, 69, 87, 100, 115, 124, 135, 138, 143, 144, 142, 144, 141, 140, 138, 132, 123, 112, 97, 81, 63, 53, 42, 38, 49, 51, 56, 59, 62, 62, 63, 64, 63, 69, 69, 64, 69},
{135, 127, 116, 99, 81, 63, 46, 48, 52, 51, 48, 52, 66, 84, 100, 113, 124, 133, 139, 146, 143, 143, 145, 141, 140, 134, 130, 121, 109, 97, 79, 62, 48, 42, 42, 50, 54, 58, 61, 62, 60, 70, 68, 67, 67, 67, 66, 65},
{124, 121, 108, 90, 69, 53, 46, 52, 52, 52, 53, 55, 68, 83, 97, 113, 124, 132, 141, 144, 146, 145, 142, 143, 140, 135, 127, 121, 109, 96, 76, 76, 53, 42, 43, 50, 53, 56, 63, 63, 63, 66, 63, 66, 67, 63, 76, 71},
{117, 113, 96, 75, 55, 45, 54, 53, 58, 57, 48, 59, 66, 84, 100, 111, 123, 136, 142, 143, 144, 143, 141, 140, 142, 138, 130, 122, 109, 97, 83, 69, 53, 44, 50, 51, 58, 56, 58, 60, 64, 64, 67, 65, 66, 70, 73, 68},
{113, 102, 84, 62, 50, 49, 55, 55, 56, 52, 49, 55, 69, 84, 101, 115, 123, 134, 140, 142, 144, 141, 140, 142, 144, 138, 129, 120, 111, 97, 81, 67, 53, 44, 40, 49, 50, 58, 59, 64, 59, 62, 63, 70, 69, 70, 72, 69},
{101, 93, 70, 54, 50, 53, 56, 53, 58, 54, 54, 52, 69, 81, 96, 113, 120, 129, 137, 141, 144, 142, 141, 140, 138, 139, 130, 121, 109, 95, 79, 68, 50, 40, 44, 52, 58, 59, 62, 64, 61, 63, 68, 71, 67, 71, 70, 67},
{ 90, 81, 61, 49, 53, 56, 63, 55, 58, 53, 56, 54, 62, 84, 94, 114, 122, 132, 138, 139, 143, 145, 140, 138, 139, 137, 133, 122, 108, 94, 81, 63, 54, 43, 43, 56, 55, 60, 63, 65, 65, 59, 62, 68, 64, 64, 67, 63},
{ 82, 67, 49, 50, 54, 61, 62, 57, 56, 57, 49, 52, 64, 81, 99, 113, 120, 128, 137, 139, 145, 143, 141, 143, 140, 135, 131, 124, 110, 96, 78, 64, 51, 42, 49, 52, 59, 66, 65, 66, 70, 65, 65, 66, 65, 67, 67, 67},
{ 67, 57, 50, 53, 53, 57, 58, 59, 57, 54, 49, 56, 61, 80, 98, 109, 119, 131, 135, 140, 141, 142, 143, 140, 138, 138, 130, 125, 109, 101, 82, 76, 50, 41, 52, 53, 59, 59, 66, 63, 68, 69, 63, 65, 64, 64, 67, 68},
{ 59, 50, 53, 54, 55, 59, 62, 57, 59, 57, 52, 52, 68, 79, 93, 108, 120, 129, 135, 138, 142, 140, 141, 139, 136, 134, 132, 121, 106, 94, 83, 67, 55, 42, 43, 42, 56, 58, 63, 63, 66, 67, 66, 68, 63, 66, 63, 65},
{ 57, 52, 55, 59, 55, 57, 55, 56, 60, 56, 52, 54, 62, 79, 93, 112, 117, 131, 134, 139, 142, 139, 141, 140, 140, 138, 133, 121, 112, 97, 82, 66, 52, 43, 43, 47, 55, 56, 61, 63, 64, 70, 67, 66, 67, 69, 64, 70},
{ 60, 55, 56, 60, 60, 58, 59, 61, 58, 56, 54, 57, 65, 78, 97, 111, 118, 129, 136, 140, 142, 142, 145, 141, 140, 136, 130, 122, 110, 94, 83, 70, 60, 41, 40, 48, 50, 58, 61, 60, 66, 63, 64, 66, 66, 69, 66, 68},
{ 52, 55, 58, 59, 59, 60, 59, 62, 59, 59, 53, 61, 65, 84, 97, 111, 116, 130, 133, 136, 142, 140, 140, 138, 137, 135, 130, 122, 112, 97, 82, 65, 59, 41, 44, 47, 56, 60, 63, 63, 65, 61, 62, 69, 72, 65, 63, 66},
{ 53, 52, 58, 61, 60, 58, 61, 64, 61, 58, 57, 59, 71, 81, 99, 108, 118, 130, 133, 138, 138, 135, 138, 142, 133, 137, 131, 123, 112, 101, 82, 67, 54, 44, 43, 47, 53, 58, 60, 61, 60, 62, 63, 66, 70, 66, 68, 63},
{ 59, 56, 58, 63, 59, 62, 56, 55, 58, 57, 54, 52, 67, 83, 95, 110, 121, 130, 134, 139, 142, 138, 139, 137, 139, 138, 135, 123, 112, 99, 82, 69, 60, 43, 44, 51, 53, 56, 60, 60, 65, 68, 66, 65, 67, 67, 69, 66},
{ 62, 60, 57, 59, 60, 56, 58, 62, 60, 54, 55, 54, 65, 78, 96, 112, 119, 129, 133, 137, 140, 141, 141, 135, 135, 139, 136, 124, 114, 101, 86, 69, 52, 43, 45, 49, 55, 51, 59, 60, 63, 65, 65, 66, 69, 68, 70, 69}};
int temp[9];//temp数组存放每次搜索的九个块的MAD值
int x=0;
int y=0;
int z=0;//x,y,z为每次搜索的九个块中MAD值最小的一个块的编号
int x2=0;
int y2=0;//x2,y2为第二次搜索的起始位置
int x3=0;
int y3=0;//x3,y3为第三次搜索的起始位置
int first_search();
int second_search();
int third_search();//函数的申明
void main()
{
for(int i0=0;i0<9;i0++)
{temp[i0]=0;}
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]中去
first_search();
second_search();
third_search();
int x4=0;
int y4=0;//x4,y4是最佳匹配块的坐标
switch(z)
{
case 0:x4=x3-d/4;y4=y3-d/4;break;
case 1:x4=x3-d/4;y4=y3;break;
case 2:x4=x3-d/4;y4=y3+d/4;break;
case 3:x4=x3;y4=y3-d/4;break;
case 4:x4=x3;y4=y3;break;
case 5:x4=x3;y4=y3+d/4;break;
case 6:x4=x3+d/4;y4=y3-d/4;break;
case 7:x4=x3+d/4;y4=y3;break;
case 8:x4=x3+d/4;y4=y3+d/4;break;
}
int dx=0;
int dy=0;//dx,xy是运动适量
dx=x4-16*m;
dy=y4-16*n;
int error_forward[16][16];
for(int a=0;a<16;a++)
{for(int b=0;b<16;b++)
{error_forward[a][b]=0;}
}//初始化
cout<<"该块带运动补偿的前向预测误差为:"<<endl;
for(int a1=0;a1<16;a1++)
{
cout<<" ";
for(int b1=0;b1<16;b1++)
{
error_forward[a1][b1]=cur_block[a1][b1]-old_frame[x4+a1][y4+b1];
cout<<error_forward[a1][b1]<<" ";
}
cout<<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 i=0;i<16;i++)
{
for(int j=0;j<16;j++)
{
temp=curblock[i][j]-oldblock[i][j];
value=(int)abs(temp);
sum=sum+value;
}
}
mad_value=sum/256;
return mad_value;
}//两块的平均绝对帧差MAD
int first_search()
{
for(int i_0=0;i_0<16;i_0++)
for(int j_0=0;j_0<16;j_0++)
{
old_block[i_0][j_0]=old_frame[16*m-d+i_0][16*n-d+j_0];
}
temp[0]=mad(cur_block,old_block);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -