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如下: A7工程代码架构如下: 帧差缓存如下: 最后看效果图: ![在这里插入图片描述](https://img-blog.csdnimg.cn/a28077aa5d2649cd93d5f8fb5356b43f.jpeg zynq工程BD如下: 这里需要注意AXI interconect的配置,若不这样配置,则带宽不够,传不了1080P视频,如下: 还要注意,zynq的ps的ddr地址映射是zynq自动分配的,所以FDMA控制器的地址别填超出了范围,地址范围可参见如下: 所以看BD工程的地址管理器中,DDR地址不要超出这个范围,如下: 所以对应的FDMA控制器图像缓存地址也变了,如下: SDK阈值动态配置如下: 最后:整个源代码并未给出,因为工程太大了,而且比较复杂,不是一两句话能讲清楚的,需要工程源码的可以加我VX:(hllsq22) 我们一起探讨,看不懂的我再慢慢给你讲。
|