FPGA帧差算法实现图像识别跟踪,Verilog代码讲解全网最细,提供两套工程源码和技术支持

2023-05-16

目录

  • 1、前言
  • 2、设计思路、框架和过程精细详解
  • 3、vivado工程详解
  • 4、上板调试验证并演示
  • 5、福利:工程代码的获取

1、前言

之前我写过一篇关于FPGA帧差算法实现图像识别跟踪的文章,可以参考一下FPGA帧差算法实现图像识别跟踪
但那篇文章讲得不够细,这里讲得细一点:
运动目标检测原理:先将RGB图像转为灰度图只取亮度分量y,如果一个物体是运动的,那么前后两张或几张灰度图的同一位置的像素值应该是变化的,试想,如果是静止物体,比如一幅画,那么任意时刻,同一位置像素点的值不变才对,如果运动了,像素点的值自然也就改变了,很好理解,这个叫做帧差算法,这里的像素点差值有个范围,叫做阈值,cdn上有大佬说70~100是理想值。

2、设计思路、框架和过程精细详解

设计框图:
在这里插入图片描述
源视频:
提供的2套工程的原视频不同,一个是OV5640摄像头采集的数据,rgb888格式;另一个是it6802采集的hdmi输入的视频,rgb888;
图像缓存:
将采集到的原视频通过fdma方案写入ddr3做三帧缓存再都读出,这部分可以参考我之前的文章fdma视频三帧缓存方案
RGB转YUV:
将RGB转为YUV并只取Y分量,为什么只取Y分量呢?为了降低算法难度和资源消耗;
帧差算法:
利用图像缓存模块得到间隔的两帧图像,根据两帧图输入进来的Y分量,在图像有效信号de期间,用后一帧图像的Y分量减去前一帧图像的Y分量得到差值,用差值与帧差阈值进行比较得到帧差标志,判定为是运动迹象,根据帧差标志将认定为是有变化的像素点赋白色像素值,其余赋黑色像素点,如此一来,得到的图像就是只有黑白像素的图像,其中由运动迹象的点是白色,其余是黑色,这就为后面的画框做好了铺垫;
这里有几点需要补充:
1、帧差间隔,也就是2帧图像之间的时间间隔怎么选取?经验告诉我们选择5帧,代码部分如下:
在这里插入图片描述
2、帧差阈值,也就是两帧图像的Y分量之差是多少才能判定为是运动迹象呢?经验告诉我们选择20到100,但70为最佳,代码部分如下:
在这里插入图片描述
在这里插入图片描述
中值滤波:
采用2个fifo取3x3的算子模块,然后进行中值滤波,也就是以你某个像素点为中心,与其周边3个点的值取平均值,目的是为了使我们前面得到的黑白图像中的白色噪点减少;
模块顶层接口如下:
在这里插入图片描述
腐蚀和膨胀:
与中值滤波类似,同样采用2个fifo取3x3的算子模块,目的是为了使我们前面得到的黑白图像中的白色噪点进一步减少;两者的模块顶层接口如下:
在这里插入图片描述
在这里插入图片描述
图像画框:
这个模块是整个工程的精髓和难点所在,目的是把运动的二物体框出来;现解析如下:
输入:处理后的黑白图像和原始的RGB图像,原始的RGB图像是图像缓存模块从ddr3中读出的图像,之所以要采用2个图像输入的方案,是为了输出的选择,如果判断当前像素点是运动迹象的边沿,则将该像素点赋为红色,否则赋原始的RGB图像的值;
算法:算法部分只用黑白图像,判断黑白图像中白点的x轴坐标的最小位置和最大位置,以及y轴坐标的最小位置和最大位置,根据这四个点的坐标,就能框出一个矩形框,具体算法还得看代码,找我吧兄弟!画框部分代码如下:
在这里插入图片描述

3、vivado工程详解

工程介绍,以工程2为模板介绍:

工程1:
开发板:Kintex7开发板;
开发环境:vivado2019.1;
输入:OV5640摄像头720P;
输出:HDMI输出720P;

工程2:
开发板:Kintex7开发板;
开发环境:vivado2019.1;
输入:HDMI输入1080P,IT6802解码;
输出:HDMI输出1080P;

BD工程:
在这里插入图片描述
代码架构:
在这里插入图片描述

4、上板调试验证并演示

直接看输出效果:坤坤申请出战:

坤坤帧差算法图像识别跟踪

