Vivado HLS的图像传感器FPN噪声去除算法设计

描述

0引言  

随着科技的发展,图像传感器逐步在各行各业广泛应用[1]。受限于半导体工艺,CMOS图像传感器的输出一般都带有噪声,噪声的表现形式也多种多样[2]。其中,FPN噪声对图像传感器输出的图像质量影响很大,表现为明暗不均匀的条带噪声。同时,为了满足图像传感器的实时摄像要求,算法的处理延时要低[3]。基于以上原因,本设计提出一种适用于图像传感器的 FPN 噪声去除算法,并在XilinxZynq平台的 PL 端(FPGA)进行设计与加速实现,利用硬件并行化思想改进传统的算法处理模式[4]。

目前,国内外对于条带噪声的去除算法分为以下3类:第一类是基于数字滤波的条带噪声去除算法,以小波变换和傅里叶变换法为代表;第二类是基于统计匹配的方法,以矩匹配算法和直方图匹配算法为代表;第三类是基于变分正则化的方法。这些方法各有优缺点,且都针对单帧特定类型的图像效果较好。本设计的核心思想是基于统计匹配方法中的矩匹配算法并对其进行改进,使其应用于图像传感器的条带噪声去除,而不是单帧特定类型图像的条带噪声去除。它基于传感器的辐射分布特性,通过对比不同地物的统计特征来进行分类。矩匹配法的基本假设是每个地物在不同图像传感器的探测下具有独特的辐射分布特征。该方法通过计算每个地物类别在传感器观测下的统计特征(如均值和方差),然后与已知的地物类 别的统计特征进行比较。Gadallah等人提出了矩匹配法,该方法对于条带噪声的去除效果较好,但在地物复杂的图像中会产生“带状效应”[5]。刘正军等人提出了改进的矩匹配方法,加入了傅里叶变换法等步骤[6]。Sun等人运用了光谱矩匹配法,结合遥感图像的光谱相关特性,在谱域实施矩匹配来去条带[7]。郑逢斌等人加入了平滑滤波来改进矩匹配方法。胡宝鹏等人提出了变分法和 矩匹配相结合的条带去除方法,先利用矩匹配方法去除条带,然后定位残余条带噪声,最后再运用变分法去除剩余条带[9]。苏俊杰等人提出了使用空间邻域加权方法的改进矩匹配法,针对特定高光谱影像噪声特点,对影像实现相对辐射校正[10]。

矩匹配法也有一些限制,如对传感器观测下的辐射分布假设较为严格,以及对统计特征的计算和比较可能受到噪声和数据不完整性的影响,所以使得去除条带噪声后的图像的地物光谱信息的分布具有一定的畸变,产生“带状效应”。本设计中,系统上电后让图像传感器采集随机的300帧图像正是为了克服这一缺点,让该传感器的条带噪声更加准确地被分离出来,以免产生“带状效应”。

1算法流程  

矩匹配法在处理图像时要求行均值和行方差接近,因此其去条带噪声效果较好。然而,当处理复杂地物导致子图像的行均值和行方差的差异较大时,该方法可能出现“带状效应”,即图像在行或列方向上出现明暗度不连续的现象,与实际地物自然分布特征不符。这种现象的根本原因在于经过矩匹配算法后,图像中所有行或列的均值相等,导致光谱信息失真。本设计的算法基于矩匹配统计的思想。首先让图像传感器采集随机场景的300 帧图像,目的是不同场景的样本越多,分离出的条带噪声结果越准确。本设计中选用的 OV6946表现出的 FPN 噪声为列条带噪声,采集好随机场景的300 帧图像后,首先,求出这 300帧图像的列像素均值,如式(1)所示:

图像传感器

式中,x代表单帧图像的第x列,y代表300 帧图像的第y行,j为单帧图像的行数乘300。如本设计中所用的OV6946图像传感器,输出参数为400×400@30f/s,在式 (1)中,x的范围为1~400,y的范围为1~120000,j的值为120000。接着,求出这300帧图像的所有像素平均值,如式(2)所示:

图像传感器

式中,x、y与j的意义同式(1),i为单帧图像的列数,如本设计中所用的 OV6946 图像传感器,输出参数为 400×400@30f/s,i的值为400。最后,求每列的校正值,如式(3)所示:

图像传感器

式中,x为单帧图像的第 x列,也就是每列内的像素值共用一个校正值,该列内的像素值减去这个校正值后,即为去除条带噪声的结果,如式(4)所示:

图像传感器

若k(x)小于0,则取为0。至此,完成了条带噪声的分离,对于该图像传感器,采集图像的像素值按列减去当前列号的校正值即可。

2硬件平台  

算法最终运行的载体为 Zynq7020 平台,Zynq 是由 Xilinx公司开发的可编程片上系统平台。它结合了处理系统 PS 和可编程逻辑 PL,采用了 ARM 处理器与 FPGA的组合架构。这两部分相互联系但可以独立使用[11]。

摄像头型号为OV6946。OV6946是OmniVision Technologies公司推出的一款超小型CMOS 图像传感器芯片,尺寸为0.65 mm×0.65 mm×1.158 mm。OV6946采用 CMOS图像传感器技术,具有低功耗、高灵敏度和高动态范围等优点。但是由于受半导体工艺的限制,最后的成像效果可能带有不同程度的条带噪声,需要视情况进行去除。

3基于 Vivado HLS 的设计与加速  

