FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本

FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本
开发环境如下:
纯FPGA开发板:米联客MA703FA,A7-35T的FPGA;
ZYNQ开发板:米联客MZ7100FA,zynq-7100的FPGA;
EDA:vivado2019.1;
输入:OV5640摄像头;
输出:HDMI;
区别:A7版本的运动目标检测工程帧差阈值固定为70,图像缓存至DDR3;zynq版本的运动目标检测工程帧差阈值可通过SDK动态配置,图像缓存至PS的DDR3;

运动目标检测原理:现将图像转为灰度图,如果一个物体是运动的,那么前后两张或几张灰度图的同一位置的像素值应该是变化的,试想,如果是静止物体,比如一幅画,那么任意时刻,同一位置像素点的值不变才对,如果运动了,像素点的值自然也就改变了,很好理解,这个叫做帧差算法,这里的像素点差值有个范围,叫做阈值,cdn上有大佬说70~100是理想值。

思路:
1、解决帧差问题,即怎么得到两张相差两帧或几帧的图像?
答:利用米联客的FDMA方案实现,米联客的FDMA优势在于简化了AXI协议的使用门槛,不懂得可以看我前面的文章,此外,FDMA还可以跨平台使用,即纯FPGA和zynq都可使用,我们知道,一般图像缓存至zynq的PS端DDR用Xilinx的VDMA方案,但有几个不方便,比如要在SDK里配置VDMA的参数,比如VDMA看不到源码,除了问题不知道从哪里分析等等,而FDMA则完美解决了这些问题;
2、中间处理过程
答:按照米联客的方案,图像经过两个FDMA缓存得到帧差图像,经过帧差算法、中值滤波、腐蚀、膨胀后即可得到帧差的二值化图像,且全部是源码,可任意更改;
3、画框,即将运动物体框出来显示,这样看着NB一些
答:根据米联客和咸鱼FPGA等大佬的源码,都画不出框来,这个问题困扰了我近两周,后来仔细查看源码才发现源码有一个巨大BUG,根本画不出框,后来改了之后就可以了;

A7工程BD如下:
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第1张图片
A7工程代码架构如下:
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第2张图片
帧差缓存如下:
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第3张图片
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第4张图片
最后看效果图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/a28077aa5d2649cd93d5f8fb5356b43f.jpeg
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第5张图片
zynq工程BD如下:
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第6张图片
这里需要注意AXI interconect的配置,若不这样配置,则带宽不够,传不了1080P视频,如下:
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第7张图片
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第8张图片
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第9张图片
还要注意,zynq的ps的ddr地址映射是zynq自动分配的,所以FDMA控制器的地址别填超出了范围,地址范围可参见如下:
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第10张图片
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第11张图片
所以看BD工程的地址管理器中,DDR地址不要超出这个范围,如下:
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第12张图片
所以对应的FDMA控制器图像缓存地址也变了,如下:
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第13张图片
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第14张图片
SDK阈值动态配置如下:
FPGA运动目标检测,基于米联客FDMA设计开发,A7和zynq两个版本_第15张图片
最后:整个源代码并未给出,因为工程太大了,而且比较复杂,不是一两句话能讲清楚的,需要工程源码的可以加我VX:(hllsq22) 我们一起探讨,看不懂的我再慢慢给你讲。

你可能感兴趣的:(fpga开发,图像处理)