2019年11月20日开发手记

两种运动检测算法的介绍:

帧差法:

帧差法是目前运动目标检测中最常用的算法。帧差法依据的原则是:当视频中存在移动物体的时候,相邻帧(或相邻三帧)之间在灰度上会有差别,求取两帧图像灰度差的绝对值,则静止的物体在差值图像上表现出来全是0,而移动物体特别是移动物体的轮廓处由于存在灰度变化为非0,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。

二维频域运动目标检测:

通过对动态图像的行列分解, 将三维频域内的运动检测问题转化到两组二维频域内进行, 从而降低了滤波器设计的难度。给出了一种提取主运动能量的自适应滤波算法, 通过剔除背景和噪声的频率成分, 有效地检测出运动目标。

 

复杂度分析:

针对帧差法进行分析,代码复杂度主要集中在absdiff与findContours部分,其中absdiff的迭代次数为2*500*500=50000次,时间为88.46ms(取两百帧计算平均的时间)

 

针对二维频域运动目标检测算法,这里有两个代码版本:

针对py-new-fuliye.py,代码的复杂度主要集中在两个部分:傅里叶变换以及遍历,在py-new-fuliye.py中,共使用了两次傅里叶变换与两次遍历,遍历的迭代次数次数为2*50*30=300次,时间为:54.175ms

 

针对pepoplefft.py(改进版)进行分析,使用了两次傅里叶变换(一次正一次逆),进行了一次嵌套遍历,遍历次数为:50*10=500次,时间为:  ms

 

针对pepoplefft.py进行优化调参:

搜寻噪点:

要找到噪点,就要知道经傅里叶高通滤波变换后,剩余的边缘部分在数组中的表现规律,采用numpy绘图表示出来:

 

经过阈值去噪后,效果如图:

 

在随后的视频测试中发现其面对复杂环境表现仍不理想,此时考虑选择绘制多个矩形来框选标记多个候选目标,暂时不考虑使用其他的滤波进行去噪,原因为1、会占用原本就不多的处理时间,2、不认为在经过高通滤波后还未被滤掉的噪点会被其他滤波函数滤掉,目标被滤掉的可能性反而更大。

posted @ 2019-11-20 22:06  巫师笔记  阅读(467)  评论(1编辑  收藏  举报