JPEG2000编码器IP核设计,包括具体算法与结构
更多的特性也带来了硬件实现上的复杂,现有JPEG2000的商用芯片种类很少,IP核的价格也很高,对该标准的普及带来了障碍。然而它优秀的性能决定了它光明的前途,申请此项目更是为了借OpenHW开放源码设计大赛这个平台,实现一个简单,易用,高效,可靠,方便扩展并且公开源码的JPEG2000编码器IP核,为JPEG2000走向普及做出贡献。随着时代的发展,又出现了很多JPEG2000结构实现的新方案,如更高效的DWT引擎,更好的EBCOT硬件结构,在此次项目中也想将这些最新的成果应用进来,力图做出一个性能更好的编码器。
四、原理和技术特点
4.1 JPEG2000的算法特点
与JPEG相比,JPEG2000算法的显著特点是用DWT取代了DCT,用EBCOT取代了哈夫曼编码(Huffman)。
JPEG2000可以分为三个关键步骤:先是小波变换,把图像分解为空间频域子带;然后把每个子带分为较小的块,独立编码成为嵌入式比特流;最后,嵌入式比特流被包装成分层码流。这三部分,简单来说就可以分为DWT、EBCOT第一层编码(Tier-1)和第二层编码(Tier-2)三个模块。再加上预处理阶段,以及量化阶段,组成完整的编码器。
JPEG2000编码器的框图如图4-1所示
图 4-1编码器结构框图
在编码器中,首先对源图像进行前期预处理,对处理的结果进行离散小波变换,得到小波系数。然后对小波系数进行量化和熵编码,最后组成标准的输出码流。具体过程如下:
将有多个颜色分量组成的图像分解成单一颜色分量的图像。分量之间存在一定的相关性,通过分解相关的分量变换,可减少数据之间的冗余度,提高压缩效率;
分量图像被分解成大小统一的矩形片----图像片(Tile)。图像片是进行变换和编解码的基本单元;
对每个图像片进行小波变换。产生多级系数图像。这些不同级数的系数图像可以重构出不同分辨率的图像;
多级分解的结果是由小波系数组成的多个子带。它们表示图像片中局部区域的频率特性;
对系数子带进行量化,并且组成矩形数组的"码块"(Code Block);
对一个码块中的系数位平面(也就是一个码块中整个系数中具有相同权值的那些位)进行熵编码;
将所有码块的压缩位流适当的截取,组织成具有不同质量级的压缩位流层;
将压缩码流以包为单元进行组织,产生JPEG2000文件格式的码流
4.2 组成部分
1、预处理
(1)图像分片
图像越大,所占用的内存越大,为此,编码器把图片切分成几个相互独立的矩形切片,对每个切片独立编码。
如图2-3所示,这些切片的格子覆盖在参考网格的上面,每个切片长宽分别为XTsiz和YTsiz。这些切片格子的原点是(XTOsiz,YTOsiz)。切片的大小为XTsiz*YTsiz。各切片的标号由光栅扫描顺序来标记。
图4-2 参考网格
图4-3图像切片
(2)DC电平位移
编码器假定输入数据有一个标准的动态范围,并且以0为中心。如果样本是无符号数,每个样本用p位比特表示,就用2p-1去减样本值。目的是在解码时,能够从有符号的数值中正确恢复重构的无符号样本值。直流电平位移是对仅有有符号数组成的图像片的像素进行的。电平位移并不影响图像的质量,在解码端,在离散小波变换之后,对重构的图像进行反向直流电平位移。
(3)分量变换
彩色图片有3个图像分量RGB组成,分量变换把图像从RGB映射到YCrCb上。有两种变换模式:实型的不可逆颜色变化(ICT)和整型的可逆颜色变换(RCT)。
ICT定义为:
U0(x,y)、U1(x,y)、U2(x,y)分别代表红、绿、蓝三种颜色。V0(x,y)、V1(x,y)、V2(x,y)分别代表Y、Cr和Cb三种。
对于ICT来说,RCT就是一个可逆的整数到整数的类似过程:
2、小波变换
通过小波变换,一个分量将分成多个子带。由于这些子带具有统计特性,变换后的数据在编码时一般具有更高的效率。在编码器中,支持可逆的整型小波变换和不可逆的实型小波变换,分别由5/3小波滤波器和9/7小波滤波器实现。完全重构的均匀极大采样的滤波器组(PR-UMDFB)用来实现小波变换。提升算法比传统的卷积方法占用更少的内存、效率更高。一维UMDFB的提升实现如图:
图4-4 滤波器组结构
Ai(z)、Qi(z)和si分别是滤波器函数、量化因子和(标量)增益。
(1)5/3小波一维DWT的实现
(2)9/7小波一维DWT的实现
3、量化
量化的目的是通过把系数限制在一个比较小的精度范围,或者是想要的图像质量。通常,量化器都会采用下式(不同的子带使用不同的量化步长):
其中△就是量化步长,U(x,y)是输入的子带样本,V(x,y)是量化器输出的子带样本。
这里引入了量化死区的概念,即在距离0小于一倍步长的样
- 如何通过开源API进行DSP视频处理(02-15)
- 一种输出格式可控的多码率LDPC编码器实现(11-06)
- 基于DM365的视频编码器的硬件设计(10-15)
- 音视频SoC测试要求与应用介绍(07-20)
- H.264在ADSP-BF561上的实现与优化(05-27)
- 一种简单串行鼠标控制的单片机实现(03-19)