基于fpga的图像超分辨率的实现方法

文档序号:8943698阅读:940来源:国知局
基于fpga的图像超分辨率的实现方法
【技术领域】
[0001] 本发明涉及一种图像超分辨率的实现方法,具体涉及一种基于FPGA的图像超分 辨率的实现方法。
【背景技术】
[0002] 通常的图像显示设备具有固定的分辨率,低分辨率的图像数据需要进行超分辨率 处理,获得与显示设备相匹配的分辨率才能正常显示(如HDTV, High-Definition TV),这 一过程本质上就是一种图像超分辨处理。
[0003] 图像超分辨率技术在各个领域中得到广泛应用,如公共安全、医学成像、军事、地 质、工业及消费电子等产业。通过该技术尽可能提高图像的分辨率,达到更好的图像识别能 力和识别精度。
[0004] 随着图像数据量的增大,对图像处理速度提出了更高的要求,利用硬件实现图像 处理已经逐渐成为图形处理研究的重要课题。
[0005] FPGA由于强悍的数据处理能力得到广泛关注,其对数据采用并行流水式处理方 式,加快数据处理速度。用一般软件对图像实时处理小于等于一帧每秒,FPGA硬件化处理 能够实时达到25~30帧每秒。因而图像处理的FPGA硬件化值得研究。
[0006] FPGA实现图像处理算法需要在算法性能和资源使用量之间寻求平衡。传统的线性 插值算法包括最近邻插值、双线性插值、四点双三次插值以及六点双三次插值,其中最近邻 插值的超分辨图像效果不理想,高次插值方法复杂度高不便于硬件实现。

【发明内容】

[0007] 本发明的目的是提供一种基于FPGA的图像超分辨率的实现方法,基于FPGA的图 像超分辨率双线性插值实现方式,提出了基于单输入双输出端口 RAM缓冲的二级循环调度 机制,用以实现共享资源分配和并行流水处理。
[0008] 本发明提供了如下的技术方案:
[0009] -种基于FPGA的图像超分辨率的实现方法,循环控制模块控制RAM模块的循环调 度实现数据写入;
[0010] RAM模块读取数据时,采用单输入双输出端口的RAM,定义所述单输入双输出端口 的RAM的深度为源图像一行的像素点数,宽度为像素数据宽度,实现源数据相邻两行像素 的存储;
[0011]由位置分析模块得到的权值是归一化的小数,将权值映射到整数范围内运算。
[0012] 优选的,所述单输入双输出端口的RAM在双线性插值硬件结构图中定义了四个单 输入双输出端口的RAM0-3,其中RAM0、RAM1加权运算对应目标图像的插值像素值时,RAM2、 RAM3写入目标图像下一行运算所需的源图像的像素值;RAM0、RAM1运算结束后,RAM2、RAM3 进行加权运算,RAMO、RAMl开始写入源图像像素值,在时间上实现数据连续运算输出,空间 上实现RAM空间的并行复用,提高运算效率。
[0013] 进一步的,循环控制模块控制四个RAM模块的循环调度实现数据写入,分别为 RAMO、RAMl 和 RAM2、RAM3 之间以及 RAM0RAM1 之间、RAM2RAM3 之间;RAMO、RAMl 和 RAM2、 RAM3之间在运算目标图像像素值和写入源图像像素值功能间循环切换;RAM0RAM1之间、 RAM2RAM3之间实现源图像像素值循环写入。这样的结构设计充分利用了 FPGA并行流水复 用的特征,既保证了数据带宽的充分利用,又节省了 FPGA的空间资源。
[0014] 进一步的,整个运算过程中,权值基于浮点数运算得到,将浮点数整数化,即可将 运算都整数化;浮点数的整数化是将对应的浮点数左移相应的位数,在乘法运算结束后右 移相应的位数。
[0015] 本发明的有益效果是:本发明基于FPGA的图像超分辨率双线性插值实现方式,提 出了基于单输入双输出端口 RAM缓冲的二级循环调度机制,用以实现共享资源分配和并行 流水处理。提高了图像处理速率,实现了超分辨率。
【附图说明】
[0016] 附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实 施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
[0017] 图1是双线性插值硬件结构图;
[0018] 图2是RAM循环调度机制图;
[0019] 图3 FPGA资源占用图;
[0020]图4算法模块建立保持时间图;
[0021] 图5是插值前的Lena图,源图像的分辨率为512x512 ;
[0022] 图6是插值后的Lena图,插值后分辨率为1024x1024 ;
[0023] 图7是插值前Lena图的直方图;
[0024] 图8是插值后Lena图的直方图。
【具体实施方式】
[0025] FPGA具有两个对立的性能:(1)具有并彳丁处理和流水线技术,能够达到尚性能的 处理,但M倍的性能要耗费M倍逻辑;(2)具有复用技术,能够减少逻辑,但控制复杂度上 升。基于FPGA的功能特性,本发明提出基于单输入双输出端口 RAM缓冲的二级循环调度机 制实现共享资源分配和并行流水处理。同时Xilinx的FPGA基于LUT结构,可以实现浮点 运算以及乘法运算,但会造成资源的严重浪费。本文将所有浮点数都整数化,在整数领域进 行数据运算。
[0026] 双线性插值通过四点确定一个平面,是个过约束问题,所以在一个矩形栅格上的 一阶插值需要用到双线性函数。令f(x,y)为两个变量的函数,定义为四点形成的正方形内 的任意值,令双线性方程
[0027] f (x, y) = ax+by+cxy+d (I)
[0028] 定义一个双曲抛物面与已知点拟合。
[0029] 图像双线性插值算法的实现经过采样、水平和垂直线性插值三步骤来完成。设Xs、 \分别为源图像在X、Y上的尺寸,X d、Yd分别为目标图像在X、Y上的尺寸,定义两者的缩放 因子S,则水平方向、垂直方向的缩放因子分别为
[0030] Sx=XsAd (2)
[0031] Sy=YsAd (3)
[0032] 定义源图像水平方向采样的像素点位置集合
[0033]
(4)
[0034] 定义目标图像水平方向采样的像素点位置集合
[0035]
(5)
[0036] 定义两者图像像素点之间的映射关系为则根据公式(2)可得
[0037]
⑷)
[0038] 由此可得目标图像水平方向第XJi)点位置映射到原图像的像素点位置为
[0039] R(Xd(i)) = Xd (i) XSx (7)
[0040] 得到的R(xd(i))是实数,该目标图像水平方向第XJi)点像素插值在 源图像[R(XJi))]和([R(X dW)]+l)之间,同时(R(XJi)MR(XdW)])和 ([R(Xd(i))]+l-R(X d(i)))对应于目标图像第Xd(i)点与源图像第[R(Xd(i))]点和第 ([R(X d(i))]+l)点之间相对距离的归一化值。
[0041] 令 F (Xd ⑴)=R (Xd ⑴)-[R (Xd ⑴)] (8)
[0042] 令目标图像像素值为Vd,源图像像素值为Vs,则
[0043] Vd (Xd (i)) = Vs ([R (Xd (i)) ]) X F (Xd (i)) +
[0044] Vs ([R (Xd (i)) ] +1) X (1-F (Xd ⑴)) (9)
[0045] 同理在垂直方向的插值为
[0046] Vd(Xd(i), Yd(j)) = Vs(Xd(i), R[Yd(j)]) XG(Yd(j))
[0047] +Vs([Xji),R(Yd(j)
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1