FPGA实现双目摄像头红蓝3D融合,提供6套工程源码和技术支持

目录

FPGA实现双目摄像头红蓝3D融合,提供6套工程源码和技术支持

FPGA实现双目摄像头红蓝3D融合

1、前言

双目摄像头红蓝3D融合,本质上是一种立体视觉技术,它模仿人类双眼的视差原理,通过两个在水平方向上具有一定间距(称为基线)的摄像头,同时捕获两幅图像,双目摄像头分别取红、蓝绿叠加显示,戴上红蓝3D眼睛即可观看3D效果。

头红蓝3D融合的具体应用?

双目3D融合技术应用极其广泛,涵盖工业、消费电子、自动驾驶等多个领域:

1、自动驾驶与高级驾驶辅助系统:

障碍物检测与避障:精确感知车辆、行人、自行车等的距离和大小。

可行驶区域检测:识别路面和路沿。

SLAM:实时构建周围环境地图并进行自我定位。

2、机器人技术:

导航与路径规划:让机器人在复杂环境中自主移动。

抓取与操作:通过3D视觉引导机械臂精准抓取无序摆放的物体。

3、增强现实:

通过对现实世界的精确3D理解,可以将虚拟物体以正确的几何透视关系和遮挡关系叠加到真实场景中,实现更逼真的AR效果。

4、工业检测与测量:

体积测量:快速测量仓库中货物的体积。

三维尺寸检测:在生产线上对工件进行高精度的三维外形检测。

引导与定位:引导机器人进行精密装配。

5、消费电子:

手机人脸识别(如早期的iPhone X):通过结构光或双目原理实现安全的3D人脸识别。

3D扫描与建模:用手机扫描物体,快速生成其3D模型。

6、安防监控:

判断入侵者的具体位置和距离,实现更智能的警戒。

头红蓝3D融合的前景

双目3D融合的前景非常光明,是未来智能化系统的核心感知技术之一。

1、技术与算法的持续进化:

深度学习:基于深度学习的立体匹配算法(如GC-Net, PSMNet)正在大幅提升匹配精度,尤其是在弱纹理、反光、遮挡等传统算法表现不佳的区域。

硬件迭代:更高分辨率、更高帧率的图像传感器,以及更强大的处理芯片,将共同推动3D感知性能的提升。

2、成本优势与普及化:

相比于激光雷达,双目摄像头的硬件成本极低,更易于大规模商业化应用。随着算法效率的提高,其性价比优势将更加凸显。

3、与新兴技术的深度融合:

元宇宙与AR/VR:作为连接现实世界与虚拟世界的桥梁,精确的3D环境感知是不可或缺的。

AIoT:智能物联网设备(如家用机器人、智能家居)需要3D视觉来更好地理解和交互环境。

4、应用场景的不断拓展:

从现有的领域扩展到医疗(如手术导航)、物流(如无人叉车)、农业(如果实采摘机器人)等更广泛的场景。

用FPGA实现双目摄像头3D融合的优势

将双目3D融合算法部署在FPGA上,相比于使用通用CPU、GPU或专用ASIC,具有独特的优势:

工程概述

本设计基于Xilinx和国产紫光同创系列FPGA实现双目摄像头红蓝3D融合,分别取双目摄像头的红、蓝绿颜色分量叠加显示,戴上红蓝3D眼睛即可观看3D效果。

输入源为一个搭载OV5640的双目摄像头,FPGA首先使用纯verilog代码实现的i2c配置模块初始化配置双目摄像头,本设计将摄像头输出分辨率配置为1280x720@30Hz;然后使用纯verilog代码实现的OV5640视频采集模块将两个像素时钟输出一个RGB565的原始视频采集为一个像素时钟输出一个RGB888的输出视频;2路采集视频然后送入2路纯verilog代码实现的图像缓存模块,将图像写入DDR中缓存,然后在2路纯verilog代码实现的Native时序模块控制下从DDR中读出2路采集视频,然后分别取其中1路视频的红色分量和另1路视频的绿蓝分量进行3D叠加融合;3D叠加融合视频然后送入纯verilog代码实现的RGB转HDMI模块或者专用芯片实现RGB888转HDMI;然后HDMI视频通过HDMI线缆连接显示器显示,戴上红蓝3D眼睛即可观看3D效果。针对市场主流需求,本博客设计并提供6套工程源码,具体如下:

