基于双立方插值算法的图像缩放硬件设计
2013-04-29邵欣欣刘卫东
邵欣欣 刘卫东
摘要:该文首先介绍了三种图像缩放时常见的插值算法,并对它们进行比较分析,最终确定了该文是基于双立方插值(也叫双三次插值)技术的实现,接着在此基础上设计了一种应用于视频图像缩放的算法,最后在硬件方面实现了相对应的图像缩放的硬件设计并对它进行了功能仿真。该文的亮点在于视频图像缩放的双立方插值算法的设计,以及在硬件实现上为节省硬件资源所做的设计。
关键词:双立方插值;图像缩放;算法;视频图像
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2013)07-1638-04
随着信息技术时代的到来,数字图像处理技术越来越成熟。而其中的图像缩放技术更是被广泛运用在如视频监控、高清电视、医学成像等众多领域。实际应用场合常常会出现原始输入图像分辨率与目标显示设备分辨率不同的情况,这时就需要使用图像缩放技术。而插值是在图像缩放技术中最常用的一种方法。
1 常用的图像缩放技术
图像的插值过程就是根据已知的观测点像素值建立起一个简单、连续的解析模型,以便能够让该模型预知或者推测物理量在非观测点处的特性。在实际中我们最广泛采用的插值方法有最邻近插值、双线性插值、双立方插值。
1.1 最邻近插值
这是一种最简单的插值方法,原理就是令待插入点像素等于最靠近的临近点的像素值。
1.2 双线性插值
这种方法主要利用映射点在输入图像的4个邻点的灰度值对映射点进行插值,即待插点处的数值用离待插点最近的四个点的值加权求得。双线性插值的原理图如下:
经计算得到插值公式(2):
1.3 双三次方插值1
双三次方差值(又称立方卷积插值),该方法是通过计算与待插值的像素点相邻近的16个像素点的像素值,从而得到待插值的像素值。这种方法需要以插值基函数为基础进行运算,常用的插值基函数如下图所示:
2.1 视频图像缩放处理流程
目前计算机与电视机彩色显示器显示彩色都是采用R、G、B相加混色的原理。因此我们在处理视频图像缩放之前,首先将用摄像机或者其他设备摄得的彩色视频图像信号经过分色、分别放大校正后得到RGB图像2,然后再进行如图4的分析。
图4是视频图像信号经过摄像摄得的并经过相关处理之后的算法流程3,因为RGB颜色空间适合于显示系统,却并不适合于图像处理,所以通过(1)中RGBtoYUV模块将RGB信号转换成YUV信号,YUV是被欧洲电视系统所采用的一种颜色编码方法,Y表示明亮度(Luminance),也就是灰阶值;U、V表示的则是色度(Chrominance),描述影像色彩及饱和度。其中YUV与RGB信号转换的如公式(4)所示:
2.2 双立方插值算法
在这里我们设计一种基于双立方插值的算法并且能够运用在视频图像缩放中,具体的流程图如下:
如图5所示,其中(i , j)代表目标像素,i代表行数,j代表列数,设置他们的初始值为0,它在源图像中的邻近像素坐标为(x,y)。从RGBtoYUV模块传送的源图像数据,得到宽w和高h,然后第一步根据宽和高的缩放比例的倒数Sx、Sy得到目标图像的宽wd=w/Sx、高hd=h/Sy。
首先因为设置了初始值,i的值小于宽度hd,对横向进行一次缩放,j加1,如此循环一直到j不满足条件,即j>=宽度wd;此时,i的值开始加1,当i<高度hd时,进行纵向的缩放,如此循环到i不满足条件,即i的值等于hd时,此时说明已经达到理想的缩放结果,直接输出缩放出的目标图像。
在横向和纵向的缩放过程中会计算出相对应的横向和纵向偏移量fu和fv,以及该行所在内存首地址:原始起始地址+(int)(i*Sy)*(一行数据的宽度),各行横向四点的地址为:各行起始地址+(int)(i*Sy)*(一个像素的字节数)。这样我们就求出了待插值的位置。我们设置一个缓存空间来存储相邻16个像素相对于源像素的横向和纵向的偏移量。在求横纵向偏移量的时候,我们要注意最后一行和最后一列的处理。
根据[sinC]基函数并经过计算求得双立方插值的插值系数(权重)为公式(5):
[1.06.0×x+23-4.0×x+13+6.0×x3-4.0×(x-1)3] (5)
公式(2-2)中x为插值点据各抽头点的距离(注意 :距离有正负之别,左边为负、右边为正)。在进行横向缩放的时候,在横向上进行四个抽头与对应系数的乘累加,当横向缩放完成后,再将纵向抽头及其系数进行乘累加。
最后将经过处理的值输出并结束。
3 算法的硬件实现
本文设计主要从两方面来节省硬件资源:第一,采用从水平和垂直方向这两个方向进行缩放功能设计的思路,每个单元输出的插值点只和输入的四个点有关系,这样以来,双立方插值算法得以实现,并且节约了硬件上的资源。第二,我们在对图像进行操作时,有时会出现成比例缩放的特殊情况,比如长和宽都缩小为原来的一半,或者都放大一倍的操作,因此在这里我们设计两个模块,当遇到这种情况时,直接对它们整体进行缩放,而不用再在水平和垂直方向分别进行两次缩放,这样做的好处是可以减少运行时间,提高整体处理的效率。
此缩放模块由ramA和ramB组成的乒乓ram、RGBtoYUV444模块、Fifo缓存器和YUV444toYUV422四个模块组成4。
模块的工作过程5:图像数据存放在乒乓ram中,能够更有效地占用总线,RGBtoYUV444模块从ram中读出数据,将RGB信号转换成YUV信号,并将YUV信号存放在Fifo缓存器中,当Fifo缓存器存满一行数据的时候把使能信号拉高,通知YUV444toYUV422模块可以进行图像数据的缩放处理的工作了,此时YUV444toYUV422模块从Fifo缓存器中读出数据,进行缩放大小的判断,若为特殊的成倍数的缩放,则可以在特定的模块进行缩放,然后直接输出图像数据;否则,首先进行水平方向的缩放。然后根据行地址判断当前是否在纵向上已经有所需抽头数行的数据缓存在缓存器中。如果不满足,则读行地址,继续对水平方向进行缩放,否则读列地址对垂直方向进行缩放。最后输出YUV像素数据和有效信号给下一级模块。图中,缓存器起到一定缓存像素数据的作用。
4 仿真
图像缩放模块的功能验证主要是通过仿真工具Modelsim软件进行仿真6。下图为将720*480的图像放大到1920*1080的图像的仿真图。
图7中(a)为经仿真之后的输入模块像素的仿真图,(b)为输出模块的像素的仿真图。我们可以简单分析:i_data/o_data分别为输入/输出的图像像素,从仿真图中可以看出,结果符合我们欲将图像放大的要求。
5 结束语
经过验证,整个算法的设计和硬件实现都可以满足初步构想,可以较清晰利的在视频图像处理中显示图像,并解决了硬件上资源消耗严重的问题。
参考文献:
[1] 王会鹏,周利莉,张杰.一种基于区域的双三次图像插值算法[J].计算机工程,2010,11:33-34.
[2] 王新红.数字视频图像处理与通信[M].北京:机械工业与出版社,2009.
[3] 赵兴鹏.视频图像2D转3D算法研究及硬件实现[D].青岛:中国海洋大学,2012.
[4] 屈有山,李英才.小波双三次插值搜索算法提高遥感图像分辨力[J].光电工程,2004,31(8):65-68.
[5] 邹雪城,向祖权.基于双三次插值算法的图像缩放引擎的设计[J].微电子学与计算机,2007,1(24).
[6] 夏宇闻.verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2006.