资源描述:
《H.264内预测及整数DCT变换.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一,帧内预测帧内预测可以减少空域和频域的冗余度,获得更高的压缩效率.当块或宏块做帧内编码时,基于4×4的亮点和色度样本有多种预测方式.对于Intra4×4模式下,每个4×4的小块中的像素将通过邻块中已经解码的17个像素进行预测(图3(a)中从A至Q),预测模式分为9种(模式0到模式8),其中模式2为DC(直流)预测.其他8种模式的预测方向如图1及图2所示.图11、模式0:DC预测,此种模式有如下4种情形:(1)若A,B,C,D,I,J,K,L均在图像界内,则从a到p均由如下公式计算,(A+B+C+D+I+J+K+L+4)>>3;(2)
2、若A,B,C,D在图像外,I,J,K,L在图像之内,则a到p所有像素均如下计算,(I+J+K+L+2)>>2;(3)与(2)相反,若A,B,C,D在图像内而I,J,K,L,在外,则为(A+B+C+D+2)>>2;(4)A,B,C,D,I,J,K,L均在图像外,a到p均取值128.在代码中,表示为:s0=0;if(block_available_up&&block_available_left){s0=(P_A+P_B+P_C+P_D+P_I+P_J+P_K+P_L+4)/(2*BLOCK_SIZE);}//如当前块上块和左块存在,则块
3、内亮度值为上块参考点值与左块参考点值的均值。//后面加上4是因为/8是右移(取整)操作,加上4可以转换为四舍五入。elseif(!block_available_up&&block_available_left){s0=(P_I+P_J+P_K+P_L+2)/BLOCK_SIZE;}//如上块不存在,则取左块参考点值的均值elseif(block_available_up&&!block_available_left){s0=(P_A+P_B+P_C+P_D+2)/BLOCK_SIZE;}//同上else{s0=img->dc_pre
4、d_value;}//如都不存在,则取128for(j=0;jmprr[DC_PRED][i][j]=s0;//直流预测,DC_PRED为预测模式。}}2、模式0、1:垂直/水平预测垂直预测a,e,i,m由A观测得b,f,j,n由B预测得c,g,k,o由C观测得d,h,l,p由D观测得水平预测a,b,c,d由A观测得e,f,g,h由B预测得i,j,k,l由C观测得m,n,o,p由D观测得在代码中实现为:for(i=0;i5、E;i++){img->mprr[VERT_PRED][0][i]=img->mprr[VERT_PRED][1][i]=img->mprr[VERT_PRED][2][i]=img->mprr[VERT_PRED][3][i]=(&P_A)[i];//P_A等实际上是数组里的值(在上面有定义)。(&P_A)是得到数组名。//以上为垂直预测方式img->mprr[HOR_PRED][i][0]=img->mprr[HOR_PRED][i][1]=img->mprr[HOR_PRED][i][2]=img->mprr[HOR_PRED]
6、[i][3]=(&P_I)[i];//以上为水平预测方式}其他模式和以上的差不多,就不一一列了。3、当9种模式都预测完后,在rdopt.c中,会遍历这9种预测模式,找到一种误差最小的方案基本实现代码如下:for(k=j=0;j<4;j++)for(i=0;i<4;i++,k++){diff[k]=imgY_org[pic_opix_y+j][pic_opix_x+i]-img->mprr[ipmode][j][i];//计算误差}cost=(ipmode==mostProbableMode)?0:(int)floor(4*lambda
7、);cost+=SATD(diff,input->hadamard);if(cost<*min_cost)//如COST最小,则当前ipmode为best_ipmode{best_ipmode=ipmode;*min_cost=cost;}二、整数DCT变换为什么要进行变换空间图像数据通常是很难压缩的:相邻的采样点具有很强的相关性(相互关联的),而且能量一般平均分布在一幅图像中,从而要想丢掉某些数据和降低数据精度而不明显影响图像质量,就要选择合适的变换,方法,使图像易于被压缩。适合压缩的变换方法要有这样几个性质:1、可以聚集图像的能量
8、(将能量集中到少数有意义的数值上);如下图:举个例子说明,下图是变换前的数据:以下是变换后的数据:可以看出,经变换后,数据的能量基本上集中到左上方(低频信号)了,而变换后的数据完全可以通过反变换还原成原来的数据。为了达到