摘要: 为了使JPEG2000能应用到便携产品中,采用了高效存储结构的硬件实现方案,并设计了相应的寄存器组和控制逻辑。仿真结果表明所设计所设计的编码器能够在0.256s内完成对一帧512×512的灰度图像的编码。
关键词: 基于最优截断的嵌入式编码 JPEG2000 交错存储
随着多媒体市场的迅猛发展,百万像素的数码相机、各种功能强大的彩屏手机等数字消费产品逐渐普及。这些多媒体应用均需要处理高质量、高分辨率的大图像,这对存储介质的容量和传输信道的带宽都提出了新要求。图像压缩的国际标准JPEG已不能满足这些新的要求,而且它在低码率时还存在着方块效率。因此,从1997年开始,JPEG委员会就致力于开发新的静态图像压缩标准JPEG2000,并在2000年8月形成了最终经济核草案,在2000年12月使其成为了国标标准。
JPEG2000相比JPEG有着更大的灵活性,不仅能对原始图像高效地压缩,而且可以对压缩后的数据进行处理。这意味着可以从压缩码流中提取一部分数据来重建低分辨率或低码率的图像,或者是撮图像的感兴趣区域。这样就允许将原始图像压缩为单一的码流以适应不同的传输信道、存储或显示设备,而不必考虑图像的大小、分量多少以及样本的精度。
JPEG2000的一个主要特性就是基于图像质量和分辨率的累进传输,为了支持这种可分级的压缩编码,JPEG2000采用了离散小波变换(DWT)替代JPEG中的离散余弦变换(DCT),并采用了Taubman提出的具有优化截断点的嵌入式块编码(EBCOT)算法。
JPEG2000编码器的框图如图1所示。
首先将原始图像划分为图像片,通过DWT将图像片分解为不同的分辨率级别,获得多个子带的频域系数,将各个子带划分为码块(典型大小是32×32或64×64),对每个码块进行嵌入式的块编码,生成上下文和待编码的数据位;然后由算术编码部分根据每个数据位的上下文自适应编码,产生每个码块的子码流;最后将各个码块的子码流组织成代表码流质量层的分组,并添加相应的头结构信息,帮助解码器如何解码。
EBCOT作为JPEG2000的核心部分,包含了层1和层2两部分,其中嵌入式块编码的逻辑比较复杂,是影响编码速度的瓶颈之一,使用通用处理器很难提高其效率。传统的编码方式采用软件实现,但速度和效率不高,且占用较大的存储资源;而采用硬件实现方式则会有更大的灵活性。事实上采用硬件芯片实现,不但可以提高编码的速率和效率,而且也能根据算法本身的特点,采用特定的、高效的硬件结构来实现算法的关键部分,可以较大幅度地提高编码效率。另外,随着多媒体的应用和网络应用逐步便携化,以前多数可以在PC机上处理的工作必须转移到便携产品上,这对便携产品有限的资源提出了挑战。因此有必要研究硬件编码芯片完成编码过程,本文旨在研究JPEG2000编码中的关键技术——嵌入式块编码。
1 算法分析及设计
嵌入式块编码其实是基于位平面的编码,而每个位平面又被划分为三个编码通道,即显著通道、细分通道和清除通道。编码采用固定的扫描方式,每个比特位仅在其中的一个编码通道中完成编码。编码过程可以分为两个步骤,即差别编码通道的归属和编码原 *** 作。在显著通道中,当比特位本身不显著,且周围8个近邻至少有一个是显著时被编码;在细分通道中,当比特位在上一个位平面就变显著时被编码;在清除通道,所有在上面两个通道中略过的比特位被编码。编码原 *** 作共患难个,即零值编码、符号编码、细化编码和游程编码。
根据算法要求,编码时必须用到一些编码信息。假设码块的大小是32×32的,则编码信息立即包括1024个显著信息位(表示当前系数位是否显著)、1024个细化信息位(表示当前系数位是否第一次细分)、1024个访问信息位(表示当前系统位是否在前面的编码通道中编过)。当然,除此之外,还需要有1024个符号位和幅度位,因此编码过程中需要存储的信息为5Kbit。由于FPGA片内RAM资源十分有限,因此将码块量化后的小波系数在外部RAM中(对于32×32的码块,16bit的系数,需要存储16bit),而在片内只存储5Kbit的信息。
块编码过程是以一列的4个比特位为单位进行编码,且在判别编码通道的归属和编码 *** 作时,都需要用到当前比特位的8个近邻的显著信息和符号信息。因此,事实上在编码每一列数据时,必须访问18bit的显著信息和符号信息,以及当前列的幅度位、访问信息和细分信息各4bit。对于幅度位、访问信息和细分信息,可以将每列的数据作为一个字存储,但这种存储方式对显著信息和符号信息却效率较低。如图2系数,需要存储16Kbit),而在片内只存储5Kbit的信息。
块编码过程是以一列的4个比特位为单位进行编码,且在判别编码通道的归属和编码 *** 作时,都需要用到当前比特位的8个近邻的显著信息和符号信息。因此,事实上在编码每一列数据时,必须访问18bit的显著信息和符号信息,以及当前列的幅度位、访问信息和细化信息各4bit。对于幅度位、访问信息和细分信息,可以将每列的数据作为一个字存储,但这种存储方式对显著信息和符号信息却效率较低。如图2所示,如果采用右边的方案,则对于编码带中的每一列,必须读取12bit的显著和符号信息,其中有6bit是冗余的;如果采用左边的交错存储的方案,即对于32×32的码块,在其首行之前和末行之后各添加一行,形成34×32的块,然后将每两行作为一组,并采取交错方式存储(a,b,c,b,a,b,c,…,b,c,b,a),则读取信息时不会有冗余。
显然,交错存储方案更有效,只是它需要在硬件电路上付出一些代价。首先,在预处理小波数据时,必须将符号位按照上述交错方式写入内部RAM,这比处理幅度位复杂一些。其次,在编码过程中,需要读取数据至内部6×4显著或符号寄存器,而对于奇、偶数编码带,其读入顺序也是交错的,对于前者是a、b、c,对于后者则是c、b、a;而且读取三块内存区域的地址信号也是不同步的,如表1所示,读取存储器b的地址信号始终增长,而读取存储器a和b的地址信号则符号以下规律:前者在从奇编码带过到偶编码带时地址增加,而在从偶编码带过渡到奇编码带时地址保持不变;手者正好相反。
表1 32×32码块编码过程中,处于各个编码带下读取内部缓存abc的相应地址信号
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)