本发明属于视频压缩领域,具体涉及一种视频压缩编码方法。
背景技术:
1948年,oliver提出了第一个编码理论——脉冲编码调制(pulsecodingmodulation,pcm);同年,香农在其经典论文“通信的数学原理”中首次提出并建立了信息率失真函数概念;1959年,香农进一步确立了码率失真理论。这些概念的出现奠定了信息编码的理论基础。
数据压缩编码的基本思想是在保证视觉效果的前提下,尽可能的减少视频数据的相关性,也就是说去除冗余信息。所谓的视频数据冗余信息主要是针对空间、时间以及视觉上的冗余,视频压缩实质上就是减少这些冗余量,从而以最小的码元包含最大的信息。对原始数据预测、变换、量化、熵编码,消除视频数据的冗余,达到压缩的目的。
在视频质量要求快速提高的情况下,视频压缩对带宽的要求也越来越高,并且在视频压缩过程中,会出现预测不准确,量化有损等问题,因此,如何在满足视频压缩质量且进一步降低传输带宽已经成为研究重点问题。
技术实现要素:
为了解决现有技术中存在的上述问题,本发明提供了一种视频压缩编码方法。本发明要解决的技术问题通过以下技术方案实现:
本发明实施例提供了一种视频压缩编码方法,包括如下步骤:
(a)获取待处理图像、自适应模板、波动状态表;
(b)将所述待处理图像分成若干宏块;
(c)根据所述自适应模板获得所述宏块的预测残差;
(d)根据所述波动状态表和所述预测残差获得所述宏块的量化残差;
(e)将若干所述量化残差写入码流以完成所述视频压缩编码。
在本发明的一个实施例中,步骤(c)包括:
(c1)根据若干宏块对所述自适应模板进行初始化;
(c2)根据初始化后的所述自适应模板获得剩余所述宏块的预测残差。
在本发明的一个实施例中,步骤(c1)包括:依次对每个所述宏块进行一致性检验后依次填充到所述自使用模板中对应的表位中以完成所述初始化。
在本发明的一个实施例中,步骤(c2)包括:
(c22)获取所述宏块的正上参考宏块、左参考宏块、左上参考宏块、右上参考宏块;
(c23)依次对所述正上参考宏块、所述左参考宏块、所述左上参考宏块、所述右上参考宏块进行一致性检测并更新所述自适应模板;
(c24)根据更新后的所述自适应模板获得所述宏块的预测残差。
在本发明的一个实施例中,步骤(c24)包括:
(c241)根据更新后的所述自适应模板获取所述宏块的匹配表位;
(c242)根据所述匹配表位获取最优预测像素阵列;
(c243)根据所述最优预测像素矩阵获得所述宏块的预测残差。
在本发明的一个实施例中,步骤(d)包括:
(d1)根据所述宏块的预测残差获得量化残差和预估反量化残差;
(d2)根据所述预估反量化残差和所述预测残差获得残差损失;
(d3)根据所述残差损失获得波动系数;
(d4)根据所述波动系数、所述波动状态表、所述残差损失获得最优波动状态以获得所述量化残差。
在本发明的一个实施例中,所述波动状态表包括若干不同波动状态,所述波动状态ct满足如下公式:
ct={c0,c1,ci,…,cmbnum-1}
其中,ci为0或1或-1,mbnum为所述宏块长度,ci为所述波动状态的第i位的值。
在本发明的一个实施例中,步骤(d4)包括:
(d41)根据所述波动系数、所述波动状态表、所述残差损失计算各波动状态对应的绝对误差和;
(d42)获得所述绝对误差和最小时对应的波动状态即为所述最优波动状态。
在本发明的一个实施例中,步骤(e)包括:重复步骤(c)~步骤(d),获得所述若干宏块中任一所述宏块对应的最优预测像素矩阵对应的w1、w2、w3、w4的取值、最优波动状态所对应的状态标识依次写入码流。
在本发明的一个实施例中,所述自适应模板的表位大小与所述宏块大小相同。
与现有技术相比,本发明的有益效果:
本发明的视频压缩编码方法通过定义自适应模板计算宏块的预测残差,与现有的方法相比,当待压缩图像的纹理较为复杂时能够提高当前处理宏块中的像素与自适应模板中选定的像素匹配的概率,能够提高对复杂纹理区域求预测残差值的精度,同时根据波动状态表计算量化残差,进一步提高压缩率的同时能够减小反量化的损失,降低理论极限熵,增大带宽压缩率。
附图说明
图1为本发明实施例提供的一种视频压缩编码方法的流程示意图;
图2为本发明实施例提供的一种自适应模板的结构示意图;
图3为本发明实施例提供的一种视频压缩编码方法的波动状态表结构示意图。
具体实施方式
下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。
实施例一
请参见图1,图1为本发明实施例提供的一种视频压缩编码方法的流程示意图。
该视频压缩编码方法包括如下步骤:
(a)获取待处理图像、自适应模板、波动状态表;
(b)将所述待处理图像分成若干宏块;
(c)根据所述自适应模板获得所述宏块的预测残差;
(d)根据所述波动状态表和所述预测残差获得所述宏块的量化残差;
(e)将若干所述量化残差写入码流以完成所述视频压缩编码。
其中,步骤(c)包括:
(c1)根据若干宏块对所述自适应模板进行初始化;
(c2)根据初始化后的所述自适应模板获得剩余所述宏块的预测残差。
在本发明的一个实施例中,步骤(c1)包括:依次对每个所述宏块进行一致性检验后依次填充到所述自使用模板中对应的表位中以完成所述初始化。
其中,步骤(c2)包括:
(c22)获取所述宏块的正上参考宏块、左参考宏块、左上参考宏块、右上参考宏块;
(c23)依次对所述正上参考宏块、所述左参考宏块、所述左上参考宏块、所述右上参考宏块进行一致性检测并更新所述自适应模板;
(c24)根据更新后的所述自适应模板获得所述宏块的预测残差。
其中,步骤(c24)包括:
(c241)根据更新后的所述自适应模板获取所述宏块的匹配表位;
(c242)根据所述匹配表位获取最优预测像素阵列;
(c243)根据所述最优预测像素矩阵获得所述宏块的预测残差。
其中,步骤(d)包括:
(d1)根据所述宏块的预测残差获得量化残差和预估反量化残差;
(d2)根据所述预估反量化残差和所述预测残差获得残差损失;
(d3)根据所述残差损失获得波动系数;
(d4)根据所述波动系数、所述波动状态表、所述残差损失获得最优波动状态以获得所述量化残差。
其中,所述波动状态表包括若干不同波动状态,所述波动状态ct满足如下公式:
ct={c0,c1,ci,…,cmbnum-1}
其中,ci为0或1或-1,mbnum为所述宏块长度,ci为所述波动状态的第i位的值。
其中,步骤(d4)包括:
(d41)根据所述波动系数、所述波动状态表、所述残差损失计算各波动状态对应的绝对误差和;
(d42)获得所述绝对误差和最小时对应的波动状态即为所述最优波动状态。
其中,步骤(e)包括:重复步骤(c)~步骤(d),获得所述若干宏块中任一所述宏块对应的最优预测像素矩阵对应的w1、w2、w3、w4的取值、最优波动状态所对应的状态标识依次写入码流。
其中,所述自适应模板的表位大小与所述宏块大小相同。
本发明通过定义自适应模板计算宏块的预测残差,与现有的方法相比,当待压缩图像的纹理较为复杂时能够提高当前处理宏块中的像素与自适应模板中选定的像素匹配的概率,能够提高对复杂纹理区域求预测残差值的精度,同时根据波动状态表计算量化残差,进一步提高压缩率的同时能够减小反量化的损失,降低理论极限熵,增大带宽压缩率。
实施例二
图1为本发明实施例提供的一种视频压缩编码方法的流程示意图。重点对视频压缩编码方法进行详细描述。具体地,该视频压缩编码方法包括步骤:
s01:获取待处理图像;
获得含有待处理图像信息的原始像素矩阵;
s02:将原始像素矩阵分成若干个宏块;
其中,宏块定义为包含m×n个像素的像素矩阵,将原始像素矩阵按序分成若干大小相同的宏块。
本实施例中以宏块的大小为16×1的像素矩阵进行说明,设原始像素矩阵共分成s个宏块,序号为第1宏块~第s宏块。
s03:初始化自适应模板;
在进行视频压缩编码之前即步骤s01之前,需要定义自适应模板大小,该自适应模板需要存储在编码端和编码端。
请参考图2,图2为本发明实施例提供的一种自适应模板的结构示意图;其中,自适应模板的表位的数量可以设置为4个、8个、16个或32个;本实施例中以表位数量为16进行说明,其它表位数量同理。自适应模板的表位数量为16,表位序号从0到15依次排列,序号越小,优先级越高。
自适应模板的表位大小与宏块的大小相同,每个表位记录一个宏块的一组像素值。宏块的大小为16×1为例,即每个表位的大小也为16×1的矩阵。
选择与若干宏块作为初始化填充宏块对自适应模板进行初始化填充,其中,填充时可以用初始化填充宏块的原始像素值,也可以先通过现有图像压缩编码方式先对初始化填充宏块进行图像压缩编码得到初始化填充宏块每个像素的重建值;其中,现有图像压缩编码方式可以为h264或者h263标准中的任何压缩编码方式,以下步骤以初始化填充宏块的重建值进行填充为例。
初始化自适应模板开始时,自适应模板的初始状态为空,按序将若干宏块中第1宏块作为当前处理宏块的重建值填充到序号为0的表位;继续填充自适应模板,将序号为0的表位中的重建值顺序移位到序号为1的表位中,将若干宏块中第2宏块作为当前处理宏块,将第2宏块的重建值填充到序号为0的表位;以此类推,每次填充自适应模板时,将已填充的r个表位位置顺序向后移位,移一个表位位置,将待填充的宏块的重建值填充到序号为0的表位,直到自适应模板中的16个表位填充完毕。
其中,按序可以是按照原始像素矩阵从左到右的扫描顺序,即第1宏块和第2宏块为从左到右相邻的两个宏块,此处不做固定限制。
其中,填充表位时需要将当前处理宏块与自适应模板中每一行表位都进行一致性判断,其中,一致性检测的公式如下所示:
其中,cur为当前处理宏块的原始像素值,currec为当前处理宏块的重建值,abs为求绝对值符号,pred为自适应模板中已填充的表位填充值,mbnum为当前处理宏块中的像素数量,a1和a2为权重系数,thr0为阈值,thr0的取值根据用户需求确定,a1和a2的取值可以是预先设定的固定值,进一步地,a1+a2=1;
优选地,a1可以选取为0.5,a2可以选取为0.5,a1和a2也可以灵活调整大小。
当
反之,当
具体为:每次进行当前处理宏块的重建值填充前,按序号从小到大,检测当前处理宏块与自适应模板中所有已填充的r个表位中每个表位的一致性;若当前处理宏块与所有表位都不具备一致性,那么自适应模板从序号0到序号r-1,共r个有效表位顺序向后移位,当前处理宏块的重建值放在自适应模板序号0的表位。若当前处理宏块与任一表位具备一致性,自适应模板表位位置不变,可选择将自适应模板中与当前处理宏块具备一致性的表位填充值更新为当前处理宏块的重建值或者不更新。
s04:更新自适应模板;
若第i宏块刚好将自适应模板填充完成,1≤i≤s,找到下一个第i+1个宏块作为当前处理宏块;
获取当前处理宏块的正上参考宏块、左参考宏块、左上参考宏块、右上参考宏块;
若正上参考宏块存在,则检测正上参考宏块与自适应模板中已填充的表位填充值的一致性,若不具备一致性,先将自适应模板中从序号为0的表位开始,将所有表位填充值顺序向下移动一位,最后一行表位的填充值移除列表,再将正上参考宏块的重建值更新到自适应模板序号为0的表位位置;若具备一致性,将具备一致性的表位与序号为0的表位中对应的填充值进行对换。
若左参考宏块存在,则将左参考宏块与自适应模板的各表位进行一致性检测,若不具备一致性,先将自适应模板中从序号为1的表位开始,将所有表位的填充值顺序向下移动一位,最后一行表位的填充值移除列表,再将左参考宏块的重建值更新到自适应模板序号为1的表位位置;
若左上参考宏块存在,则将左上参考宏块与自适应模板的各表位进行一致性检测,若不具备一致性,先将自适应模板中从序号为2的表位开始,将所有表位的填充值顺序向下移动一位,最后一行表位的填充值移除列表,再将左上参考宏块的重建值更新到自适应模板序号为2的表位位置;
若右上参考宏块存在,则将右上参考宏块与自适应模板的各表位进行一致性检测,若不具备一致性,先将自适应模板中从序号为3的表位开始,将所有表位的填充值顺序向下移动一位,最后一行表位的填充值移除列表,再将右上参考mb的重建值更新到自适应模板序号为3的表位位置;
其中,一致性检测方法满足步骤s03中检测一致性的公式。
s05:根据所述自适应模板获得所述宏块的预测残差;
s051:获取当前处理宏块在自适应模板中的匹配表位;
将当前处理宏块与自适应模板中每个表位进行匹配,匹配公式如下:
其中,cur为当前处理宏块的像素值,pred为自适应模板中已填充的表位填充值,mbnum为当前处理宏块中像素数量,c1和c2为权重系数。其中,c1和c2的取值可以是预先设定的固定值;优选地,可以直接将c1设定为1,将c2设定为0。
将每个表位对应的rdo从小到大进行排序并获得前m个表位,作为当前处理宏块的匹配表位。
s052:获取当前处理宏块对应的最优预测像素阵列;
分别对m个匹配表位中每个表位的像素值进行加权处理,其中,加权满足如下公式:
predwi=(w1*predi-1+w2*predi+w3*predi+1+w4)/4
其中,predwi为m个匹配表位中当前处理表位中第i位预测像素值,predi为m个匹配表位中当前处理表位第i个填充值,其中,0≤i≤mbnum,mbnum为当前处理宏块中像素数量,计算每个表位对应的mbnum个预测像素值,mbnum个预测像素值组成预测像素矩阵。
其中,w1、w2、w3、w4为一组预测参数,预设t种w1、w2、w3、w4的不同组合,针对一个表位可以生成t种预测像素阵列,m个表位有m×t种预测像素矩阵,最终在m×t个预测像素矩阵中,根据rdo公式,计算m×t个预测像素矩阵中rdo最小的预测像素矩阵为最优预测像素矩阵,并获得该最优预测像素矩阵对应的表位和w1、w2、w3、w4的取值。
优选地,w1+w2+w3=3;
进一步地,w1、w2、w3可以均为1;
进一步地,w1、w2、w3分别选取为0.5,2,0.5,w1、w2、w3可以根据实际情况,灵活调整大小。
优选地,w4可以选取为当前处理表位中所有填充值的平均值;
优选地,w4也可以选取为当前处理表位中第i位的填充值。
s053:根据最优预测像素矩阵获得当前处理宏块的预测残差;
可选择点对点求差方式计算当前处理宏块的预测残差,满足如下公式:
presi=curi-predwi
其中,presi为当前处理宏块第i位的预测残差,curi为当前处理宏块第i位的重建值,predwi为最优预测像素矩阵第i位的预测像素值。
s06:对当前处理宏块的预测残差依次进行量化处理和补偿处理获得量化残差。
s061:对当前处理宏块的预测残差进行量化处理获得量化残差和预估反量化残差;
量化残差和预估反量化残差可理解为现有技术的中任意为对当前处理宏块的预测残差进行量化处理后获得量化残差,再对量化残差进行反量化获得的预估反量化残差;可采用现有的任意量化、反量化的方法获得,此处获得预估反量化残差的方法不做限制。
其中的一种求预估反量化残差的方法如下:
获取量化参数,计算量化残差和预估反量化残差满足如下公式:
resi=[(preresi+(1<<qp)/2)》qp]
esinvresi=((preresi+(1<<qp)/2)》qp)<<qp
其中,resi为当前处理宏块第i位像素的量化残差,,esinvresi为当前处理宏块第i位像素的预估反量化残差,preresi表示当前处理宏块第i位像素的预测残差,qp为量化参数;其中,0≤i≤mbnum-1,mbnum为当前处理宏块的像素个数。
其中,“<<”算式表示,若有表达式a<<m则表示将整型数a按二进制位向左移动m位,高位移出后,低位补0。
其中,“>>”算式表示,若有表达式a>>m则表示将整型数a按二进制位向右移动m位,低位移出后,高位补0。
s062:计算残差损失;
其中,残差损失满足:
lossresi=esinvresi-preresi
其中,lossresi表示当前处理宏块第i位像素的所述残差损失。
s063:计算波动系数;
其中,根据所述残差损失计算波动系数,所述波动系数满足:
其中,lossresi表示当前处理宏块第i位像素的残差损失,pixnumnone0为残差损失内非0的残差数量,round为四舍五入运算符。
s064:根据波动状态表获得当前处理宏块的最优波动状态;
请参见图3,图3为本发明实施例提供的一种视频压缩编码方法的波动状态表结构示意图。
波动状态表上每一行对应的序列c0~cmbnum-1为一个波动状态,mbnum为当前处理宏块的像素个数。
其中,波动状态表需要同时存储于编码端和解码端,所述波动状态表中每个波动状态对应一个波动状态标识即所述图3上的序号n,用来标识波动状态,这样在传输码流过程中仅传输波动状态标识可以节省带宽。
其中,波动状态表的每个波动状态ct满足如下公式:
ct={c0,c1,ci,…,cmbnum-1}
其中,ci为0或1或-1,mbnum为当前处理宏块长度,ci表示第i位像素对应的波动状态值。
其中,波动状态表包括n组波动状态,这n组波动状态均不相同,且n组波动状态为遍历各种0,1,-1的排列组合。
s0641:根据所述波动系数、所述波动状态表、所述残差损失计算各波动状态对应的绝对误差和;
其中,所述绝对误差和满足:
其中,sad表示当前处理宏块绝对误差和,ci表示当前处理宏块第i位像素的波动状态,pixnum表示所述残差损失的长度。
s0642:获得当前处理宏块的最优波动状态。
根据绝对误差和公式每组波动状态计算获得一个sad值,波动状态表可以计算获得n个sad值,获得绝对误差和最小时对应的波动状态为当前处理宏块的最优波动状态。
s07:重复步骤s04~s06,获得待处理图像的量化残差;
遍历剩余所有宏块,将任一宏块作为当前处理宏块,重复步骤s04~s06,即可获得待处理图像的量化残差。
将每个宏块对应的3部分数据写入传输码流,3部分数据包括:最优预测像素矩阵对应的w1、w2、w3、w4的取值、最优波动状态所对应的状态标识、量化残差写入码流进行传输。
本发明实施例主要通过对视频图像压缩编码过程中的预测和量化模块进行优化,本方法的有益效果为:
本发明通过定义自适应模板计算宏块的预测残差,与现有的方法相比,当待压缩图像的纹理较为复杂时能够提高当前处理宏块中的像素与自适应模板中选定的像素匹配的概率,能够提高对复杂纹理区域求预测残差值的精度,同时根据波动状态表计算量化残差,进一步提高压缩率的同时能够减小反量化的损失,降低理论极限熵,增大带宽压缩率。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。