现对上述6套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx-Artix7-35T-xc7a35tfgg484-2;输入源为一个搭载OV5640的双目摄像头,FPGA首先使用纯verilog代码实现的i2c配置模块初始化配置双目摄像头,本设计将摄像头输出分辨率配置为1280x720@30Hz;然后使用纯verilog代码实现的OV5640视频采集模块将两个像素时钟输出一个RGB565的原始视频采集为一个像素时钟输出一个RGB888的输出视频;2路采集视频然后送入2路纯verilog代码实现的图像缓存模块,将图像写入DDR中缓存,然后在2路纯verilog代码实现的Native时序模块控制下从DDR中读出2路采集视频,然后分别取其中1路视频的红色分量和另1路视频的绿蓝分量进行3D叠加融合;3D叠加融合视频然后送入纯verilog代码实现的RGB转HDMI模块实现RGB888转HDMI,输出分辨率为1280x720@30Hz;然后HDMI视频通过HDMI线缆连接显示器显示,戴上红蓝3D眼睛即可观看3D效果。该方案需要FPGA开发板有DDR资源,适用于Xilinx-7系列FPGA移植开发。

工程源码2

开发板FPGA型号为Xilinx-Artix7-100T-xc7a100tfgg484-2;输入源为一个搭载OV5640的双目摄像头,FPGA首先使用纯verilog代码实现的i2c配置模块初始化配置双目摄像头,本设计将摄像头输出分辨率配置为1280x720@30Hz;然后使用纯verilog代码实现的OV5640视频采集模块将两个像素时钟输出一个RGB565的原始视频采集为一个像素时钟输出一个RGB888的输出视频;2路采集视频然后送入2路纯verilog代码实现的图像缓存模块,将图像写入DDR中缓存,然后在2路纯verilog代码实现的Native时序模块控制下从DDR中读出2路采集视频,然后分别取其中1路视频的红色分量和另1路视频的绿蓝分量进行3D叠加融合;3D叠加融合视频然后送入Silicom9134芯片实现RGB888转HDMI,输出分辨率为1280x720@30Hz;然后HDMI视频通过HDMI线缆连接显示器显示,戴上红蓝3D眼睛即可观看3D效果。该方案需要FPGA开发板有DDR资源,适用于Xilinx-7系列FPGA移植开发。

工程源码3

开发板FPGA型号为Xilinx-Kintex7-325T-xc7k325tffg900-2;输入源为一个搭载OV5640的双目摄像头,FPGA首先使用纯verilog代码实现的i2c配置模块初始化配置双目摄像头,本设计将摄像头输出分辨率配置为1280x720@30Hz;然后使用纯verilog代码实现的OV5640视频采集模块将两个像素时钟输出一个RGB565的原始视频采集为一个像素时钟输出一个RGB888的输出视频;2路采集视频然后送入2路纯verilog代码实现的图像缓存模块,将图像写入DDR中缓存,然后在2路纯verilog代码实现的Native时序模块控制下从DDR中读出2路采集视频,然后分别取其中1路视频的红色分量和另1路视频的绿蓝分量进行3D叠加融合;3D叠加融合视频然后送入RGB转HDMI模块实现RGB888转HDMI,输出分辨率为1280x720@30Hz;然后HDMI视频通过HDMI线缆连接显示器显示,戴上红蓝3D眼睛即可观看3D效果。该方案需要FPGA开发板有DDR资源,适用于Xilinx-7系列FPGA移植开发。

工程源码4

开发板FPGA型号为Xilinx--Zynq7020--xc7z020clg400-2;输入源为一个搭载OV5640的双目摄像头,FPGA首先使用纯verilog代码实现的i2c配置模块初始化配置双目摄像头,本设计将摄像头输出分辨率配置为1280x720@30Hz;然后使用纯verilog代码实现的OV5640视频采集模块将两个像素时钟输出一个RGB565的原始视频采集为一个像素时钟输出一个RGB888的输出视频;2路采集视频然后送入2路纯verilog代码实现的图像缓存模块,将图像写入DDR中缓存,然后在2路纯verilog代码实现的Native时序模块控制下从DDR中读出2路采集视频,然后分别取其中1路视频的红色分量和另1路视频的绿蓝分量进行3D叠加融合;3D叠加融合视频然后送入RGB转HDMI模块实现RGB888转HDMI,输出分辨率为1280x720@30Hz;然后HDMI视频通过HDMI线缆连接显示器显示,戴上红蓝3D眼睛即可观看3D效果。该方案需要FPGA开发板有DDR资源,适用于Xilinx-Zynq7000系列FPGA移植开发。

