小波分析理论以其良好的时频区域性和多分辨率分析能力,开辟了图像处理的崭新领域。小波变换是一种很好的图像分解方法,非常适合于分析突变信号而用于静止图像边缘的提取和压缩。高阶小波变化还可以用于实时处理视频图像信号,在减少编码时间、提高压缩比和降低失真度方面,都有很好的效果。因此,小波变换在图像处理中具有十分优越的性能。
国际标准化组织和国际电子技术联盟联合推出的新一代静止图像压缩标准JPEG2000采用了基于提升算法的离散小波变换。JPEG2000标准中用到了两种方式来提升小波:一种是可逆的整数型5/3小波变换,主要用于实现无损图像压缩,也可用于有损图像压缩;另一种是浮点型9/7小波变换,用于高质量的有损图像压缩。其中整数5/3小波变换在很多领域有着重要应用,如医学图像、卫星传输图像等。本文将实现基于FPGA的图像二维5/3提升小波变换,采用FPGA芯片实现计算量十分复杂的二维提升小波变换,可以大大提高图像压缩运算速度,保证系统的实时性要求。
1 5/3提升小波变换算法原理
小波提升算法的基本思想是通过基本小波(lazy wavelet)逐步构建出一个具有更加良好性质的新小波,它的实现步骤有三个:分裂(split)、预测(predict)和更新(update)。分裂是将输入数据分为偶数序列和奇数序列二个部分;预测是用分裂的偶数序列预测奇数序列,得到的预测误差为变换的高频分量;更新是由预测误差来更新偶数序列,得到变换的低频分量。典型的单步小波提升结构如图1所示。
在JPEG2000中,5/3提升小波变换的算法为:
相应的原理框图如图2所示。
[next]
2 对5/3提升小波变换硬件实现特点的分析
在提升算法的实现中,它的系数分布存在的特点,可以简化设计的实现。
(1)对输入数据的处理,只牵涉到了两两相邻的数据(圆圈中的数字表示执行的时钟序号),数据相关性图如图3所示。对图像数据进行行/列变换时,只需要得到该数据以及同一行(列)的相邻两个数据,就可以进行当前数据的行/列变换,而与其他数据无关,其本质是将奇序列数据与偶序列数据顺次逐一输入。因此,对数据输入部分的处理可以通过构建两个地址生成模块,实现对奇偶地址数据的读取。
(2)提升算法具有原位计算的特点,因此计算的系数可以直接替代原始数据而不需要附加数据存储空间。对于它的行、列变换都可以只使用同一个存储器RAM进行原始数据、中间数据和变换后数据的存储。由图4可以清楚地看到,二维提升小波变换后的系数在存储空间的分布情况。原位存储的特点大大地节省了片上资源,最有效地提高了系统利用率。
(3)行方向与列方向的提升小波变换是一样的,因此可以将一维提升小波变换设计成一个独立的模块,之后对它进行反复调用。这也是简化系统的有效途径之一。
3 图像的二维提升小波变换的总体设计
一维小波变换是二维小波变换的前提,对于它的FPGA实现,由图2可以看出,5/3提升小波变换中主要计算是加、减运算,而除法运算是除以2和除以4,这在硬件实现中可通过“右移”操作实现快速运算。因此在设计中只需将图2中的乘法器模块用相应的移位操作模块代替。而图2中乘以-1/2模块被替代为右移1位模块之后,便少了一个负号,因此再将此乘法器后面的加法器模块改为减法器,同样达到了乘以-1/2的效果。这样的改进还简化了负数在硬件电路中的运算。改进后的硬件实现框图如图5所示。
二维小波变换的硬件原理结构如图6所示,其工作原理如下:采用RAM1功能模块来实现图像数据的存储;通过地址生成模块来实现对存储器中奇偶地址数据的分裂操作,先进行行方向的奇偶序列地址分裂,并做一维小波变换;行方向的操作一结束,立即进行列方向的奇偶序列地址分裂,并做一维小波变换。以上两步反复进行,便可完成图像的多级二维小波变换,最终的小波变换系数将被存储在RAM2中。
4 二维5/3提升小波变换的FPGA实现
4.1 主要功能模块的设计
(1)RAM模块。要实现对同一个数据块的双输出,以便进行一维提升小波变换,因此选择了具备双端口功能的宏模块,用来存储行小波变换系数和存储列小波变换系数,这样的结构能更加清晰地反映算法的实现流程,能够实现算法中对奇偶地址数据的同时读取。
(2)行方向奇地址发生模块和行方向偶地址发生模块。行方向奇地址发生模块实现功能是在每个时钟周期内,依次输出如图7所示的白色圆圈所示存储器行方向奇数单元的地址,这实际上是一个计数功能。行方向偶地址发生模块实现的功能与行方向奇地址发生模块类似,不同的是在每个时钟周期内按行输出图7所示的灰色圆圈的序号。
(3)列方向奇地址发生模块和列方向偶地址发生模块。在计数结束时,列方向奇地址发生模块在每个时钟周期内依次输出如图8所示的白色圆圈所示的存储器列方向奇数单元的地址。列方向偶地址发生模块实现的功能与列方向奇地址发生模块类似,不同的是在每个时钟周期内按列输出图8所示的灰色圆圈的序号。
[next]
4.2 系统实现
系统顶层原理如图9所示(图中略去了时钟信号控制线)。在系统结构中添加delay延时寄存器,从调整系统的时序;RAM1、RAM2是没有被放入初始化文件的两个相同的存储器;sel1、sel2、sel3是三类相似功能的数据选择器,完成整个结构的基本控制功能。sel1实现的功能是当行变换结束后,切换RAM1的地址输入为列方向地址;sel2实现的功能是当行变换结束后,将“小波变换”模块的输入数据从行变换地址寻址得到的数据切换到列变换地址寻址得到的数据;sel3实现的功能是通过行变换标志信号和列变换标志信号来实现对RAM2的读写控制,当系统进行列变换时,RAM2模块写无效;当系统进行列变换时,RAM2模块写有效;当列变换完成时,RAM2模块再次写无效,此时RAM2中已经写入数据。
系统工作过程如下:首先是行方向一维小波变换:图像的灰度值数据预存在“Video RAM”模块中,时钟信号一来,便立即启动水平奇地址模块和水平偶地址模块,开始奇偶地址分裂,进行行方向的一维小波变换,同时将行变换的数据存到RAM1中。其次再进行行、列变换切换时控制:当一次行方向地址奇偶分裂一结束,水平奇地址模块和水平偶地址模块将发出一个结束的标志信号,它将启动sel1、sel2、sel3开始工作。最后再进行列变换的过程,RAM2中存储列变换的结果数据。此时即完成了图像二维提升小波变换。
采用QuartusⅡ软件对系统进行了综合、仿真,系统在FPGA芯片中(EP2C70F672C6)实现,结果显示系统耗时为163.85μs。完全能够保证图像压缩系统的实时性要求,它的值正是二维小波系数。
本文分析了提升算法的系数分布存在的特点,提出了5/3二维提升小波变换硬件实现的简化方案,并在FPGA芯片中实现了对图像的5/3二维提升小波变换。采用FPGA芯片实现计算量十分复杂的二维提升小波变换,可以大大提高图像压缩的运算速度,保证系统的实时性要求。本方法在很多领域的图像处理中有着广阔的应用前景。