⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3bu.cpp

📁 预测编码中的运动估计3步搜索法 本程序用C语言编程实现了该算法 大家可以参考参考
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			             {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 + -