FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

这篇具有很好参考价值的文章主要介绍了FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供3套工程源码和技术支持

1、前言

没玩过图像缩放和视频拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文详细描述了FPGA实现图像去雾的实现设计方案,视频输入源有两种,一种是板载的HDMI输入接口,采用silicon9011芯片解码为RGB,另一种是廉价的ov5640摄像头;FPGA采集到输入视频后会进行图像去雾操作,图像去雾模块采用暗通道先验算法实现,利用verilog并行执行的特点对算法进行了加速;,再经过图像缓存后输出显示器,以验证图像去雾算法在FPGA中加速的正确性;提供3套vivado2019.1版本的工程源码,3套工程区别和详情如下:

vivado工程1:FPGA型号为Xilinx A7 xc7a35tfgg484-2,视频输入为HDMI,视频输出为HDMI;
vivado工程2:FPGA型号为Xilinx A7 xc7a35tfgg484-2,视频输入为ov5640,视频输出为HDMI;
vivado工程3:FPGA型号为Xilinx Zynq7020 xc7z020clg400-2,视频输入为ov5640,视频输出为HDMI;

工程代码编译通过后上板调试验证,文章末尾有演示视频,可直接项目移植,适用于在校学生、研究生,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后。

版本更新说明

此版本为第2版,根据读者的建议,对第1版工程做了如下改进和更新:
1:优化了FDMA缓存架构的源码;
2:新增了Zynq7020 版本工程;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、目前我这里已有的图像处理方案

目前我这里已有的图像处理方案有很多,包括图像缩放、图像拼接、图像旋转、图像识别跟踪、图像去雾等等,所有工程均在自己的板子上跑通验证过,保证代码的可靠性,对图像处理感兴趣或有项目需求的兄弟可以参考我的图像处理专栏,里面包含了上述工程源码的详细设计方案和验证视频演示:直接点击前往

3、暗通道先验算法介绍

暗通道先验算法介绍可以百度一下或者csdn或者知乎搜一下看看,专业的讲解我不擅长,我只擅长用fpga实现算法,专业讲原理的大佬比我讲得好,这里可以推荐一篇阅读量很大的文章:直接点击前往

4、本图像去雾模块的优缺点

优点1:纯verilog代码实现,无任何IP,可在xilinx、altera、国产FPGA等平台间自由移植;
优点2:算法加速,利用了FPGA并行计算的特点;
优点3:提供了2套工程源码,对接不同的视频输入接口;
缺点1:算法还不够完美,去雾效果也不完美,个人觉得;待我优化;
缺点2:用于验证、学习、课题等可以,做实际产品还不理想;
缺点3:对输入的图像要求稍微有点高,那种色差太过严重的去雾效果不好,我测试的这个视频作为输入源去雾效果是可以的的,兄弟们可以把这个视频作为输入源:点击查看来源

5、详细设计方案

本文详细描述了FPGA实现图像去雾的实现设计方案,视频输入源有两种,一种是板载的HDMI输入接口,采用silicon9011芯片解码为RGB,另一种是廉价的ov5640摄像头;FPGA采集到输入视频后会进行图像去雾操作,图像去雾模块采用暗通道先验算法实现,利用verilog并行执行的特点对算法进行了加速;,再经过图像缓存后输出显示器,以验证图像去雾算法在FPGA中加速的正确性;设计框图如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

视频输入

vivado工程1的视频输入为HDMI,使用笔记本电脑模拟视频源,即将笔记本电脑通过HDMI线连接到FPGA开发板的HDMI输入接口,输入视频分辨率为1920x1080@60Hz,HDMI视频解码方式为silicon9011芯片解码,即silicon9011将输入的HDMI视频解码为RGB视频供FPGA使用,silicon9011芯片需要i2c配置才能使用,请参考我之前关于silicon9011和silicon9134芯片驱动的详细讲解:直接点击前往
vivado工程2的视频输入为ov5640,DVP接口,输入视频分辨率为1280x720@30Hz;
vivado工程3的视频输入为ov5640,DVP接口,输入视频分辨率为1280x720@30Hz;

图像去雾

