JPEG2000中嵌入式块编码的FPGA设计
扫描二维码
随时随地手机看文章
随着多媒体市场的迅猛发展,百万像素的数码相机、各种功能强大的彩屏手机等数字消费产品逐渐普及。这些多媒体应用均需要处理高质量、高分辨率的大图像,这对存储介质的容量和传输信道的带宽都提出了新要求。图像压缩的国际标准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系数,需要