工程源码5

开发板FPGA型号为Xilinx--Kintex UltraScale--xcku060-ffva1156-2-i;输入源为一个搭载OV5640的双目摄像头,FPGA首先使用纯verilog代码实现的i2c配置模块初始化配置双目摄像头,本设计将摄像头输出分辨率配置为1280x720@30Hz;然后使用纯verilog代码实现的OV5640视频采集模块将两个像素时钟输出一个RGB565的原始视频采集为一个像素时钟输出一个RGB888的输出视频;2路采集视频然后送入2路纯verilog代码实现的图像缓存模块,将图像写入DDR中缓存,然后在2路纯verilog代码实现的Native时序模块控制下从DDR中读出2路采集视频,然后分别取其中1路视频的红色分量和另1路视频的绿蓝分量进行3D叠加融合;3D叠加融合视频然后送入RGB转HDMI模块实现RGB888转HDMI,输出分辨率为1280x720@30Hz;然后HDMI视频通过HDMI线缆连接显示器显示,戴上红蓝3D眼睛即可观看3D效果。该方案需要FPGA开发板有DDR资源,适用于Xilinx-UltraScale系列FPGA移植开发。

工程源码6

开发板FPGA型号为紫光同创--PG2L100H-6EBG676;输入源为一个搭载OV5640的双目摄像头,FPGA首先使用纯verilog代码实现的i2c配置模块初始化配置双目摄像头,本设计将摄像头输出分辨率配置为1280x720@30Hz;然后使用纯verilog代码实现的OV5640视频采集模块将两个像素时钟输出一个RGB565的原始视频采集为一个像素时钟输出一个RGB888的输出视频;2路采集视频然后送入2路纯verilog代码实现的图像缓存模块,将图像写入DDR中缓存,然后在2路纯verilog代码实现的Native时序模块控制下从DDR中读出2路采集视频,然后分别取其中1路视频的红色分量和另1路视频的绿蓝分量进行3D叠加融合;3D叠加融合视频然后送入Silicom9134芯片实现RGB888转HDMI,输出分辨率为1280x720@30Hz;然后HDMI视频通过HDMI线缆连接显示器显示,戴上红蓝3D眼睛即可观看3D效果。该方案需要FPGA开发板有DDR资源,适用于紫光同创系列FPGA移植开发。

本博客详细描述了FPGA实现双目摄像头红蓝3D融合的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;

提供完整的、跑通的工程源码和技术支持;

工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

我已有的FPGA图像处理方案

我的主页目前有FPGA图像处理专栏,改专栏收录了我目前手里已有的FPGA图像处理方案,包括图像缩放、图像识别、图像拼接、图像融合、图像去雾、图像叠加、图像旋转、图像增强、图像字符叠加等等;以下是专栏地址:
点击直接前往

3、详细设计方案

设计框图

设计原理框图如下:

输入双目OV5640摄像头

输入源为一个搭载OV5640的双目摄像头,此外本博主在工程中还设计了动态彩条模块,彩条由FPGA内部逻辑产生,且是动态移动的,完全可模拟Sensor,输入源选择Sensor还是彩条,通过Sensor模块的顶层参数配置,默认选择Sensor输入;Sensor模块如下:

SENSOR_TYPE=0;则输出OV5640摄像头采集的视频;

SENSOR_TYPE=1;则输出动态彩条的视频;

OV5640摄像头需要i2c初始化配置,本设计配置为1280x720@30Hz分辨率,本设计提供纯verilog代码实现的i2c模块实现配置功能;此外,OV5640摄像头还需要图像采集模块实现两个时钟输出一个RGB565的视频转换为一个时钟输出一个RGB888视频,本设计提供纯verilog代码实现的图像采集模块实现配置功能;动态彩条则由FPGA内部逻辑实现,由纯verilog代码编写;将OV5640摄像头配置采集和动态彩条进行代码封装,形成helai_OVsensor.v的顶层模块,整个模块代码架构如下:

图像缓存架构

Xilinx系列FPGA工程使用FDMA图像缓存架构,实现的功能是将输入视频缓存到板载DDR3中再读出送后续模块,目的是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现显示效果;由于调用了Xilinx官方的MIG作为DDR控制器,所以FDMA图像缓存架构就是实现用户数据到MIG的桥接作用;架构如下:

FDMA图像缓存架构由FDMA控制器+FDMA组成;FDMA实际上就是一个AXI4-FULL总线主设备,与MIG对接,MIG配置为AXI4-FULL接口;FDMA控制器实际上就是一个视频读写逻辑,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;FDMA控制器每次写入一行视频数据,即每次向DDR4中写入M个像素,写N次即可完成1帧图像的缓存,读视频与之一样;同时调用两个FIFO实现输入输出视频的跨时钟域处理,使得用户可以AXI4内部代码,以简单地像使用FIFO那样操作AXI总线,从而达到读写DDR的目的,进而实现视频缓存;本设计图像缓存方式为3帧缓存;图像缓存模块代码架构如下:

基于FDMA的图像缓存架构在Block Design设计中如下:

紫光同创系列FPGA工程使用的图像缓存架构实现的功能是将输入视频缓存到板载DDR3中再读出送后续模块,目的是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现显示效果;由于调用了紫光官方的HMIC_S IP核作为DDR控制器,所以图像缓存架构就是实现用户数据到HMIC_S的桥接作用;架构如下:

图像缓存架构由视频缓存帧更新模块+写视频控制逻辑+读视频控制逻辑+AXI4-FULL-Master总线模块组成;AXI4-FULL-Master总线模块实际上就是一个AXI4-FULL总线主设备,与HMIC_S IP核对接,HMIC_S IP核配置为AXI4-FULL接口;写视频控制逻辑、读视频控制逻辑实际上就是一个视频读写状态机,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;写视频控制逻辑每次写入一次突发传输的视频数据,记作Y,即每次向DDR3中写入Y个像素,写M×N÷Y次即可完成1帧图像的缓存,读视频与之一样;同时调用两个FIFO实现输入输出视频的跨时钟域处理,使得用户可以忽略AXI4内部代码,以简单地像使用FIFO那样操作AXI4总线,从而达到读写DDR的目的,进而实现视频缓存;本设计图像缓存方式为4帧缓存;图像缓存模块代码架构如下:

!!!注意

本设计使用的DDR3控制器IP版本为ips2l_hmic_s_v1_3,安装包以放在资料中,请用户自行安装,安装包目录如下:

多路视频读写仲裁

多路视频读写仲裁模块由纯verilog代码实现,以保证多路视频有序读写;对于写操作而言,不同的视频顺序存储在DDR3中的不同内存地址;对于读操作而言,不同的视频顺序的从DDR3中的不同内存地址读出;多路视频读写仲裁的读写仲裁采用轮询机制、状态机流程;多路视频读写仲裁架构如下:

多路视频读写仲裁模块代码架构如下:

红蓝3D融合

然后在2路纯verilog代码实现的Native时序模块控制下从DDR中读出2路采集视频,然后分别取其中1路视频的红色分量和另1路视频的绿蓝分量进行3D叠加融合;

工程源码架构

提供6套工程源码,以工程源码1为例,vivado Block Design设计如下:

提供6套工程源码,以工程源码1为例,综合后的工程源码架构如下:

提供6套工程源码,以工程源码6为例,综合后的工程源码架构如下:

4、Vivado工程源码1详解-->Artix7-35T版本

开发板FPGA型号:Xilinx-Artix7-35T-xc7a35tfgg484-2;

开发环境:Vivado2019.1;

视频输入:OV5640双目摄像头,分辨率为1280x720@30Hz;

视频输出:HDMI,RTL逻辑编码方案,分辨率1280x720@60Hz;

视频缓存方案:2路视频3帧缓存,缓存介质为DDR3;

3D融合方案:双目摄像头红蓝3D叠加方案;

工程作用:让读者掌握FPGA实现实现双目摄像头红蓝3D融合的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

5、Vivado工程源码2详解-->Artix7-100T版本

开发板FPGA型号:Xilinx-Artix7-35T-xc7a100tfgg484-2;

开发环境:Vivado2019.1;

视频输入:OV5640双目摄像头,分辨率为1280x720@30Hz;

视频输出:HDMI,Silicom9134芯片编码方案,分辨率1280x720@60Hz;

视频缓存方案:2路视频3帧缓存,缓存介质为DDR3;

3D融合方案:双目摄像头红蓝3D叠加方案;

工程作用:让读者掌握FPGA实现实现双目摄像头红蓝3D融合的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

6、Vivado工程源码3详解-->Kintex7-325T版本

开发板FPGA型号:Xilinx-Kintex7-325T-xc7k325tffg900-2;

