22

健康奶 · 2023年07月07日 · 北京市

FPGA帧差算法实现图像识别跟踪 Verilog代码讲解全网最细

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

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、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以百度网盘链接方式发送,
通过微信获取资料:
微信图片_20230604203730.jpg
网盘资料如下:
福利:工程源码奉上,找我吧兄弟!!

推荐阅读
关注数
12
内容数
112
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息