APP下载

基于FPGA的自适应实时视频梯形矫正系统设计与实现

2022-01-27索军红张冠茂赵汉卿

液晶与显示 2022年1期
关键词:畸变插值梯形

索军红,张冠茂,乔 鑫,赵汉卿

(兰州大学 信息科学与工程学院 光电子与电磁信息研究所,甘肃 兰州 730000)

1 引 言

图像作为承载信息的主要载体,其准确性至关重要,但在获取图像的过程中往往会受到各种因素的干扰,使最终成像发生畸变,从而影响人们对实际情况的分析与判断。图像畸变可分为非线性畸变和线性畸变。非线性畸变主要是由于相机的制作工艺不完善造成的,致使实际成像模型与理想针孔成像模型不一致。非线性畸变中真实画面与最终成像之间的映射关系虽然复杂,但对于特定相机而言,映射关系是固定的,无需在拍摄过程中实时计算,已有许多文献对其进行了较为充分的研究。线性畸变与相机的拍摄角度和运动状态有关。梯形畸变作为线性畸变的一种,其成因是在实际的拍摄场景中,受限于拍摄距离和角度,摄像机往往不能垂直于被拍摄平面,造成最终成像结果产生梯形畸变[1-9]。梯形畸变矫正通常使用软件实现,无法满足实时矫正的需求,如向芝慧小组结合两步投影法和Harris角点检测算法利用软件矫正梯形畸变,但矫正时间以数百毫秒计[10];张宇小组基于OpenCV采用连接点法矫正梯形畸变,但只有在摄像机和被拍摄平面相对位置不变的情况下才能进行实时矫正[11]。本文基于现场可编程门阵列(Field Programmable Gate Array,FPGA)提出了一种梯形矫正的新思路,采用配有XILINX artix-7XC7A100T-2FGG484I芯片的AX7103开发板为实验平台,可以实时且自适应地矫正梯形畸变。

2 梯形矫正系统的构成及其工作原理

2.1 梯形矫正系统的硬件构成

梯形矫正系统结构框图如图1所示,其主要由OV5640摄像头模块、FPGA模块、DDR3(Double Data Rate 3)存储模块、液晶显示器模块、按键模块、以及其他必要模块(电源模块、时钟模块、配置电路)组成。FPGA模块又由图像采集模块、灰度插值模块、图像预处理模块、直线检测模块、参数计算模块、DDR读写模块和DDR控制模块组成。

图1 梯形矫正系统结构框图

进行矫正时,由OV5640摄像头采集图像,FPGA模块对图像进行矫正,DDR3模块负责缓存数据,最终由显示器显示矫正后的图像。

2.2 梯形矫正系统的工作原理

该系统的基本工作原理为:图像采集模块通过IIC总线协议配置OV5640摄像头,使其按照640×480的分辨率和RGB565的格式将数据传递给FPGA芯片,最后经由图像采集模块、DDR读写模块和DDR控制模块将数据存入DDR3中。

图像预处理模块读取DDR3中缓存的原始图像后对其进行灰度转换、Sobel边缘检测、形态学开运算等处理[12],以达到滤除图像干扰信息、降低后续处理运算量的目的,便于直线检测模块进行直线检测。

直线检测模块可以提取出预处理后图像中梯形畸变的两条斜边,并将斜边参数、倾斜角度分别传递给参数计算模块和视频输出模块。

参数计算模块利用斜边参数计算出修复梯形畸变所需的映射参数,之后将其传递给灰度插值模块。

视频流时序中相邻场同步信号间除了显示区间之外还有一段非显示区间,如图2所示。本设计可以利用显示区间之后的非显示区间时间段运行直线检测模块和参数计算模块,再结合错帧矫正的方法,即用上一帧得到的映射参数矫正下一帧的画面,进而实现视频实时矫正的目的。

图2 场同步信号时序图

灰度插值模块根据矫正图像像素坐标和映射参数计算出对应原始图像中的像素坐标,取出相应坐标的灰度值并进行计算后作为矫正图像像素的灰度值,由此得到矫正图像,并将其传输给DDR读写模块缓存。通过按键可以控制选择何种灰度插值算法。

视频输出模块生成视频时序信号,在图像显示的不同区域分别读取原始图像、矫正图像数据和梯形畸变的斜边角度信息以及相关文字说明,以实现视频图像、矫正图像和畸变程度的同屏显示。

DDR读写模块用于在DDR和不同模块之间进行数据缓存,并负责突发读/写请求信号和普通读/写请求信号的转换,以充分利用DDR读写操作的高带宽。

DDR控制器模块按照固定顺序仲裁多路DDR突发读/写请求,依据仲裁结果读/写DDR3中的数据。

3 梯形畸变矫正系统关键模块的FPGA实现

3.1 直线检测模块

直线检测模块是系统中最核心的部分,用于寻找画面中梯形畸变的两个腰。本文采用的直线检测算法为Hough变换法[13],是一种计算简单、易于硬件实现的方法。Hough变换公式为:

