本发明属于图像编码技术领域,更进一步涉及图像压缩技术领域中的一种基于高效视频编码标准的离散余弦变换实现方法。本发明可用于网络图像处理、卫星图像传输等领域中图像视频的压缩编码。
背景技术:
作为新一代的视频编码标准,高效视频编码标准主要针对高清和超高清分辨率视频的压缩进行了改进,相比于之前的h.264/avc标准,在相同压缩效果的情况下,码流大小仅为前者的一半。高效视频编码标准分为帧内编码和帧间编码两部分,对于帧内编码,它采用的是离散余弦变换来实现视频像素的压缩处理,使图像能量在空间域的分散分布转换为在变换域的相对集中分布,以达到去除空间冗余的目的。由于离散余弦变换计算复杂,在硬件实现过程中需要使用大量的乘法器进行运算,并且需要存储一维变换与二维变换之间的处理结果,因此一般的离散余弦变换方法需要消耗大量的硬件资源,同时增加了编码器运行的硬件功耗。
目前已经有多种离散余弦变换硬件设计结构被提出,例如目前使用很广泛的基于复用结构的方法,此方法利用了离散余弦变换系数矩阵可分解的特点,使得较大尺寸的变换结构可以利用较小尺寸的变换结构来实现,因此节省了单独实现较小尺寸变换结构的硬件开销,但是仍然需要很多的乘法计算,关键路径较长,严重限制了编码器的工作频率,并不能达到对高清超高清视频压缩处理的吞吐率要求。
北京君正集成电路股份有限公司在其申请的专利文献“一种hevc标准中视频编解码变换方法及装置”(专利申请号:cn201510226992.4,公开号:cn106210715a)中构建了一种利用蝶形变换结构实现的dct变换方法,该方法以蝶形变换原理为基础,使用复用较小尺寸dct变换结构的方法,实现更大尺寸的dct变换,此方法节省了所复用较小尺寸变换结构的硬件开销,且可以实现不同尺寸的离散余弦变换,但是该方法仍然存在的不足是:蝶形变换过程中的计算仍然使用乘法器来实现,导致硬件实现开销较大。
复旦大学在其申请的专利文献“一种适用于hevc标准的基于脏位的两级dct系数存储方法”(专利申请号:cn201510787966.9,公开号:cn105430419a)中公开了一种改进两级dct系数的存储方法。该方法首先将dct系数分为符号位、高位数据和低位数据三个部分,然后采用随机存取存储器sram作为存储层次中的第一级,再使用寄存器存储层次中的第二级,该方法通过层次化的存储策略减少硬件代价。但是,该方法仍然存在的不足之处是:二级数据的高位数据使用寄存器进行存储,导致此部分的硬件开销比较大。
技术实现要素:
本发明的目的是针对上述现有技术的不足,提出了一种基于高效视频编码标准的离散余弦变换实现方法,采用复用结构、加法位移代替乘法器以及使用随机存取存储器sram存储中间数据的方法来减小硬件开销,解决了编码器硬件功耗较大的问题,并提高了编码器的工作频率。
本发明实现的具体步骤如下:
(1)获得待编码图像的残差像素:
按照高效视频编码标准,对输入的一帧待编码图像,进行粗选和预测,得到残差像素;
(2)读取残差像素矩阵:
从待编码图像的残差像素中任意读取一个32×32大小残差像素矩阵;
(3)从残差像素矩阵中任意读取一行全部像素值;
(4)获得32点蝶形变换的处理数据:
将所读取行的全部像素值首尾依次相加,得到32点蝶形变换的前16个处理数据,再将所读取行的全部像素值首尾依次相减,得到32点蝶形变换的后16个处理数据;
(5)获得32点离散余弦变换后16个像素值:
(5a)利用32点离散余弦变换矩阵分解公式,将32点离散余弦变换系数矩阵分解为32点蝶形变换矩阵、32点分解矩阵和32点换序矩阵三个矩阵;
(5b)将后16个处理数据与32点分解矩阵中右下角16×16大小的系数矩阵相乘,得到32点离散余弦变换的后16个像素值;
(6)获得16点蝶形变换的处理数据:
将前16个处理数据首尾依次相加,得到16点蝶形变换的前8个处理数据,再将前16个处理数据首尾依次相减,得到16点蝶形变换的后8个处理数据;
(7)获得16点离散余弦变换后8个像素值:
(7a)利用16点离散余弦变换矩阵分解公式,将16点离散余弦变换系数矩阵分解为16点蝶形变换矩阵、16点分解矩阵和16点换序矩阵三个矩阵;
(7b)将后8个处理数据与16点分解矩阵右下角8×8大小的系数矩阵相乘,得到16点离散余弦变换后的8个像素值;
(8)获得8点蝶形变换的处理数据:
将前8个处理数据首尾依次相加,得到8点蝶形变换前4个处理数据,再将前8个处理数据首尾依次相减,得到8点蝶形变换后4个处理数据;
(9)获得8点离散余弦变换后4个像素值:
(9a)利用8点离散余弦变换矩阵分解公式,将8点离散余弦变换系数矩阵分解为8点蝶形变换矩阵、8点分解矩阵和8点换序矩阵三个矩阵;
(9b)将后4个处理数据与8点分解矩阵右下角4×4大小的系数矩阵相乘,得到8点离散余弦变换的后4个像素值;
(10)将前4个处理数据与4点离散余弦变换矩阵相乘,得到4点离散余弦变换的4个像素值;
(11)调整像素值顺序:
(11a)将4点离散余弦变换得到的4个像素值与8点离散余弦变换得到的后4个像素值合并,再与8点换序矩阵相乘,得到调整后的8点离散余弦变换所有像素值;
(11b)将8点离散余弦变换得到的8个像素值与16点离散余弦变换得到的后8个像素值合并,再与16点换序矩阵相乘,得到调整后的16点离散余弦变换所有像素值;
(11c)将16点离散余弦变换得到的16个像素值与32点离散余弦变换得到的后16个像素值合并,再与32点换序矩阵相乘,得到调整后的32点离散余弦变换所有像素值,并存入静态随机存取存储器sram中;
(12)判断是否读完残差像素矩阵中所有的残差像素值,若是,则执行步骤(13),否则,执行步骤(3);
(13)从静态随机存取存储器sram中取出所有的残差像素值,进行二维离散余弦变换,将变换后的残差像素矩阵存入寄存器中;
(14)判断是否读完待编码图像中所有的残差像素矩阵,若是,则执行步骤(15),否则,执行步骤(2);
(15)输出编码码流:
将存入寄存器中的所有残差像素矩阵合并,进行量化和熵编码后,输出编码码流。
本发明与现有技术相比具有以下优点:
第一、由于本发明采用矩阵分解以及蝶形变换的方法,将较大尺寸离散余弦变换的结构复用较小尺寸离散余弦变换结构来实现,同时使用加法和位移代替了乘法器的使用,克服了现有技术中大尺寸像素点矩阵离散余弦变换硬件开销较大的问题,使得本发明能够降低图像压缩过程的硬件功耗。
第二、本发明采用静态随机存取存储器sram存储一维离散余弦变换的中间值的方法,由于静态随机存取存储器sram相比于寄存器具有硬件开销小的特点,更适合大量中间像素值的存储,克服了现有技术中使用寄存器存储中间像素值的存储开销较大的问题,使得本发明能够进一步降低实现帧内编码离散余弦变换的硬件开销。
附图说明
图1是本发明的流程图;
图2是本发明实施例中利用随机存取存储器存储中间数据示意图;
具体实施方式
下面结合附图对本发明做进一步的描述。
参照图1,本发明实现的具体步骤如下。
步骤1,获得待编码图像的残差像素。
按照高效视频编码标准,对输入的一帧待编码图像,进行粗选和预测,得到残差像素。
步骤2,读取残差像素矩阵。
从待编码图像的残差像素中任意读取一个32×32大小残差像素矩阵。
步骤3,从残差像素矩阵中任意读取一行全部像素值。
步骤4,获得32点蝶形变换的处理数据。
将所读取行的全部像素值首尾依次相加,得到32点蝶形变换的前16个处理数据,再将所读取行的全部像素值首尾依次相减,得到32点蝶形变换的后16个处理数据。
步骤5,获得32点离散余弦变换后16个像素值。
利用32点离散余弦变换矩阵分解公式,将32点离散余弦变换系数矩阵分解为32点蝶形变换矩阵、32点分解矩阵和32点换序矩阵三个矩阵。
所述的32点离散余弦变换矩阵分解公式如下:
t32=b32·m32·p32
其中,t32表示32点离散余弦变换系数矩阵,b32表示32点蝶形变换矩阵,m32表示32点分解矩阵,p32表示32点换序矩阵。
将后16个处理数据与32点分解矩阵中右下角16×16大小的系数矩阵相乘,得到32点离散余弦变换的后16个像素值。
步骤6,获得16点蝶形变换的处理数据。
将前16个处理数据首尾依次相加,得到16点蝶形变换的前8个处理数据,再将前16个处理数据首尾依次相减,得到16点蝶形变换的后8个处理数据。
步骤7,获得16点离散余弦变换后8个像素值。
利用16点离散余弦变换矩阵分解公式,将16点离散余弦变换系数矩阵分解为16点蝶形变换矩阵、16点分解矩阵和16点换序矩阵三个矩阵。
所述的16点离散余弦变换矩阵分解公式如下:
t16=b16·m16·p16
其中,t16表示16点离散余弦变换系数矩阵,与32点分解矩阵左上角16×16大小系数矩阵相同,b16表示16点蝶形变换矩阵,m16表示16点分解矩阵,p16表示16点换序矩阵。
将后8个处理数据与16点分解矩阵右下角8×8大小的系数矩阵相乘,得到16点离散余弦变换后的8个像素值。
步骤8,获得8点蝶形变换的处理数据。
将前8个处理数据首尾依次相加,得到8点蝶形变换前4个处理数据,再将前8个处理数据首尾依次相减,得到8点蝶形变换后4个处理数据。
步骤9,获得8点离散余弦变换后4个像素值。
利用8点离散余弦变换矩阵分解公式,将8点离散余弦变换系数矩阵分解为8点蝶形变换矩阵、8点分解矩阵和8点换序矩阵三个矩阵。
所述的8点离散余弦变换矩阵分解公式如下:
t8=b8·m8·p8
其中,t8表示8点离散余弦变换系数矩阵,与16点分解矩阵左上角8×8大小系数矩阵相同,b8表示8点蝶形变换矩阵,m8表示8点分解矩阵,p8表示8点换序矩阵;
将后4个处理数据与8点分解矩阵右下角4×4大小的系数矩阵相乘,得到8点离散余弦变换的后4个像素值。
步骤10,将前4个处理数据与4点离散余弦变换矩阵相乘,得到4点离散余弦变换的4个像素值。
步骤11,调整像素值顺序。
将4点离散余弦变换得到的4个像素值与8点离散余弦变换得到的后4个像素值合并,再与8点换序矩阵相乘,得到调整后的8点离散余弦变换所有像素值;
将8点离散余弦变换得到的8个像素值与16点离散余弦变换得到的后8个像素值合并,再与16点换序矩阵相乘,得到调整后的16点离散余弦变换所有像素值;
将16点离散余弦变换得到的16个像素值与32点离散余弦变换得到的后16个像素值合并,再与32点换序矩阵相乘,得到调整后的32点离散余弦变换所有像素值,并存入静态随机存取存储器sram中,具体的存储方式如图2所示。图中sram1到sram16表示16个静态随机存取存储器sram,数值对(0,0)到(3,15)分别表示像素值在32×32大小像素矩阵中的坐标。
步骤12,判断是否读完残差像素矩阵中所有的残差像素值,若是,则执行步骤13,否则,执行步骤3。
步骤13,从静态随机存取存储器sram中取出所有的残差像素值,进行二维离散余弦变换,将变换后的残差像素矩阵存入寄存器中。
步骤14,判断是否读完待编码图像中所有的残差像素矩阵,若是,则执行步骤15,否则,执行步骤2。
步骤15,输出编码码流。
将存入寄存器中的所有残差像素矩阵合并,进行量化和熵编码后,输出编码码流。
下面结合仿真实验对本发明的效果做进一步的描述。
1、仿真实验条件:
本发明仿真实验所选择的高效视频编码标准官方软件模型版本为16.0,硬件实现平台为isedesignsuite14.3,仿真工具为modelsim10.1b,综合工具使用designcompiler。
2、仿真实验内容与分析:
在平台isedesignsuite14.3上,按照本发明方法完成基于高效视频编码标准的离散余弦变换的实现,使用modelsim10.1b进行仿真,并用designcompiler综合得到硬件开销,仿真实验数据如表1所示。
表1本发明的仿真实验数据
由表1的仿真实验数据可见,本发明所采用的蝶形变换方法以及使用随机存取存储器sram代替普通寄存器存储中间数据的方法,应用到不同分辨率图像的离散余弦变换的方法中,可以在一定程度上减小离散余弦变换实现过程中的硬件开销。其中,离散余弦变换部分可节省约27%~29%的硬件开销,而离散余弦变换中间数据存储部分可降低约7%~9%的硬件开销。