前言

固定监控,需要快速标记全天候出现画面变化的时间段,需要使用到运动侦测的方法,本文主要使用帧差法进行计算。

点跟踪:

这类方法通常在连续帧中检测到的目标被表达为点。再引入其它方法来进行目标检测。其问题可以用帧与帧之间检测到的目标点之间的关系来表达。方法可分为两大类:确定性方法和统计性方法。前者通常用定性的运动限制方法,后者用目标检测和不确定性的建模来建立关联。(1)确定性的方法定义了在一系列约束条件下,关联t时刻和t-1时刻图像帧中每个目标的成本。关联成本的最小化规划为一个优化组合问题。可以用最优分配方法求解,如匈牙利算法,贪婪搜索算法。(2)统计性方法在目标状态估计中考虑了观测噪声和模型不确定性,用状态空间方法建模速度、位置、加速度等目标属性。对于单个目标的情况,状态可简单估计得到;对于多目标的情况,则需要将观测域相应目标对应起来。

对于单目标状态估计:如果状态转移矩阵和观测矩阵都是线性的,状态和噪声是高斯分布的,则最优的状态估计方法是卡尔曼滤波。本博客最后的结果也是使用的卡尔曼滤波实现的,结果显示,对于但目标的追踪上,准确率还可以,多各目标时效果并不是太好。

对于 多目标状态估计:广泛采用的两种方法是Joint Probability Data Association Filtering (JPDAF)和Multiple Hypothesis Tracking (MHT)

核跟踪:

核函数可以是关联与一个直方图的矩形或椭圆模板,通过在连续帧中计算核的运动来跟踪。运动可以是参数形式的平移、旋转或仿射等。核跟踪的目标表达通常用原始的目标区域来表达,跟踪由计算目标运动来实现的。目标运动以参数形式的运动(如平移、仿射等)或计算得到的连续帧的密度流区域描述。这些算法在外观表达的运动、跟踪的目标数目、运动估计使用的方法等方面有所差异。核跟踪算法可分为两类:分别是基于模板和概率密度的外观模型的跟踪,和基于多视角外观模型跟踪。

单目标跟踪这类算法中最常用的是模板匹配。在图像中搜索类似于预定义模板的区域,通过相似性度量(比如cross correlation)判断目标位置。主要问题在于计算量大。可以用邻域范围限定等方法来减少搜索半径。除了模板匹配外,还可以用颜色直方图、混合模型等来表达外观模型。

多目标跟踪:这类算法通常对整个图像进行建模,包括背景和每个目标。

用多视角外观模型跟踪:对多个视角的目标进行离线学习,使能够处理重大视角变化情况跟踪问题。Black and Jepson[1998]提出基于子空间的方法。先用PCA建立目标外观的子空间表达,然后将图像转化到特征子空间中。Avidan [2001]使用了SVM分类器对多视角进行分类,并跟踪。

轮廓跟踪:

基于轮廓的方法提供了较为准确的形状描述。这类方法的主要思想是用先前帧建立的目标模型找到当前帧的目标区域。其中目标模型可以是颜色直方图、目标边缘或者轮廓。基于轮廓的跟踪方法可以分为两类:形状匹配方法和轮廓跟踪方法。前者在当前帧中搜索目标性状,后者则通过状态空间模型或直接的能量最小化函数推演初始轮廓在当前帧中的新位置。

形状匹配方法:这种方法类似于基于模板的跟踪,在当前帧中搜索目标的轮廓和相关模型。  另一种匹配形状的方法是在连续两帧中寻找关联轮廓,建立轮廓关联,或称为轮廓匹配,是类似于点匹配的一种方法。这种方法使用了目标的外观特征。轮廓检测通常由背景减除实现。轮廓被提取后,匹配由计算目标模型和每个轮廓之间的距离。目标模型可以使密度函数(颜色或边缘直方图)、轮廓边界、目标边缘或这些信息的组合。

自己实现的单目标追踪实验结果,主要是用的opencv中的函数,高斯混合模型提取前景,经过简单的处理得到轮廓和质心,再加上卡尔曼函数实现的。网上代码一大堆,有需要的可以可以提供。

算法的主要流程如下:

  1. 计算帧间的距离(Pythagorean distance)
  2. 在计算出来的距离矩阵上应用高斯模糊
  3. 使用一定的阈值进行过滤
  4. 计算标准差
  5. 标准差大于一定的阈值,认为检测到了运动,输出信息

本文将给出 Python 语言的实现。

运行环境

编程环境:Python 3.7.6OpenCV 3.3.0,IDEA

Python 实现

import numpy as np
import cv2sdThresh = 10
font = cv2.FONT_HERSHEY_SIMPLEXdef distMap(frame1, frame2):"""outputs pythagorean distance between two frames"""frame1_32 = np.float32(frame1)frame2_32 = np.float32(frame2)diff32 = frame1_32 - frame2_32norm32 = np.sqrt(diff32[:,:,0]**2 + diff32[:,:,1]**2 + \diff32[:,:,2]**2)/np.sqrt(255**2 + 255**2 + 255**2)dist = np.uint8(norm32*255)return distcv2.namedWindow('frame')
cv2.namedWindow('dist')#capture video stream from camera source. 0 refers to first camera, 1 referes to 2nd and so on.
cap = cv2.VideoCapture(0)_, frame1 = cap.read()
_, frame2 = cap.read()facecount = 0
while(True):_, frame3 = cap.read()rows, cols, _ = np.shape(frame3)cv2.imshow('dist', frame3)dist = distMap(frame1, frame3)frame1 = frame2frame2 = frame3# apply Gaussian smoothingmod = cv2.GaussianBlur(dist, (9,9), 0)# apply thresholding_, thresh = cv2.threshold(mod, 100, 255, 0)# calculate st dev test_, stDev = cv2.meanStdDev(mod)cv2.imshow('dist', mod)cv2.putText(frame2, "Standard Deviation - {}".format(round(stDev[0][0],0)), \(70, 70), font, 1, (255, 0, 255), 1, cv2.LINE_AA)if stDev > sdThresh:print("Motion detected.. Do something!!!");cv2.imshow('frame', frame2)if cv2.waitKey(1) & 0xFF == 27:breakcap.release()
cv2.destroyAllWindows()