5、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
福利:工程源码奉上,找我吧兄弟!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA帧差算法实现图像识别跟踪,Verilog代码讲解全网最细,提供两套工程源码和技术支持 的相关文章

  • ubuntu下研华工控机CAN卡驱动的安装与测试

    ubuntu下研华工控机CAN卡驱动的安装 0 关于ubuntu系统与内核版本是否需要匹配的问题 1 CAN卡驱动安装 PCI 1680 advSocketCAN V1 0 0 0 2 CAN卡通讯测试 2 1 引脚介绍 2 2 测试程序
  • PCL点云库必备知识点2.1——点云旋转变化pcl::transformPointCloud的使用

    matrix transform02 cpp span class token macro property span class token directive hash span span class token directive k
  • ros必备知识点8:ros之use_sim_time的使用

    这个参数当回放bag数据集是设置为true xff0c 此时说明系统使用的是仿真时间 xff0c 如果设置为false xff0c 则系统使用walltime 此参数可以通过launch文件中设置 xff0c 或者通过节点设置 launch
  • Apollo第二讲—apollo自动驾驶调试及仿真实践

    1 自动驾驶开发流程 1 1 数据分析 使用DreamView调试工具 云实验操作指南 xff08 1 xff09 云实验1 xff1a 使用Dreamview播放离线数据包 Apollo调试工具 1 xff09 内容概述 2 xff09
  • Apollo第五讲——Apollo定位模块

    1 定位的作用 1 xff08 xff09 定位和地图是一对孪生兄弟 获取当前地理位置信息 xff0c 通常在地图中进行记录和表示 提供车辆当前运动状态 xff1a 航向 速度 加速度 角速度等状态信息 xff08 2 xff09 地位的地
  • Apollo专项课——第一讲:交通灯检测

    1 问题引入与本节课重点学习打卡内容 2 Apollo决策功能的设计与实现 交规决策 xff1a 根据路径与红绿灯状态来决定是否生成虚拟墙 路径决策 路径边界 速度决策 planning模块运行流程 场景分类的例子 xff1a 车道跟随 x
  • Apollo最新升级后的感知框架介绍

    Apollo感知框架 1 Apollo视觉感知算法模块流程2 感知框架升级的内容 1 Apollo视觉感知算法模块流程 预处理 神经网络模型的训练 后处理 2 感知框架升级的内容 主要包括三方面 xff0c 如下所示 xff1a xff08
  • 采用u版的pytorchyolo3源码训练自己的数据集

    采用u版的pytorchyolo3源码训练自己的数据集 1 说明 最近一直在研究目标检测这一块的内容 在导师的建议下学习了yolov3目标检测算法 xff0c 想着既然学完了就要跑一边看看是啥样子的说干就干 本文采用的源码为https gi
  • 进程概念初始

    进程初识 进程 xff1a 进程对于用户来说进程就是一个运行中的程序 xff0c 就是一个编译好的二进制文件 站在我们程序员的角度上来看 xff0c 进程就是一些列指令运行的过程 xff0c 站到操作系统上来看 xff0c 就是分配系统资源
  • 常用的linux操作指令

    关机 系统的关机 重启以及登出 shutdown h now 关闭系统 init 0 关闭系统 telinit 0 关闭系统 shutdown h hours minutes amp 按预定时间关闭系统 shutdown c 取消按预定时间
  • TX2安装ROS系统成功记录

    TX2安装ROS系统成功记录 前言一 确认安装的ROS版本二 安装步骤1 设置sources list2 设置密钥3 安装4 环境配置4 安装构建功能包的依赖 三 测试总结 前言 因导师项目 xff0c 需要将在电脑上开发的算法移植到TX2
  • 实现js程序在vscode控制台输出的方法(看完方便多了)

    当我们想要写一段js代码时 xff0c 我们可能会在vscode中新建一个html文件 xff0c 然后再script标签下去编写js代码 xff0c 完了之后我们想要看看js打印输出的效果 xff0c 还会通过浏览器的 F12 去查看输出
  • 总结C++中取成员函数地址的几种方法

    总结C 43 43 中取成员函数地址的几种方法 这里 我整理了4种C 43 43 中取成员函数地址的方法 第1 2 4种整理于网上的方法 第3种cdecl cast是我自己想到的 其中 第4种 汇编 的方法不能在VC6上编译通过 推荐使用第
  • 移动程序后出现Cannot resolve symbol AppCompatActivity等错误

    移动android studio 程序包到不同电脑后 xff0c 出现Cannot resolve symbol AppCompatActivity等错误 xff0c 网上有说没有包含lib包 import android support
  • Gradle sync failed: Could not GET gradle-3.0.0-beta4.pom

    在不电脑间移动android工程项目时出现Gradle sync fail Could not resolve com android tools build gradle 3 0 0 beta4 以为是android studio版本的问
  • undefined reference to `dlopen' 等dlfcn.h类问题的另一种错误解决

    linux下或者android下编程经常遇到dlopen dlclose等未定义函数 xff0c 其实 只要我们链接上dl库就可以解决这个问题 xff0c 在makefile 加上 ldl选项 xff0c 便可以解决这个问题 很多文章都讲
  • openwrt交叉编译libffi zlib libiconv gettext glib gstreamer

    libffi 如果你是直接从git托管源构建libffi xff0c 那么configure还不存在 首先运行 autogen sh 这将要求您安装autoconf xff0c automake和libtool 您可能想要告诉configu
  • Python中链表、栈、队列、二叉树的封装

    Python中链表 栈 队列 二叉树的封装 1 链表的封装2 栈的封装3 队列4 二叉树的封装 1 链表的封装 链表是一种物理存储单元上非连续 非顺序的存储结构 xff0c 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结
  • 进程中产生僵尸和孤儿

    孤儿进程 父进程先于子进程结束 xff0c 则子进程成为孤儿进程 xff0c 子进程的父进程成为init进程 xff0c 称为init进程领养孤儿进程 孤儿进程其实对于操作系统来说是没有太大的危害 xff0c 在孤儿进程中父进程结束了之后
  • C++Primer Plus第6版&C Primer Plus第6版 中文版免费分享啦

    最近在学习C 43 43 xff0c 用的资料是师兄分享的经典书籍 C 43 43 Primer Plus第6版中文版 的PDF xff0c 自带书签 xff0c 使用很方便 但师兄说这个是他在网上花了积分才下载下来的 xff0c 这让我很

随机推荐