ρ=xcosθ+ysinθ,

(1)

公式(1)可将(x,y)坐标系中的直线转换为(ρ,θ)坐标系中的一个点,将(x,y)坐标系中的点转换为(ρ,θ)坐标系中的一条曲线。利用Hough变换可将检测直线的问题转化为检测点的问题。

直线检测模块构成及其工作流程原理如图3所示。边缘图像信息由图像预处理模块输出,边缘点坐标检测模块一方面基于边缘图像信息中的视频流时序信号生成像素坐标,另一方面根据像素灰度值判断当前像素点是否为边缘点,进而决定是否激活写请求信号。FIFO缓冲器负责缓存边缘点坐标。若FIFO不为空,则数据控制模块发出单个时钟周期读请求,并在30个时钟周期内不再发出,以保证每个边缘点坐标保持30个时钟周期的输出,供后续计算使用,读地址也将在这30个时钟周期内循环加一。sinθ_cosθ_ROM中存储着60°~89°范围内步长为1°的正、余弦函数值,并依据读地址输出相应正、余弦函数值以供后续计算。ρ值计算模块1按照公式(1)计算出ρ值,ρ值计算模块2运算过程中会将公式(1)中的加法更改为减法,如此可利用三角函数的对称性在不增加存储空间的情况下将角度检测范围扩展至-89°~-60°。在一副分辨率为640×480的画面中,直线倾斜角度范围分别为60°~89°、-89°~-60°时,ρ的取值范围分别为0~800、-640~240。故可根据式(2)和式(3)分别计算投票地址。

图3 直线检测模块结构框图

addr1=addrθ×800+ρ,

(2)

addr2=addrθ×880+640+ρ,

(3)

其中,addr1为合并1模块的输出地址,addr2为合并2模块的输出地址。

独立时钟双口RAM IP核的读、写时钟相位相反,频率相同,以实现在单时钟周期内完成投票。投票记录模块时刻记录最大得票数和次大得票数以及它们所对应的(ρ,θ)值。为了避免最大得票数和次大得票数对应的是同一条直线,只有在当前得票数大于最大或次大得票数,且当前得票数对应的ρ值与最大或次大得票数对应的ρ值相差超过10个单位时,才会更新相应记录。

比较判断模块接收到4条直线的得票数,将得票数最多的两条直线信息发送出去。

3.2 参数计算模块

梯形畸变图像与矫正图像的空间变换关系如图4所示。本系统应用连接点法对像素进行重定位,连接点法相较于两步投影法,具有运算步骤少,计算简单的特点,易于硬件实现。

图4 空间变换关系

利用双线性方程对该空间变换过程建模,即:

(4)

其中:(x′,y′)为畸变图像中的像素点坐标,(x,y)为矫正图像中的像素点坐标。

公式(4)中共有k1~k8八个未知系数,需要将4对映射点坐标代入其中才能将全部系数求出。以视频画面的1/4高度和3/4高度作为梯形畸变的上下底边,其与直线检测模块得到的两条直线(梯形的两个腰)相交于4点,交点坐标分别设为(120,y1),(120,y2),(360,y3),(360,y4)。其中,y1,y2,y3,y4的计算公式为:

(5)

其中(ρ1,θ1),(ρ2,θ2)分别为直线检测模块输出的两条直线信息。

相应的,以梯形畸变中较长底边为基准构造一个矩形,矩形的4个顶点即为畸变图像中梯形顶点的映射点。其坐标分别为(120,y1),(120,y2),(360,y1),(360,y2)或(120,y3),(120,y4),(360,y3),(360,y4)。

以梯形畸变的上边是较长底边为例,将4对映射点坐标代入公式(4),得:

(6)

依据式(5)和式(6)设计的参数计算模块结构及其工作流程如图5所示。坐标计算模块实现计算式(5)所需的功能,其运行最大时钟频率低于系统时钟频率,故在该模块前后各添加一个异步FIFO,以解决信号的跨时钟域传输问题。参数求取模块完成式(6)的计算,为了节省计算资源,全程采用了浮点数形式进行计算。

图5 参数计算模块系统结构

3.3 灰度插值模块

矫正图像和畸变图像的像素点坐标并非一一对应,通过公式(4)得到的映射坐标值往往是一个小数,此时就需根据邻近像素的灰度值对该坐标点进行插值,常用的灰度插值算法有最邻近法、双线性插值法和双三次插值法。最邻近法选用距离映射坐标最近像素点的灰度值作为映射坐标的灰度值,计算最为简便,但经过插值后得到的图像灰度不连续,在图像边缘处会出现较明显的锯齿状。双线性插值法基于映射坐标4个邻像素的灰度值,在两个方向上进行线性加权后得到映射坐标的灰度值,由此得到的插值后图像灰度连续,但计算比较复杂,可能会导致图像轮廓模糊。双三次插值法利用三次多项式逼近理论上的最佳插值函数,映射坐标的灰度值由其邻近的16个像素点灰度值加权内插求得,因此所得插值后图像效果最好,但计算量也最大。

