【转】 运动目标检测跟踪主流算法

不全,需要慢慢补充

一.运动目标检测

(一)背景差

1.帧差

2.GMM

背景减算法可以对背景的光照变化、噪声干扰以及周期性运动等进行建模,在各种不同情况下它都可以准确地检测出运动目标。因此对于固定摄像头的情形,目前大多数的跟踪算法中都采用背景减算法来进行目标检测。背景减算法的局限性在于它需要一个静态的固定摄像头。

(二)运动场

光流法

光流估计的方法都是基于以下假设:图像灰度分布的变化完全是目标或者场景的运动引起的,也就是说,目标与场景的灰度不随时间变化。这使得光流方法抗噪声能力较差,其应用范围一般局限于目标与场景的灰度保持不变这个假设条件下。另外,大多数的光流计算方法相当复杂,如果没有特别的硬件装置,其处理速度相当慢,达不到实时处理的要求。

二.目标跟踪

1.区域与区域匹配

这种算法的优点在于当目标未被遮挡时,跟踪精度非常高,跟踪非常稳定。但其缺点首先是费时,当搜索区域较大时情况尤其严重;其次,算法要求目标变形不大,且不能有太大遮挡,否则相关精度下降会造成目标的丢失。

2.特征点(关键点)跟踪

KLT:Shi和Tomasi 在1994年提出的KLT 跟踪算法是一种被广泛应用的基于特征点跟踪算法。由于特征点分布在整个目标上,因此即使有一部分被遮挡,仍然可以跟踪到另外一部分特征点,这也是基于特征点跟踪算法的优点。

基于特征点的跟踪算法中,比较困难的问题是当目标发生旋转或者被遮挡时,如何准确地完成特征点的提取、保存、删除等工作

3.基于主动轮廓的跟踪算法

主动轮廓模型也称为Snake 模型,这种方法能较精确地跟踪上目标的轮廓。Snake 模型非常适合可变形目标的跟踪,如对运动细胞的跟踪。这种模型与卡尔曼滤波相结合能够更好地进行跟踪。Snake模型比较适合单目标的跟踪,对于多目标跟踪更多地是采用基于水平集(Level Set)方法的主动轮廓模型

4.光流

Lucas-Kanade稀疏光流calcOpticalFlowPyrLK(利用金字塔)

Horn-Schunck稠密光流calcOpticalFlowHS

稠密光流需要很大的计算量,OpenCV中对此方法做了简化,即对前后连续帧的一个像素的邻域进行匹配,这种方法叫块匹配。

稀疏光流需要在跟踪之前指定一组点,如果这些点具有某些明显特征,那么跟踪就会相对稳定和可靠。可见,其运算量比稠密光流要小很多。

首先利用goodFeaturesToTrack函数得到图像中的强边界作为跟踪的特征点,接下来要调用calcOpticalFlowPyrLK函数,输入两幅连续的图像,并在第一幅图像里选择一组特征点,输出为这组点在下一幅图像中的位置。再把得到的跟踪结果过滤一下,去掉不好的特征点。再把特征点的跟踪路径标示出来。

(实际效果一般)

5.mean-shift和 camshift

Mean-shift优缺点

meanShift算法用于视频目标跟踪时,采用目标的颜色直方图作为搜索特征,通过不断迭代meanShift向量使得算法收敛于目标的真实位置,从而达到跟踪的目的。

传统的meanShift算法在跟踪中有几个优势:

(1)算法计算量不大,在目标区域已知的情况下完全可以做到实时跟踪;

(2)采用核函数直方图模型,对边缘遮挡、目标旋转、变形和背景运动不敏感。

同时,meanShift算法也存在着以下一些缺点:

(1)缺乏必要的模板更新;

(2)跟踪过程中由于窗口宽度大小保持不变,当目标尺度有所变化时,跟踪就会失败;

(3)当目标速度较快时,跟踪效果不好;

(4)直方图特征在目标颜色特征描述方面略显匮乏,缺少空间信息;

由于其计算速度快,对目标变形和遮挡有一定的鲁棒性,所以,在目标跟踪领域,meanShift算法目前依然受到大家的重视。但考虑到其缺点,在工程实际中也可以对其作出一些改进和调整;例如:

(1)引入一定的目标位置变化的预测机制,从而更进一步减少meanShift跟踪的搜索时间,降低计算量;

(2)可以采用一定的方式来增加用于目标匹配的“特征”;

(3)将传统meanShift算法中的核函数固定带宽改为动态变化的带宽;

(4)采用一定的方式对整体模板进行学习和更新;

CamShift算法

CamShift算法的全称是"ContinuouslyAdaptive Mean-SHIFT",即:连续自适应的MeanShift算法。其基本思想是对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果(即搜索窗口的中心位置和窗口大小)作为下一帧MeanShift算法的搜索窗口的初始值,如此迭代下去。简单点说,meanShift是针对单张图片寻找最优迭代结果,而camShift则是针对视频序列来处理,并对该序列中的每一帧图片都调用meanShift来寻找最优迭代结果。正是由于camShift针对一个视频序列进行处理,从而保证其可以不断调整窗口的大小,如此一来,当目标的大小发生变化的时候,该算法就可以自适应地调整目标区域继续跟踪。

在OpenCV自带的camShift的例子当中,是通过计算目标在HSV空间下的H分量直方图,通过直方图反向投影得到目标像素的概率分布,然后通过调用OpenCV的CAMSHIFT算法,自动跟踪并调整目标窗口的中心位置与大小。该算法对于简单背景下的单目标跟踪效果较好,但如果被跟踪目标与背景颜色或周围其它目标颜色比较接近,则跟踪效果较差。另外,由于采用颜色特征,所以它对被跟踪目标的形状变化有一定的抵抗能力。 

OpenCV自带例子中的camShift算法,可以分为三个部分:

A、计算色彩投影图(反向投影):

(1)为了减少光照变化对目标跟踪的影响,首先将图像从RGB颜色空间转换到HSV颜色空间;

(2)对H分量进行直方图统计,直方图代表了不同H分量取值出现的概率,或者说可以据此查找出H分量的大小为x时的概率或像素个数,即,得到颜色概率查找表;

(3)将图像中每个像素的值用其颜色出现的概率进行替换,由此得到颜色概率分布图;

以上三个步骤称之为反向投影,需要提醒的是,颜色概率分布图是一个灰度图像;

B、meanShift寻优

