Yii12138

浅谈帧间差算法及运动目标检测

1
阅读(334)

    最近在看一本叫《基于MATLAB与FPGA的图像处理教程》的书,该书对于图像处理方面的算法及工程涉及非常广泛。但该书比较适合有一定图像处理和FPGA基础的人阅读,里面对算法代码的讲解较为简略。因为书中对帧间差算法及目标检测的FPGA实现这一部分没有做什么文字上的教学,因此我也查阅了网上的一些资料,想分享一下我的学习心得。

    一.算法原理

    帧间差算法(Frame Difference Algorithm)是一种在计算机视觉和视频处理领域常用的运动检测方法,它用于检测视频序列中的运动或变化。该算法的原理相对简单,基本思想是比较连续视频帧之间的差异,以找出发生的运动或变化。帧间差算法的主要优点是简单易实现,但它也有一些缺点,包括对光照变化和噪声敏感,以及不能提供有关目标的详细信息。因此,在实际应用中,通常需要与其他技术(如背景建模或光流法)结合使用,以提高运动检测的性能和准确性。帧间差算法通常用于视频监控、运动检测和基本的运动跟踪应用中。

   二.工程简介

    这个工程就是b站上大磊FPGA图像处理的基于ZYNQ的帧差法运动目标检测

1693746339415.png

    以上就是该工程的一个大致框架。

    三.代码讲解

    整个一个工程思路就是先将VDMA图像缓存到FIFO中,接着在摄像头输入像素的同时,从FIFO中读出VDMA像素,以进行帧差运算,包括了将RGB格式的像素数据转成灰度图像,之后进行帧差运算,计算帧差后的像素坐标,求出运动目标的最大矩形边框,绘制矩形框,最终输出视频。

image.png

image.png

image.png

以上是RGB格式的像素数据转成灰度图像的三步核心算法,原理就是简单的转换运算

Y = (77 *R + 150*G + 29 *B)>>8

Cb = (-43*R - 85 *G + 128*B)>>8 + 128

Cr = (128*R - 107*G  - 21 *B)>>8 + 128


Y = (77 *R + 150*G + 29 *B)>>8

Cb = (-43*R - 85 *G + 128*B + 32768)>>8

Cr = (128*R - 107*G  - 21 *B + 32768)>>8


image.png

设置帧差标志位,为1表示两帧数据差别超过阈值

    四.总结

    大致内容就是上述,具体的细节可以参考大磊图像处理,作为一名FPGA小白还要继续学习。