zoukankan      html  css  js  c++  java
  • 【转】 运动目标检测跟踪主流算法

    不全,需要慢慢补充

     一.运动目标检测

     (一)背景差

     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

  • 相关阅读:
    oracle系列--第五篇 PLSQL连接本地的Oracle数据库
    oracle系列--第四篇 Oracle的卸载
    oracle系列--第三篇 Oracle的安装
    oracle系列--第二篇 oracle下载
    WinForm多语言版本实战项目演练
    从C#垃圾回收(GC)机制中挖掘性能优化方案
    jvm内存模型和垃圾回收
    servlet匹配路径时/和/*的区别(转)
    十大经典排序算法(动图演示)(转)
    排序算法
  • 原文地址:https://www.cnblogs.com/eleclsc/p/5819049.html
Copyright © 2011-2022 走看看