前面提到过meanShift算法(http://blog.csdn.net/carson2005/article/details/7337432)是一种非参数概率密度估计方法,它通过不断迭代计算得到最优搜索窗口的位置和大小。

C、camShift跟踪算法

前面提到,camShift其实就是在视频序列的每一帧当中都运用meanShift,并将上一帧的meanShift结果作为下一帧的初始值,如此不断循环迭代,就可以实现目标的跟踪了。

6.kalman滤波(预估器)

转:http://blog.csdn.net/loadstar_kun/article/details/8599327

时间: 2024-08-11 03:27:15

【转】 运动目标检测跟踪主流算法的相关文章

运动目标检测跟踪各过程算法综述

运动目标检测跟踪各过程算法综述 图像预处理数字图像中的几种典型噪声有:高斯噪声来源于电子电路噪声和低照明度或高温带来的传感器噪声:椒盐噪声类似于随机分布在图像上的胡椒和盐粉微粒,主要由图像切割引起或变换域引起的误差:加性噪声是图像在传输中引进的信道噪声.一般来说,引入的都是加性随机噪声,可以采用均值滤波.中值滤波.高斯滤波等方法去除噪声,提高信噪比.均值滤波在噪声分布较平均,且峰值不是很高的情况下能够得到较好的应用:中值滤波对尖脉冲噪声的滤除有较好的效果,并且能突出图像的边缘和细节:高斯滤波对滤

基于局部二值相似性模式(LBSP)的运动目标检测算法

基于局部二值相似性模式(LBSP)的运动目标检测算法 [email protected] http://blog.csdn.net/kezunhai 本文根据论文:Improving background subtraction using local binary similarity patternsWACV2014的内容及自己的理解而成,如果想了解更多细节,请参考原文.该文章思想借鉴了VIBE,其实可以理解成是VIBE+LBP算子变种(LBSP)运动目标检测算法的组合.在VIBE中,算法主

运动目标检测ViBe算法

一.运动目标检测简介   视频中的运动目标检测这一块现在的方法实在是太多了.运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测.先简单从视频中的背景类型来讨论.        静态背景下的目标检测,就是从序列图像中将实际的变化区域和背景区分开了.在背景静止的大前提下进行运动目标检测的方法有很多,这些方法比较侧重于背景扰动小噪声的消除,如:1.背景差分法2.帧间差分法3.光流法4.混合高斯模型(GMM)5.码本(codebook)还有这些方法的变种,例如三帧

静态背景下运动目标检测

前言:运动对象常用在视频监控领域,目的是从序列图像中将变化区域从背景图像中提取出来,运动区域的有效检测对目标分类.跟踪.行为理解等后期处理非常重要.根据摄像机与运动目标之间的关系可分为静态背景下的运动目标检(摄像机静止)和动态背景下的运动目标检测(摄像机也同时运动).项目中我用到的是静态背景下的运动目标检测,需通过固定摄像机检测运动物体,并完成抓取动作. 内容: 运动目标检测常用的方法一般分为两大类,一种是基于特征的方法,另一种是基于灰度的方法.基于特征的方法是依据图像的特征来检测运动目标,多用

OpenCV运动目标检测——帧间差,混合高斯模型方法

一.简单的帧间差方法 帧差法是在连续的图像序列中两个或三个相邻帧间采用基于像素的时间差分并且闽值化来提取图像中的运动区域. 代码: int _tmain(int argc, _TCHAR* argv[]) { VideoCapture capture("bike.avi"); if(!capture.isOpened()) return -1; double rate = capture.get(CV_CAP_PROP_FPS); int delay = 1000/rate; Mat

运动目标检测--改进的背景减法

一.概述 本文提出了一种改进的基于背景减法的运动目标检测算法,该算法能自适应地对背景进行初始化和实时更新,并能有效克服光照等外界条件变化对运动目标检测的影响. 二.算法介绍 基于背景减法的视频运动目标检测主要包括预处理.背景建模.目标检测和后处理四个步骤.本文的算法流程如图 1 所示,算法中的预处理是对每一帧图像都进行去噪和亮度归一化处理,以抑制光照突变和噪声的影响:背景建模则采用改进的均值滤波法自动初始化背景,并不断实时更新背景,以克服环境光照变化所产生的影响:目标检测是在背景减法的基础上采用

联合人脸检测、校准算法介绍

联合人脸检测.校准算法介绍 人脸检测(detection)在opencv中早就有直接能拿来用的haar分类器,基于Viola-Jones算法.但是毕竟是老掉牙的技术,Precision/Recall曲线渣到不行,在实际工程中根本没法给boss看,作为MSRA脑残粉,这里介绍一种MSRA在14年的最新技术:下载   [ECCV 2014] Joint Cascade Face Detection and Alignment.这篇文章直接在30ms的时间里把detection和alignment都给

对这个运动目标检测方法实现的结果A Hybrid Algorithm for Moving Object Detection

最近在做烟火检测,需要用到运动检测,看到论文A System for Video Surveillance and Monitoring中的A Hybrid Algorithm for Moving Object Detection这个方法,我用opencv将其实现,代码下面会贴出,但是其的到的结果很差,不知道代码哪里出了问题,请高手给予指点,谢谢! 左图为原图,有图为用上面论文中的方法得到前景图像,[自己的代码可能写错了,请大神们给予指点谢谢] 代码如下: #include <stdio.h>

Matlab图像序列中的运动目标检测与跟踪

对图像定位,边缘检测.图像增强对视频中的某个物体进行跟踪:比如说是飞机,导弹等~ 附件中的Matlab代码 clc; clear; % close all; %%%%%%%%%%%%%%% 读序列图像 %%%%%%%%%%% location = 'D:\ex7\';%文件夹位置 count=2; %图像帧数 % aviFileName = 'images2AVI.avi'; aviObj =avifile('image1.avi'); % aviObj =avifile('example.av