图像去雾模块由纯verilog代码实现,采用暗通道先验算法理论,由3个模块顺序执行,3个模块内部并行执行,实现了FPGA加速算法的目的,分别由求RGB最小值模块、求折射率模块、图像去雾组成;
求RGB最小值的目的是实时的比较求出每个像素点RGB分量的最小值,也就是暗通道,该模块顶层接口如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
求折射率的目的是输出暗通道最大值和折射率,该模块顶层接口如下:
该模块有个i_thre输入接口,该接口为阈值,初始值为26,vivado工程1和vivado工程2通过外接串口动态控制,vivado工程3通过VIO动态控制;
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
图像去雾的目的是输出暗通道最大值和折射率,该模块顶层接口如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
三个模块整合封装后的图像去雾模块接口如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

图像缓存

vivado工程1和vivado工程2采用FDMA图像缓存架构实现图像缓存,即将图像写入DDR3种缓存三帧后再读出来,FDMA图像缓存架构详情,请参考我之前关于FDMA的详细讲解:直接点击前往

串口解析

vivado工程1和vivado工程2用外接串口动态控制图像去雾模块的参数,串口采用数据帧的方式发送和解析,这我常用的板间通信控制方案,详情请参考我之前关于串口解析的详细讲解:直接点击前往
串口解析模块的作用是用电脑发送命令控制图像去雾模块的输入阈值,这个阈值的初始值为十进制26,如果你在使用过程中觉得图像去雾效果不好,可以将这个阈值调大或者调小,我这里通过串口调试助手设置了多种阈值进行调整,如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
比如要发送阈值为26,则发送控制命令如下:
aa bb 00 00 00 1a 1a cc dd;
要发送阈值为251,则发送控制命令如下:
aa bb 00 00 00 fb fb cc dd;

视频输出

vivado工程1的视频输出为HDMI,输出视频分辨率为1920x1080@60Hz,HDMI视频编码方式为silicon9134芯片解码,即silicon9134将输入的RGB视频编码为HDMI视频输出,silicon9134芯片需要i2c配置才能使用,请参考我之前关于silicon9011和silicon9134芯片驱动的详细讲解:直接点击前往
vivado工程2的视频输出为HDMI,输出视频分辨率为1920x1080@60Hz,HDMI视频编码方式为silicon9134芯片解码;
vivado工程3的视频输出为HDMI,HDMI视频编码方式为纯verilog代码实现的HDMI输出模块,输出视频分辨率为1280x720@60Hz;

6、vivado工程1详解

开发板FPGA型号:Xilinx Artix7 xc7a35tfgg484-2;
开发环境:vivado2019.1;
输入:HDMI,分辨率1920x1080@60Hz;
输出:HDMI,分辨率1920x1080@60Hz;
工程Block Design如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
工程代码架构如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
FPGA资源消耗和功耗预估如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

7、vivado工程2详解

开发板FPGA型号:Xilinx Artix7 xc7a35tfgg484-2;
开发环境:vivado2019.1;
输入:ov5640摄像头,分辨率1280x720@30Hz;
输出:HDMI,分辨率1920x1080@60Hz;
工程Block Design如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
工程代码架构如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
FPGA资源消耗和功耗预估如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

8、vivado工程3详解

开发板FPGA型号:Xilinx Zynq7020 xc7z020clg400-2;
开发环境:vivado2019.1;
输入:ov5640摄像头,分辨率1280x720@30Hz;
输出:HDMI,分辨率1280x720@30Hz;
工程Block Design如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
工程代码架构如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
FPGA资源消耗和功耗预估如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
SDK软件工程代码架构如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
SDK软件主函数代码如下:

#include "I2C_16bit.h"
#include "xiicps.h"
#include "xil_io.h"
#include "xparameters.h"
#include "helai_vdma.h"
#include "xscugic.h"

#define VDMA0_BASEADDR	XPAR_AXI_VDMA_0_BASEADDR

#define VIDEO0_BASEADDR0 0x01000000
#define VIDEO0_BASEADDR1 0x02000000
#define VIDEO0_BASEADDR2 0x03000000

#define H_ACTIVE	1280
#define V_ACTIVE	720
#define H_STRIDE	1280

XIicPs	Iic;
XScuGic Intc;              //中断控制器驱动程序实例

void main()
{
	I2C_config_init();	//ov5640 配置完成
	helai_vdma(VDMA0_BASEADDR,VIDEO0_BASEADDR0,VIDEO0_BASEADDR1,VIDEO0_BASEADDR2,H_ACTIVE,V_ACTIVE,H_STRIDE);	// VDMA1 配置完成
	while (1) ;
}

9、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
3:如果你的vivado版本高于本工程vivado版本,解决如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
打开工程后会发现IP都被锁住了,如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
此时需要升级IP,操作如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

10、上板调试验证

这里仅以vivado工程1做输出演示:
静态展示:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
动态视频演示:

图像去雾


测试视频中的原始带雾视频来源: 点击查看来源

11、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送;
资料如下:获取方式:私,或者文章结尾的V名片;
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
三套vivado工程中图像去雾模块源码位置分别如下:
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持
FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持文章来源地址https://www.toymoban.com/news/detail-429069.html

到了这里,关于FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于fpga的ddr3读写控制,纯verilog实现,能实现多通道图像数据读写控制

    基于fpga的ddr3读写控制,纯verilog实现,能实现多通道图像数据读写控制,模块接口清晰,可移植性高. 基于FPGA的DDR3读写控制是一项重要的技术,它为多通道图像数据的读写提供了高效的解决方案。本文将介绍一种纯Verilog实现的DDR3读写控制模块,旨在实现模块接口清晰、可移

    2024年04月12日
    浏览(55)
  • 计算机视觉:暗通道去雾算法的原理及python实现

    暗通道先验去雾算法是何恺明2009年发表在CVPR上的一篇论文,还获得了当年的CVPR最佳论文 原文链接:IEEE Xplore Full-Text PDF: 本篇论文提出了一种简单但是有效的图像先验条件——暗通道先验法从一幅输入图像中去雾。暗通道先验是一种对于大量户外有雾图像的统计结果,**它最

    2024年02月07日
    浏览(34)
  • 毕业设计-基于深度学习的图像去雾算法

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学

    2024年02月02日
    浏览(68)
  • 基于FPGA的多通道数据采集系统Verilog设计

    基于FPGA的多通道数据采集系统Verilog设计 随着科技的不断发展,数据采集在许多领域变得越来越重要。为了满足高速、高精度和多通道数据采集的需求,基于FPGA的多通道数据采集系统成为了一种常见的解决方案。本文将介绍如何使用Verilog语言设计一个基于FPGA的多通道数据采

    2024年02月09日
    浏览(56)
  • 基于FPGA的多通道数据采集系统Verilog设计嵌入式

    基于FPGA的多通道数据采集系统Verilog设计嵌入式 在本文中,我们将介绍基于FPGA的多通道数据采集系统的Verilog设计,该系统可用于同时采集和处理多个通道的数据。我们将详细讨论系统的设计原理和实现步骤,并提供相应的Verilog源代码。 系统概述 多通道数据采集系统是一种

    2024年02月07日
    浏览(69)
  • AES算法基于FPGA的硬件实现(3)AES算法的Verilog实现(完结)

    本设计实现AES加密算法为ecb模式,填充模式未设置,同时支持AES-128/192/256三种密钥长度。 代码完全开源,开源链接在文章末尾。 下图为GitHub仓库中上传的文件第一级结构,第一级为matlab和user,matlab中存储的是在进行列混淆运算时查表所用的coe文件,这些文件用来初始化viv

    2024年01月18日
    浏览(52)
  • 紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码

    FPGA高端项目:紫光同创系列FPGA纯verilog图像缩放工程解决方案 提供3套工程源码和技术支持 “苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初

    2024年02月08日
    浏览(56)
  • 基于FPGA的信号处理算法,FFT法相差检测verilog实现

    基于FPGA的信号处理算法,FFT法相差检测verilog实现 。 1.硬件平台:altera芯片 2.软件平台:Quartusii 13.1 Verilog 3.实现功能:检测两路正弦波的相位差 基于FPGA的信号处理算法,FFT法相差检测verilog实现 引言 在现代通信系统中,信号处理算法在实时性和精度方面面临着巨大的挑战。

    2024年04月16日
    浏览(58)
  • 暗通道去雾 python实现

    本文为基于何恺明博士的Single Image Haze Removal Using Dark Channel Prior和Guided Image Filtering两篇论文的去雾算法python代码实现。 I(x)为原图,J(x)为无雾图像,A是大气光成分,为一常数。t(x)为透光率。 其含义就是图像I(x)为事物反射的光经过雾气衰减后加上雾气反射的大气光的结合所成

    2024年02月07日
    浏览(42)
  • FPGA上基于Verilog的TCP乱序重排算法实现及性能评估

    基于fpga的tcp乱序重排算法实现,通过verilog实现适用于fpga的tcp乱序重排算法,并通过实际数据测试验证。 代码里包含注释,可以明白每个模块的含义。 采用自创的乱序重排算法,易于在硬件中实现。 该算法和工程可用于实际应用、算法设计、研究学习。 提供测试用的抓包文

    2024年04月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包