巫师笔记 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、不认为在经过高通滤波后还未被滤掉的噪点会被其他滤波函数滤掉,目标被滤掉的可能性反而更大。https://www.cnblogs.com/lvfengkun/p/11901359.html