OpenCV实现监控移动侦测相关推荐

  1. Python OpenCV车道线识别侦测

    Python OpenCV车道线识别侦测 如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助! 运行结果如下: 代码如下: import cv2 ...

  2. 太阳能监控怎么连接到电脑上 _ 太阳能监控神眼探长

    神眼探长太阳能监控不仅可以通过AView连接到手机上,还可以通过电脑软件AMS连接到电脑上. 实现远程通过手机和电脑查看监控画面. 电脑连接神眼探长太阳能监控 1.进入捷高官网-服务支持-软件下载-A ...

  3. 太阳能监控怎么连接上手机

    太阳能监控都有专属的手机app,下载好app后扫描机身上的二维码就可以成功连接上监控. 手机连接监控步骤 1.下载监控专属的手机app: 2.进入app注册用户账号: 3.开启摄像头等待连接指令: 4 ...

  4. OpenCV调用海康威视等摄像头(处理rtsp视频流)方法以及,出现内存溢出(error while decoding)或者高延迟问题解决

    博客已搬家,欢迎访问新居:http://lukeyalvin.site,主要涉及SLAM相关方向,目前知识积累尚浅,多多指教! 摄像头与电脑的连接 首先,你需要获得hikvision摄像头的密码以及用 ...

  5. python对局域网电脑监控_Python3远程监控程序的实现方法

    小编就为大家分享一篇Python3远程监控程序的实现方法,希望能够帮助到大家 简述 一开始觉得这个很有趣,然后就想来做一个来玩一下 使用语言: Python3 使用工具:opencv视频监控 + so ...

  6. 面部识别技术走到十字路口?

    来源:雷锋网 摘要:向左走,还是向右走? 近日,面部识别技术又遭遇"突发事件".本周二,由90个倡议团体组成的小组给三巨头AAM(亚马逊.谷歌.微软)写信,要求三家公司承诺不向政府 ...

  7. Python3远程监控程序实现

    简述 一开始觉得这个很有趣,然后就想来做一个来玩一下 使用语言: Python3 使用工具:opencv视频监控 + socket数据传输技术 程序检验: 这里我考虑了一下,发现还是没有必要实现封装成 ...

  8. 模拟QQ软件的基于多线程的流媒体加密传输软件技术

    模拟QQ软件的基于多线程的流媒体加密传输软件技术 模拟QQ软件,基于多线程编程捕捉摄像头及麦克风实时数据,基于socket通信设计发送端.接收端两个部分的,对音频和视频进行采集.加密或加水印.传输.解 ...

  9. PayPal 全攻略

    PayPal全程攻略 come from:http://www.pay4.cn/bbs/viewthread.php?tid=3472&extra=page%3D1 一.了解PayPal 1. ...

  10. 无线AP的Fat模式和Fit模式有什么区别?

    一起在讨论无线AP时,会分别看待瘦AP和胖AP的特点,也就是那个时候的AP,要么是瘦AP,要么是胖AP,没有"一体"之说. 但现在的很多无线AP,不再是单纯的胖AP或者瘦AP,而是 ...

最新文章

  1. 博客园Markdown新建笔记
  2. CLRS2e读书笔记—Chapter5 Appendix C
  3. SQLSERVER锁知识
  4. 第6章 服务模式 Service Interface(服务接口)
  5. c语言程序设计基础广西师范大学漓江学院,广西师范大学漓江学院试卷-计算机基础A方案.doc...
  6. Centos7 tomcat优化
  7. 容器:forward_list用法及示例
  8. WEB前端大作业-速拍摄影服务响应式网页模板(HTML JS CSS))
  9. Java高级特性 - 多线程练习题
  10. 网站会员登录,注册设计
  11. 955.WLB 红包封面来啦!送给希望不加班的你~
  12. UVM virtual interface
  13. 华为服务器怎么进入系统,服务器怎么进入系统
  14. clipboard.js实现无flash复制内容到剪贴板
  15. ActiveX控件缺失解决方法
  16. 曾仕强《中国式管理-人际关系学》笔记 下
  17. Gentoo 教程:目录
  18. Java知识点知识图谱思维导图
  19. 基金操作术语与收益术语
  20. 16位调色板和32位调色板_12种调色板提取器和站点色彩灵感资源

热门文章

  1. RS-232C接口定义(DB9)
  2. 现代数字信号处理第九章——盲信号处理
  3. 金蝶kis商贸采购单商品代码_金蝶KIS商贸版操作明细
  4. 如何将数据添加到python_如何将数据导入python
  5. windows server2008 安装iscsi服务
  6. 设计一个简单的权限管理系统
  7. 易优超级字典生成器 v3.35 下载
  8. 微信小程序获取用户手机号
  9. JConsole详解
  10. 程序带来这些新的机会,创业新浪潮才刚开始!