基于FPGA实现的Ferguson双三次曲面插值图像缩放算法
2019-09-10彭燕胡丹屏刘宇红张荣芬
彭燕 胡丹屏 刘宇红 张荣芬
摘 要:图像缩放作为图像处理中重要的一部分,具有广泛的应用领域。随着科技的发展,实际应用中对图像缩放的质量和速度的要求也随之提高。本文首先在Matlab中实现糖尿病视网膜图像的缩放实验,对比验证了Ferguson双三次曲面插值算法在图像缩放细节处理上的优异表现,然后在擅长以纳秒级速度处理并行数据的FPGA硬件平台上实现该算法,达到了良好的图像缩放效果,这有利于医疗图像处理等工程应用与实践。
关键词:图像缩放;糖尿病视网膜图像;Ferguson双三次曲面插值算法;FPGA
中图分类号:TP29
文献标识码: A
数字图像的缩放技术在航天航空、安全监控、医疗图像诊断等领域都有着广泛的应用。图像缩放的实现,需要在效率、平滑度和清晰度之间进行权衡[1],由于图像的数据量十分巨大,使得图像缩放处理消耗大量的时间[2],因此,快速和高品质图像缩放技术是非常重要的一个研究方向。
糖尿病视网膜病变(Diabetic Retinopathy)是一种具有特异性改变的眼底病变,近几年由于糖尿病视网膜患者的数量庞大,国内外都在开展以眼底照片为基础的糖尿病视网膜病变计算机辅助诊断研究[3],其中,实现对糖尿病视网膜图像的缩放,保证图像缩放后的细节表现,对保障后续病变诊断分类算法的准确度意义重大。
目前有学者将传统的插值算法如:最近邻插值算法、双线性插值算法、双三次插值算法在硬件平台上实现来开展图像缩放的工作,例如,薄振桐等人使用FPGA自带的乘法IP核,结合DDR2的缓存实现了最近邻插值算法[4],但吴以凯说明了最近邻插值算法的使用会出现明显的锯齿效应,只适应于对图像要求不高的场合[5]。王平等人利用GPU高性能并行计算优势实现了基于双线性插值的快速缩放[6]。韩忠杰等人说明了双线性插值只能保证灰度值连续,不能保证插值处导数值连续,所以在某些较高要求的场合仍不能满足要求[7]。朱艳亮为了降低计算复杂度采用分级的思想在FPGA上实现双三次插值算法,虽然达到良好的视觉效果,但是带来了一定的算法精度问题[8]。综上可知,要想达到快速和高品质的图像缩放,图像缩放的算法以及硬件平台的选择在图像缩放领域扮演着至关重要的角色。
为解决上述问题,本文以糖尿病视网膜病变图像的缩放为研究背景,提出一种采用FPGA硬件平台来实现基于Ferguson双三次曲面插值的图像缩放方法,首先,硬件实现上采用多级FIFO或RAM缓存做流水线的方式,比DDR缓存方式更为简便。其次,算法上把数字图像构造为分片双三次Ferguson插值C1曲面,整个图像缩放的过程等价于对得到的连续插值曲面进行重采样,规避了求解线性方程组所带来的计算复杂度问题,且达到插值处灰度值和导数都连续,使得细节表现清楚,能够在FPGA平台上以较好的效果实现对视频图像的实时缩放。
1 Ferguson双三次曲面插值的图像缩放算法及Matlab验证
1.1 双三次Ferguson曲面
双三次Ferguson曲面是由双三次Coons曲面演变而来,双三次Coons曲面可表示为[9]:
P(u,v)=UMBMTVT,(0≤u≤1,0≤v≤1)。(1)
(1)式中P(u,v),(0≤u≤1,0≤v≤1)为给定的双三次参数曲面,其四个角点处的几何信息定义为:位置矢量Pij=P(i,j)(i,j=0,1),沿着u方向的切矢Puij=Puu=i,v=j(i,j=0,1),沿着v方向的切矢量Pvij=Pvu=i,v=j(i,j=0,1),Puvij=2Puvu=i,v=j(i,j=0,1)为四个角点处的扭矢。其中U,V,M矩阵为:
U=u3,u2,u,1,V=v3,v2,v,1,
M=2-211-33-2-100101000。
B为角点信息矩阵,表示为:
B=P00P01Pu00Pu01P10P11Pu10Pu11Pv00Pv01Puv00Puv01Pv10Pv11Puv10Puv11。
在实际的计算过程中由于四个角点的扭矢不易确定,所以都令其值为零,即:
B=P00P01Pu00Pu01P10P11Pu10Pu11Pv00Pv0100Pv10Pv1100,
此時得到P(u,v)=UMBMTVT,(0≤u≤1,0≤v≤1)定义的曲面为Ferguson双三次曲面。
1.2 双三次Ferguson曲面插值
前面提到该曲面插值算法把数字图像构造为分片双三次Ferguson插值C1曲面,下面详细介绍插值曲面的构造过程,首先定义原数字图像为Fij,(0≤i≤M,0≤j≤N),定义插值曲面F(s,t)(0≤s≤M,0≤t≤N)是由M×N张的Ferguson双三次曲面片Fij(u,v)(0≤i≤M,0≤j≤N)组成,根据以上的推导将曲面片定义为:
Fij(u,v)=UMBijMTVT,(0≤u≤1,0≤v≤1)。(2)
其中U,V,M三个矩阵的值和上面定义的一样,角点信息矩阵B根据原图像定义为:
Bij=FijFij+1FuijFuij+1Fi+1jFi+1j+1Fui+1jFui+1j+1FvijFvij+100Fvi+1jFvi+1j+100,
则根据定义如下等式成立:
F(s,t)=Fij(u,v),(u=s-i,v=t-j),其中i≤s≤i+1,j≤t≤j+1。
对于角点信息矩阵Bij中的矩阵元素解析:将整个矩阵分解为四个2×2的矩阵,其中左上角的2×2矩阵中四个元素代表原图像的像素值,右上角的四个元素则代表四个角点处图像像素值关于参数u的变化率,左下角的四个元素则代表四个角点处图像像素值关于参数v的变化率,通俗理解为像素值在i,j两个方向上的偏导数求解。定义为式子:
Fuij=Fi+1j-Fij,(3)
Fvij=Fij+1-Fij。(4)
从上两式可以得出对于两个方向上的偏导数求解即为相邻像素间的差值。最终,在明确定义(2)式中的各个矩阵后即可完成连续的插值曲面F(s,t)构造。
在明确了连续的插值曲面F(s,t)(0≤s≤M,0≤t≤N)的构造过程后,假设欲将M×N大小的数字图像缩放到M1×N1,则可以利用参数曲面F(s,t)(0≤s≤M,0≤t≤N)插值给定的(M×N)个像素值Fij,使得:
F(i,j)=Fij,0≤i≤M,0≤j≤N,(5)
从而得到连续的图像F(s,t)(0≤s≤M,0≤t≤N),要想将原图的大小缩放为M1×N1,只需要对连续图像F(s,t)进行重采样,也就是在F(s,t)上均匀地取M1×N1个像素,再根据缩放比例(MM1,NN1)来求得新图的像素:
F(s,t)=F(iMM1,jNN1)。(6)
1.3 Ferguson双三次曲面插值算法的Matlab验证
在医疗图像预处理这一应用背景下,为验证Ferguson双三次曲面插值算法的缩放效果,本文采用糖尿病视网膜图像做图像的缩放仿真实验。为进行对比,在Matlab环境下,将分辨率为231×181的糖尿病视网膜图片分别用Ferguson双三次曲面插值算法和双线性算法进行放大2倍和缩小2倍的处理。其放大和缩小的对比效果图如图1、图2所示。
对比图1中两个标注框处的粗血管可以看出,右边双线性算法放大后的处理效果要比Ferguson双三次曲面插值算法的模糊一些。同样,在图2中也可以明显地看出,相比于双线性算法的处理效果,左侧Ferguson双三次曲面插值算法在缩小的处理上保留了更多的细节,效果更加清晰。
2 Ferguson双三次曲面插值图像缩放算法的FPGA设计与实现
Matlab仿真实验体现了基于Ferguson双三次曲面插值算法的图像缩放效果,为便于将该算法应用于视频图像处理的工程项目中,本文进一步结合FPGA硬件平台的并行计算优势,研究Ferguson双三次曲面插值算法在FPGA上的实现。
在FPGA中,数据和标志信号都是根据时钟更新的。当前端摄像头采集视频数据送入相机时序解析模块后,其输出的行列同步信号送入FPGA端计数控制单元以便后续控制RGB数据在流水缓存模块的读写。随后,把读出的数据和缩放系数送入公式计算单元求得缩放后的像素数据。最后,由相机同步信号恢复单元控制缓冲输出单元读出缩放后RGB像素,以实现缩放后视频图像的实时输出。整个缩放算法的总体实现流程如图3所示。
本项目的硬件采用Xilinx旗下低成本、低功耗的Spartan-6系列的FPGA,其硬件描述语言为Verilog HDL。在图3中,整个算法的实现核心有两个:流水线缓存单元和公式计算单元。流水线缓存单元的设计目的是使之并行输出三行数据。当公式计算单元接收流水线缓存单元并行输出的数据后,执行Ferguson双三次曲面插值算法,完成缩放像素的计算。
首先,要想求解缩放后的像素数据,需要Iij,Iij+1,Iij+2,Ii+1j,Ii+1j+1,Ii+1j+2,Ii+2j,Ii+2j+1共8个像素,而这8个像素分别在当前行,当前行的下一行,以及当前行的下两行,即需要流水线缓存三行数据。因此,在流水线缓存单元中调用3个FIFO/RAM缓存模块以便d1,d2,d3的并行输出。
在FPGA中,流水线缓存一般有两种方式:调用FIFO做缓存,或调用RAM做缓存。对于本文的
放大算法,我们采取RAM流水线,对于缩小算法,则采用FIFO流水线。但不管是哪种方式,流水线的设计都是一样的。具体流水线设计流程如图4所示。
由图4可知,当ROW_1即图像输入的第一行来临时,把它写入Cache_1,此时Cache_1中存储ROW_1。当ROW_2即图像第二行来临时,从Cache_1中读出ROW_1写入Cache_2,然后把ROW_2写入Cache_1,此时Cache_1中缓存ROW_2,Cache_2中缓存ROW_1。当ROW_3即图像第三行来临时,从Cache_2中读出ROW_1写入Cache_3,从Cache_1中读出ROW_2写入Cache_2,把ROW_3写入Cache_1,此时,Cache_1中存储ROW_3,Cache_2存储ROW_2,Cache_3中存储ROW_1。如此同一时钟下可以连续读取三行图像数据。
3 仿真实验及结果分析
3.1 缩放仿真实验
在整体算法验证实验中,FPGA的时钟晶振采用100 M,即时钟周期为10 ns。实验主要将原始分辨率1024×768的图像,放大至分辨率为1600×1200的图像,缩小至分辨率为640×480的图像。
对于放大算法而言,缩放系数必然大于1,根据公式(6)可知,随着i的增加,原图的同一行数据有可能需要读取两次,故需要RAM这种有地址并且可以重复读取数据的缓存来实现。且为了满足实时输出,需要输出的時钟大于输入,其中,放大算法仿真波形如图5所示。
图5中,前两条波形代表输入原始图像数据有效信号,数据信号和输入行计数信号,最后两条波形代表放大后数据有效信号,放大后数据信号以及输出的行计数信号。其中,从输出波形可以看出公式计算单元输出的放大后像素时序不满足显示时序,输出信号的间隔明显不一致,需要送入RAM缓存输出单元,由相机同步信号恢复单元控制读出。
对于缩小算法来说,缩放系数必然小于1,因此读写时钟相同即可,并不影响实时显示。同时也不存在原图同一行数据需要读取两次的问题,反而需要跳行读取,那么FIFO流水线就可以满足设计需求,缩小算法仿真波形如图6所示。
图6中,前两条波形代表输入原始图像数据有效信号,数据信号和输入行计数信号,后两条波形代表缩小后的数据有效信号,缩小后的数据信号以及输出的行计数信号。其中,输出的行间隔比输入的大,这里可调用异步FIFO做缓存输出单元,设置读时钟慢于写时钟,并通过相机同步信号恢复单元做读控制,以此调整输出时序,便于显示。
另外,在实验中,由于相机的行列消隐对延迟有影响,不同相机具有不同的行列消隐,因此,本文只根据仿真结果对延迟做大约估算。由仿真可知,缩小延迟大约为51200 ns,放大延迟为30720 ns。
3.2 不同平台下图像缩放的延时对比实验
为了作对比,分别在GPU及个人PC上对原始分辨率为1024×768的图像做同样的缩放实验,其中GPU内存为64 GB,在Linux开发环境下采用Python语言实现。各平台缩放实验的延时时间对比如表1所示。
从表1可得,相较PC及GPU的延迟时间而言,FPGA的实现加快了处理的实时性,使得在FPGA平台上可以以较好的效果实现对图像的缩放。
4 结语
针对糖尿病视网膜图像,探索了Ferguson双三次曲面插值算法在图像缩放中的应用,通过Matlab对比验证Ferguson双三次曲面插值图像缩放算法在细节处理的效果后,研究了该算法在FPGA硬件平台上实现,得到了较好的图像缩放效果。实验表明图像缩小延迟大约为51200 ns,放大延迟为30720 ns,达到了对图像缩放的质量和速度的要求。
参考文献:
[1]Sekar K, Duraisamy V, Remimol A M. An approach of image scaling using DWT and bicubic interpolation[C]// International Conference on Green Computing Communication & Electrical Engineering. IEEE,India, 2014:1-5.
[2]Di C, Tian X, Yiying S. Image scaling algorithm based on GPU parallel processing[C]// 2013 2nd International Symposium on Instrumentation & Measurement, Sensor Network and Automation (IMSNA). IEEE,Canada, 2013:1044-1049.
[3]许莉莉,梁歌,杨智.糖尿病视网膜病变筛查中的眼底图像质量控制[J].北京生物医学工程,2019(2):166-170.
[4]薄振桐. 基于FPGA和DDR2的图像缩放系统设计与实现[D].西安:西安电子科技大学,2014.
[5]吴以凯. 基于FPGA的视频缩放的设计与实现[D].镇江:江苏大学,2017.
[6]王平,全吉成,赵柏宇.基于双线性插值的图像缩放在GPU上的实现[J].微电子学与计算机,2016,33(11):129-132.
[7]韩忠杰,饶道娟,穆国旺.基于Ferguson曲面插值的图像缩放方法[J].河北工业大学学报,2006(1):49-53.
[8]朱艷亮. 实时视频缩放算法研究及FPGA实现[D].长沙:中南大学,2009.
[9]韩萍,苏志勋,刘秀平.带参数Coons插值曲面的图像插值方法[J].计算机辅助设计与图形学学报,2005(5):976-980.
(责任编辑:曾 晶)
Implementation of Ferguson Bicubic Surface Interpolation
Image Scaling Algorithm Based on FPGA
PENG Yan1, HU Danping2, LIU Yuhong1, ZHANG Rongfen1*
(1.College of Big Data and Information Engineering, Guizhou University, Guiyang 550025, China;
2.Beijing Dongfang Dewei System Technology Co. Ltd., Beijing 100081, China)
Abstract:
As an important part of image processing, image scaling has a wide range of applications. With the development of technology, the requirements for the quality and speed of image scaling have also increased in practical applications. The scaling experiment of diabetic retinal image in MATLAB was reakuzed, and the superior performance of Ferguson bicubic surface interpolation algorithm in the detail processing of image scaling was verified. And then, the algorithm was implemented on the hardware platform FPGA which is good at processing data in nanosecond speed, achieving good image scaling, which is beneficial to engineering applications and practices such as medical image processing.
Key words:
image scaling; diabetic retinal image; Ferguson bicubic surface interpolation algorithm; FPGA