从计算复杂度、缓存资源消耗量的角度考虑,在硬件实现上放弃了双三次插值算法,为了满足不同需求,最邻近法和双线性插值法均被采用,在使用过程中通过按键进行选择。

通过公式(4)和公式(6)可知,畸变图像和矫正图像之间映射坐标对的横坐标(行数)一致,如图6所示,故可以简化相应灰度插值算法。采用最邻近法时,取距离映射点y′最近像素点y2的灰度值作为y的灰度值。设y1点处灰度值为f1,y2点处灰度值为f2,则运用双线性插值法计算y点灰度值f的公式为:

图6 简化的坐标映射关系

f=(y2-y′)×f1+(y′-y1)×f2,

(7)

灰度插值模块系统结构及其工作流程如图7所示,输入数据流分配单元、双端口RAM和输出数据流选择单元共同构成乒乓缓存结构,双端口RAM大小为640×16 bit,以缓存矫正图像当前行所对应的畸变图像像素值。坐标计算模块先通过视频时序信号生成矫正图像像素坐标,再结合矫正参数计算映射坐标,最后由映射坐标得到其邻近像素坐标和相应权值,并分别送给乒乓缓存结构和插值模块。乒乓缓存结构将邻近像素坐标作为读地址并输出相应灰度值给到插值模块。插值模块接收灰度值和权值,并基于插值算法计算出当前矫正图像像素的灰度值,插值算法的选择由按键控制。

图7 灰度插值模块系统结构

4 实验结果及分析

为了验证本文所设计梯形矫正系统的可行性及稳定性,使用Verilog语言编写系统程序,采用XILINX公司的Vivado软件为程序编译平台,对程序进行综合、布局布线,最终生成比特流文件并烧录进FPGA芯片。系统硬件结构如图8所示,OV5640摄像头直插在FPGA开发板上,HDMI_O端口连接一个1 280×760分辨率的显示器。

图8 自适应实时视频图像梯形矫正系统

开发板通电后,摄像头倾斜一定角度拍摄目标物体,实验场景如图9所示。显示器左端画面为摄像头采集的原始图像,显示器右端画面为矫正后图像,此外,画面左上角显示梯形畸变左、右两腰与画面中轴线的夹角,偏右为正值,偏左为负值,以表示梯形畸变幅度。并且当移动摄像头时,系统依然能实时显示矫正后的画面。

图9 矫正处理显示效果图

实验结果表明,基于FPGA的视频实时自适应梯形矫正系统可以实现对640×480分辨率、60 Hz刷新率的视频数据实时自适应矫正,满足日常使用需求。整个系统消耗的LUT资源占FPGA芯片总资源的25.66%,FF占用总资源的10.12%,BRAM占用总资源的20%,DSP占用总资源的9.17%,详细资源占用情况如表1所示。

表1 FPGA资源使用情况

为进一步突出本文所提出系统的实时性,将本系统与两步投影法和软件连接点法所耗时间进行比较,比较结果如表2所示。其中畸变检测时间为系统检测到畸变幅度所消耗的时间,矫正时间指系统矫正完一帧图像所需要的时间。从表2中可以看出,两步投影法和软件连接点法耗费时间至少是本文方法的21倍和300倍,在摄像头位置不断改变的情景中,不具备实时性;而本文方法的畸变检测时间和矫正时间均为1/60 s,结合错帧矫正策略即可实现对60 Hz视频的实时矫正。

表2 时间分析

5 结 论

本文根据实践的需求,针对图像获取过程中产生梯形畸变的问题,提出了一种自适应实时视频图像梯形矫正系统的硬件结构设计。利用错帧矫正的方法实现了视频的实时矫正,提高了系统的应用能力。通过乒乓缓存结构,使得在占用极小片上存储资源的情况下可以连续不断地对数据流进行处理。基于梯形畸变图像与矫正图像之间特殊的映射关系,简化了参数计算过程。利用场消隐时间完成矫正参数计算,可以有效提高畸变矫正的实时性。实验结果表明:系统可以支持对分辨率为640×480、刷新率为60 Hz的监控视频进行自适应矫正,且矫正画面和监控画面之间的延时仅为1/60 s,矫正精度为1°,基本满足监控系统梯形矫正的要求。

猜你喜欢

畸变插值梯形
梯形填数
认识梯形
滑动式Lagrange与Chebyshev插值方法对BDS精密星历内插及其精度分析
大型焊接容器局部热处理防畸变工装优化设计
梯形达人
几何特性对薄壁箱梁畸变效应的影响
基于pade逼近的重心有理混合插值新方法
混合重叠网格插值方法的改进及应用
在Lightroom中校正镜头与透视畸变
基于混合并行的Kriging插值算法研究