本文的算法设计与加速是通过 Vivado HLS 开发完成的。Vivado HLS(High Level Synthesis)是 Xilinx 公司提供的一款高级综合工具。它允许开发人员使用 C、C++或SystemC等高级语言描述硬件功能,并将其自动转换为可综合的硬件描述语言。利用 Vivado HLS可以缩短 1/3的 RTL仿真时间,使算法验证速度提高10倍以上[12]。

在本设计中,OV6946图像传感器输出的原始数据经过预处理后输出 RGB888 格式的图像数据。在算法处理之前,首先要对 RGB888进行通道分离,然后分别对 R、G、B通道进行校正,接着再通道合并,最后进行输出。算法总体设计架构如图1所示。

图像传感器

图1 算法总体设计架构

在使用 Vivado HLS 编写IP之前,先把 OV6946 的 RGB888 数据转换为 AXI4 Stream 协议的数据流,然后再使用 VivadoHLS编写输入/输出接口都为 AXI4 Stream 的算法IP核。在 VivadoHLS中,首先使用 AXIvideo2Mat函数把传入 IP 的 AXI4 Stream 转换为 Mat,以便在 VivadoHLS中使用 OpenCV 进行图像处理[13]。经算法处理后,再使用 Mat2AXIvideo 函数实现 Mat到 AXI4 Stream 的转换。

3.1 仿真与综合

VivadoHLS除了将高效的编程代码转换为IP 以外,还提供了另一项重要功能:C 语言仿真和 C/RTL 协同仿真[14]。在对 VivadoHLS 设计的IP 工程进行综合之前,可以进行功能性仿真来验证C 代码的逻辑正确性和效果是否符合预期[15]。为此,需要编写激励文件。

本设计的激励文件编写思路如下:首先,使用cvLoad- Image函数从本地加载待仿真处理的原始图像,分辨率调整为400×400,与实际硬件平台的图像传感器的分辨率相匹配。接下来,使用IplImage2AXIvideo函数将原始图像转换为 AXI4 Stream 协议的数据格式。在处理完成后,使用 AXIvideo2IplImage将数据重新转换为图像格式。最后,使用 cvShowImage 函数将图像显示出来,继续进行 C/RTL 协同仿真,以验证所编写的算法 IP 的 AXI4 Stream 输入/输出接口是否可以正常流通数据,仿真结果如图2所示。

图像传感器

图2 C/RTL的输入输出接口仿真结果

从图2可以看出,AXI4 Stream 的output_r_TDATA 和 input_r_TDATA 单帧内都有连续的数据,说明流接口逻辑仿真没有问题。接下来可以进行IP工程的综合,VivadoHLS综合结果如图3所示。

图像传感器

图3 VivadoHLS 综合结果

由图3可知,综合目标时钟周期为10ns,预计最高可达到8.67ns,实际平台时钟为50 MHz(即20ns),故符合要求。最高延迟为 166453 个时钟周期,时 钟周期为 20ns,故预估延时约为3.3 ms。OV6946 图像传感器输出的视频流每秒为30 帧,所以帧间隔为33.3 ms,完全可以做到实时处理。至此,完成了算法IP的编写、仿真与综合,在 VivadoHLS中生成IP后,既可以通过 RTL 文件的方式添加进 Vivado 的工程,也可以通过 BlockDesign 的方式添加固化到 FPGA 中。

3.2 实物验证与结果分析

本设计以 Zynq7020 为核心处理平台,其中 PL 端负责 OV6946摄像头的视频流数据采集以及 FPN 噪声校正值的计算与应用。而 PS端则负责摄像头的寄存器配置。最终,通过 HDMI接口实现了实时处理的视频流输出和显示。硬件平台实物如图4所示。

图像传感器

图4 系统实物图

原始输出如图5所示,可以看出,图像条带噪声明显,严重影响图像传感器的输出质量。

图像传感器

图5 未经本设计算法处理的原始输出

在加入本设计的算法后,系统上电时要让摄像头随机晃动或者对着播放随机噪声的显示设备停留10s,以采集到足够的带有条带噪声的随机图像,因为 OV6946 的帧率为30fps,10秒刚好采集300帧图像,10 秒后则一直应用计算出的结果,以达到去除该图像传感器条带噪声的目的。在进行完上述操作并且应用校正值后,实时显示结果如图6所示。

图像传感器

图6 经本设计算法处理的图像传感器输出

对比图5和图6可以明显看出,条带噪声得到了较好的去除,图像整体质量提升明显,图像无传统的单帧矩匹配算法易产生的"带状效应"。表现为行条带的FPN 噪声也可用此方法进行噪声去除,把上述列计算换为行计算即可。最后视频帧显示无撕裂,感觉不到延时,做到了实时处理。

4结语  

本文围绕 FPN 噪声去除进行了设计与分析,基于矩匹配思想提出了一种去除图像传感器 FPN 噪声的方法,使用 VivadoHLS设计算法IP 实现了 FPN 噪声的去除,能够轻松满足 OV6946 摄像头视频流的实时处理。本算法对各应用场景 FPN 噪声的去除具有一定的参考价值,可以用在诸如图像传感器产品出厂前校正与测试、摄像头产品非均匀校正等场景,具有工程应用意义。

(作者单位:中北大学 仪器科学与动态测试教育部重点实验室,太原 030051)

(本文由《单片机与嵌入式系统应用》杂志授权发表,原文刊发在2023年第12期)

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分