开发环境:Vivado2019.1;

视频输入:OV5640双目摄像头,分辨率为1280x720@30Hz;

视频输出:HDMI,RTL逻辑编码方案,分辨率1280x720@60Hz;

视频缓存方案:2路视频3帧缓存,缓存介质为DDR3;

3D融合方案:双目摄像头红蓝3D叠加方案;

工程作用:让读者掌握FPGA实现实现双目摄像头红蓝3D融合的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

7、Vivado工程源码4详解-->Zynq7020版本

开发板FPGA型号:Xilinx--Zynq7020--xc7z020clg400-2;

开发环境:Vivado2019.1;

视频输入:OV5640双目摄像头,分辨率为1280x720@30Hz;

视频输出:HDMI,RTL逻辑编码方案,分辨率1280x720@60Hz;

视频缓存方案:2路视频3帧缓存,缓存介质为DDR3;

3D融合方案:双目摄像头红蓝3D叠加方案;

工程作用:让读者掌握FPGA实现实现双目摄像头红蓝3D融合的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

8、Vivado工程源码5详解-->KU060版本

开发板FPGA型号:Xilinx--Kintex UltraScale--xcku060-ffva1156-2-i;

开发环境:Vivado2019.1;

视频输入:OV5640双目摄像头,分辨率为1280x720@30Hz;

视频输出:HDMI,RTL逻辑编码方案,分辨率1280x720@60Hz;

视频缓存方案:2路视频3帧缓存,缓存介质为DDR4;

3D融合方案:双目摄像头红蓝3D叠加方案;

工程作用:让读者掌握FPGA实现实现双目摄像头红蓝3D融合的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

9、Vivado工程源码6详解-->紫光同创PG2L100H版本

开发板FPGA型号:紫光同创--PG2L100H-6EBG676;

开发环境:Pango Design Suite 2021.1;

视频输入:OV5640双目摄像头,分辨率为1280x720@30Hz;

视频输出:HDMI,Silicom9134芯片编码方案,分辨率1280x720@60Hz;

视频缓存方案:2路视频3帧缓存,缓存介质为DDR3;

3D融合方案:双目摄像头红蓝3D叠加方案;

工程作用:让读者掌握FPGA实现实现双目摄像头红蓝3D融合的设计能力,以便能够移植和设计自己的项目;

工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;

工程的资源消耗和功耗如下:

10、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;

2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件-->另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;

3:如果你的vivado版本高于本工程vivado版本,解决如下:

打开工程后会发现IP都被锁住了,如下:

此时需要升级IP,操作如下:

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:


更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;

2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;

3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

11、上板调试验证

准备工作

FPGA开发板,推荐使用本博的开发板;

双目摄像头;

HDMI线和显示器;

FPGA实现双目摄像头红蓝3D融合演示

FPGA实现双目摄像头红蓝3D融合演示如下:

FPGA实现双目摄像头红蓝3D融合

12、工程代码的获取

代码太大,无法邮箱发送,以某度网盘链接方式发送

网盘资料如下:

相关推荐
不枯石13 小时前
Matlab通过GUI实现点云的最远点下采样(Farthest point sampling)
开发语言·图像处理·算法·计算机视觉·matlab
#include<菜鸡>18 小时前
AXI_CAN IP 简单使用。(仿真、microblaze)
网络协议·tcp/ip·fpga开发
yanxing.D20 小时前
OpenCV轻松入门_面向python(第五章几何变换)
图像处理·人工智能·python·opencv
2401_863801461 天前
流行的 3D 文件格式及其用途指南
3d
北岛三生1 天前
Imatest-SFRplus模块
图像处理·数码相机·测试工具·计算机视觉·测试用例·模块测试
沃达德软件1 天前
AI数字人视频图像音频生成服务
图像处理·人工智能·计算机视觉·ai作画·音视频·实时音视频·视频编解码
风已经起了1 天前
FPGA学习笔记——图像处理之亮度调节(乘法型)
图像处理·笔记·学习·fpga开发·fpga
不枯石1 天前
Matlab通过GUI实现点云的随机(Random)下采样(附最简版)
图像处理·计算机视觉·matlab
文火冰糖的硅基工坊1 天前
[硬件电路-320]:模拟电路与数字电路,两者均使用晶体管(如BJT、MOSFET),但模拟电路利用其线性区,数字电路利用其开关特性。
单片机·嵌入式硬件·数学建模·fpga开发·系统架构·信号处理