0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

麦克泰技术 来源: 嵌入式系统专家之声 2024-01-02 11:10 次阅读

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)所示:

b0e2c0b0-a91b-11ee-8b88-92fbcf53809c.png

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

b0e9ce28-a91b-11ee-8b88-92fbcf53809c.png

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

b0f43eee-a91b-11ee-8b88-92fbcf53809c.png

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

b0fb5936-a91b-11ee-8b88-92fbcf53809c.png

若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所示。

b10484fc-a91b-11ee-8b88-92fbcf53809c.png

图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所示。

b113a5b8-a91b-11ee-8b88-92fbcf53809c.png

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

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

b122d79a-a91b-11ee-8b88-92fbcf53809c.png

图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所示。

b1323afa-a91b-11ee-8b88-92fbcf53809c.png

图4 系统实物图

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

b14852d6-a91b-11ee-8b88-92fbcf53809c.png

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

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

b165440e-a91b-11ee-8b88-92fbcf53809c.png

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

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

4结语

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

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

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

审核编辑:汤梓红

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

    关注

    13

    文章

    1070

    浏览量

    47062
  • 图像传感器
    +关注

    关注

    68

    文章

    1735

    浏览量

    128850
  • Vivado
    +关注

    关注

    18

    文章

    790

    浏览量

    65099
  • HLS
    HLS
    +关注

    关注

    1

    文章

    126

    浏览量

    23683

原文标题:Vivado HLS的图像传感器FPN噪声去除算法设计

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    探索Vivado HLS设计流,Vivado HLS高层次综合设计

    作者:Mculover666 1.实验目的 通过例程探索Vivado HLS设计流 用图形用户界面和TCL脚本两种方式创建Vivado HLS项目 用各种
    的头像 发表于 12-21 16:27 3210次阅读

    用OpenCV和Vivado HLS加速基于Zynq SoC的嵌入式视觉应用开发

    Vivado设计环境提供丰富的处理IP SmartCORE,能简化到图像传感器、网络及其它必要I/O接口的连接,简化OpenCV库中这些函数的实现。这相对于其它实现方案而言是一种明显的优势,因为其它方案哪怕是
    发表于 04-21 15:49

    新手求助,HLS实现opencv算法加速的IP在vivado的使用

    是video in to AXI4-Stream,接到DMA,而HLS生成的算法IP是AXI4-Stream in and out。我想把AXI-Stream信号输出接到HLS输出的IP,IP经过
    发表于 01-16 09:22

    基于一种新型CMOS图像传感器原理及设计

    去除FPN噪声、色彩差值,图像锐化差值、光圈修正、Gamma修正等一系列处理。  通过数字图像处理算法
    发表于 11-14 15:24

    新型CMOS图像传感器设计

    进行处理。一般上,图像的预处理是在协处理中完成的。最近,随着SoC技术的发展,可以在CMOS传感器中集成图像预处理功能.这正显示了CMOS图像
    发表于 11-14 15:48

    上海格科微1/4英寸VGA CMOS图像传感器

    的sensor架构,有效减少串扰(crosstalk);图像层次感比较强,图像显示比较真实;图像周边亮度比较强;在图像处理上还进行了颜色纠正,保证色彩充分还原。至于
    发表于 12-03 10:22

    请问如何只下载Vivado HLS 2015.2

    嗨伙计,在我的PC Vivado设计套件2015.2和SDK 2015.2工作,但只有vivado HLS 2015.2没有打开,这就是为什么我想重新安装Vivado
    发表于 12-27 10:57

    怎么在Vivado HLS中生成IP核?

    的经验几乎为0,因此我想就如何解决这个问题提出建议。这就是我的想法:1 - 首先,用Vivado HLS转换VHDL中的C代码(我现在有一些经验)2 - 在Vivado HLS中生成I
    发表于 03-24 08:37

    Vivado HLS实现OpenCV图像处理的设计流程与分析

    库函数,测试激励读入图像,经过滤波处理输出的图像保存分析。可以看到,算法的处理基于IPIimage类型,输入和输出图像都使用此类型。2.3
    发表于 07-08 08:30

    Vivado HLS设计流的相关资料分享

    1.实验目的通过例程探索Vivado HLS设计流用图形用户界面和TCL脚本两种方式创建Vivado HLS项目用各种HLS指令综合接口优化
    发表于 11-11 07:09

    基于Vivado HLS平台来评估压缩算法

    随着无线网络的数据流量和密集度不断增加,所有运营商都面临着非常大的挑战。一套好的数据压缩算法能够帮助运营商节省不少的网络基础设备的开支。使用Xilinx Vivado HLS工具评估开放式无线电设备
    发表于 11-17 02:25 1293次阅读
    基于<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>平台来评估压缩<b class='flag-5'>算法</b>

    Vivado-HLS实现低latency 除法器

    1 Vivado HLS简介 2创建一个Vivado-HLS工程 2.1打开Vivado HLS GUI 2.2创建新工程 在 Welcom
    发表于 12-04 10:07 0次下载
    用<b class='flag-5'>Vivado-HLS</b>实现低latency 除法器

    如何创建Vivado HLS项目

    了解如何使用GUI界面创建Vivado HLS项目,编译和执行C,C ++或SystemC算法,将C设计合成到RTL实现,查看报告并了解输出文件。
    的头像 发表于 11-20 06:09 3689次阅读

    关于Vivado HLS错误理解

    尽管 Vivado HLS支持C、C++和System C,但支持力度是不一样的。在v2017.4版本ug871 第56页有如下描述。可见,当设计中如果使用到任意精度的数据类型时,采用C++ 和System C 是可以使用Vivado
    的头像 发表于 07-29 11:07 5123次阅读
    关于<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>错误理解

    VIVADO HLS设计移植到CATAPULT HLS平台

    电子发烧友网站提供《将VIVADO HLS设计移植到CATAPULT HLS平台.pdf》资料免费下载
    发表于 09-13 09:12 2次下载
    将<b class='flag-5'>VIVADO</b> <b class='flag-5'>HLS</b>设计移植到CATAPULT <b class='flag-5'>HLS</b>平台