1、前言
本文详细描述了FPGA实现图像去雾的实现设计方案,采用暗通道先验算法实现,并利用verilog并行执行的特点对算法进行了加速;
本设计以HDMI或者ov5640摄像头作为输入,经过图像去雾算法去雾,再经过图像缓存后输出显示器,以验证图像去雾算法在FPGA中加速的正确性;
工程代码编译通过后上板调试验证,文章末尾有演示视频,可直接项目移植,适用于在校学生、研究生,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后。
2、目前我这里已有的图像处理方案
目前我这里已有的图像处理方案有很多,包括图像缩放、图像拼接、图像旋转、图像识别跟踪、图像去雾等等
3、暗通道先验算法介绍
4、本图像去雾模块的优缺点
优点1:纯verilog代码实现,无任何IP,可在xilinx、altera、国产FPGA等平台间自由移植;
优点2:算法加速,利用了FPGA并行计算的特点;
优点3:提供了2套工程源码,对接不同的视频输入接口;
缺点1:算法还不够完美,去雾效果也不完美,个人觉得;待我优化;
缺点2:用于验证、学习、课题等可以,做实际产品还不理想;
缺点3:对输入的图像要求稍微有点高,那种色差太过严重的去雾效果不好。
5、vivado工程详解
工程代码设计架构如下:
输入:
提供2套工程源码,一套以HDMI作为视频输入源,另一套以ov5640摄像头视频输入源;HDMI输入分辨率为1920x1080@60Hz;ov5640摄像头输入分辨率为1280x720@30Hz;
HDMI接收和发送采用silicon9011和silicon9134芯片驱动,silicon9011和silicon9134芯片需要i2c配置才能使用
暗通道先验-图像去雾:
由3个模块顺序执行,3个模块内部并行执行,实现了FPGA加速算法的目的,分别由求RGB最小值和求折射率以及图像去雾组成;
求RGB最小值的目的是实时的比较求出每个像素点RGB分量的最小值,也就是暗通道,该模块顶层接口如下:
求折射率的目的是输出暗通道最大值和折射率,该模块顶层接口如下:
图像去雾的目的是输出暗通道最大值和折射率,该模块顶层接口如下:
三个模块整合封装后的图像去雾模块接口如下:
FDMA图像缓存:
串口解析:
串口解析模块的作用是用电脑发送命令控制图像去雾模块的输入阈值,这个阈值的初始值为十进制26,如果你在使用过程中觉得图像去雾效果不好,可以将这个阈值调大或者调小,我这里通过串口调试助手设置了多种阈值进行调整,如下:
比如要发送阈值为26,则发送控制命令如下:
aa bb 00 00 00 1a 1a cc dd;
要发送阈值为251,则发送控制命令如下:
aa bb 00 00 00 fb fb cc dd;
vivado工程1详解
开发板FPGA:Xilinx xc7a35tfgg484-2
开发环境:vivado2019.1;
输入:HDMI-1920x1080@60Hz;
输出:HDMI-1920x1080@60Hz;
工程Block Design如下:
工程代码架构如下:
FPGA资源消耗和功耗预估如下:
vivado工程2详解
开发板FPGA:Xilinx xc7a35tfgg484-2
开发环境:vivado2019.1;
输入:ov5640摄像头-1280x720@30Hz;
输出:HDMI-1920x1080@60Hz;
工程Block Design如下:
工程代码架构如下:
FPGA资源消耗和功耗预估如下:
评论
查看更多