运动目标追踪实现(opencv3)(二)

article/2025/5/7 9:48:32

运动目标的追踪

最近刚开始做目标追踪,理解的还不成熟,博客有错处,欢迎在评论区指出。

有许多博主实现追踪用的卡尔曼方法,具体原理可以看一下这个 :http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/

这个https://blog.csdn.net/heyijia0327/article/details/17487467#commentBox

这个图很清楚的能讲明白了。 

另外,从大的角度去讲,针对跟踪有三种跟踪算法,分别是:点跟踪,核跟踪,轮廓跟踪。

点跟踪:

这类方法通常在连续帧中检测到的目标被表达为点。再引入其它方法来进行目标检测。其问题可以用帧与帧之间检测到的目标点之间的关系来表达。方法可分为两大类:确定性方法和统计性方法。前者通常用定性的运动限制方法,后者用目标检测和不确定性的建模来建立关联。(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中的函数,高斯混合模型提取前景,经过简单的处理得到轮廓和质心,再加上卡尔曼函数实现的。网上代码一大堆,有需要的可以可以提供。

 

 

 


http://chatgpt.dhexx.cn/article/493tX8S8.shtml

相关文章

计算机竞赛 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是…

人员离岗自动识别系统 基于opencv架构

人员离岗自动识别系统通过opencvyolo网络机器学习模型,对现场人员离岗行为自动识别检测。如果监测到人员离岗立即抓拍预警。YOLO系列神经网络通过合理的设计,成功地将目标检测问题转化为回归问题,因而直接通过网络产生物体的位置和所属类别信…

马腾宇:AI 学界一颗冉冉升起的新星

2020-02-23 17:11 导语:追求long-term impact! 本科毕业于清华姚班,博士毕业于普林斯顿大学,如今年仅31岁的马腾宇,作为 AI 学界的一颗新星正冉冉升起。 马腾宇目前担任斯坦福大学助理教授,其主要研究兴…

c++_opencv的人脸识别起步三训练自己的模型

目录 1、Creating the CSV File2、读取CSV文件函数3、开始训练模型4、程序 1、Creating the CSV File 照片需要在程序中读取它,我决定使用CSV文件读取它。一个CSV文件包含文件名,紧跟一个标签。 /path/to/image.ext;0假设/path/to/image.ext是图像&…

201819101001 张佳兴

@[TOC]九九乘法表 累乘 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,…

OpenCV(五)——运动目标识别

课程一览: 目录 1.摄像头调用 2.视频的读取与保存 3.帧差法 4.光流法 5.背景减除法

Python-中北大学人工智能OpenCV人脸识别(根据图片训练数据,根据训练好的数据识别人脸)

文章目录 1. 根据训练照片训练数据模型2. 根据训练的数据文件,进行人脸识别 1. 根据训练照片训练数据模型 训练流程: 读取文件夹下的所有文件,使用PIL 库中的Image方法打开图片,并将其转化为灰度图片。加载人脸数据分类器&#x…

李腾飞 java_黑马师资团队之【李腾飞老师】

本帖最后由 火影七代目 于 2017-8-4 16:48 编辑 李腾飞老师在北京传智JavaEE就业254期又一次的创新了数据, 这也体现出来飞哥对学员真心的对待和耐心的授课, 看到下面的话语,也是学员对飞哥的恋恋不舍李腾飞老师在254期评分很高,得…

基于openCV的车牌识别(模板匹配)python版

利用提供的模板进行车牌识别: 模板: 测试数据: 整体思路分为3个步骤:①将图像中车牌位置截取出来;②将车牌安照字符进行分割;③对分割好的字符图像进行模板匹配。实验基于jupyter进行,具体代码…

OpenCV-顶帽运算(TOPHAT)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 原理 形态学是图像处理中常见的名词,图像处理的形态学基本属于数学形态学的范畴,是一门建立在格论和拓扑…

小白都能学会的python+opencv,带你从人脸识别做到车牌识别,成为别人口中赞叹的高手!

一.第一步,对于小白来说,用什么编辑很难选择,怎么下载免费的编辑器也不会,会用电脑下载的又总是被下载许多附带的垃圾软件,这个问题让我来解决,这里我们首先需要安装两个软件以及配置一个pip豆瓣源&#xf…

基于VS与OpenCV的模板匹配学习(2):边缘匹配+图像金字塔

基于VS与OpenCV的模板匹配学习(2) 边缘模板匹配图像金字塔 基于C与OpenCV的模板匹配学习(1)OpenCV matchTemplate()示例 文章目录 基于VS与OpenCV的模板匹配学习(2)边缘模板匹配图像金字塔前言一、边缘检…

Struts2的基本流程的详细介绍

Struts2的基本流程 10级学员 张帅鹏课堂笔记 概述: Struts2框架由三部分构成:核心控制器、业务控制器和用户实现的业务逻辑组件。在这三部分中,struts2框架提供了核心控制器StrutsPrepareAndExecuteFilter,而用户需要实现业务控…

jQuery插件autoComplete介绍(10级学员 张帅鹏总结)

jQuery插件autoComplete介绍 概述:AutoComplete为自动填充,展示之意。用户在使用文本框搜索信息时,使用插件的autoplete方法绑定文本框。当在文本框中输入某个字符时,通过该方法中的指定的数据URL,返回相匹配的数据&a…

C语言 编写Vector方法

Vector是一个单口进出的数组结构有一点像栈的结构。 首先建立这样一个结构体,里面包含一个数组以及一个位置标记,数组来存放进入的元素,标记指向尾部最后一个没有存放东西的数组位置。当然数组元素可以自定义为任何格式,甚至也可…

多组数据的输入方法(c语言实现)

先说方法之前先来浅聊一下scanf 开始进入正题 1.EOF法 EOF(end of file)就是文件的结束&#xff0c;通常来判断文件的操作是否结束的标志。 EOF不是特殊字符&#xff0c;而是定义在头文件<stdio.h>的常量&#xff0c;等于-1&#xff1b; 就如牛客网上的一道题为例&…

c语言:数组插入处理

规定输入9个元素&#xff0c;排序后&#xff0c;再输入一个数要求按原来排序的规律将它插入数组中。 初始化数组函数&#xff1a; void assign_value_to_array(int val[])//数组赋值 {int star;//数组开始位printf("请输入%d个数&#xff1a;",num);for(star0;star&…

电子测量——用C语言设计测量数据误差处理的通用程序

题目要求 参考例2-2-6的解题过程&#xff0c;用C语言或MATLAB设计测量数据误差处理的通用程序&#xff0c;要求如下&#xff1a; &#xff08;1&#xff09;提供测试数据输入、粗大误差判别准则选择等的人机界面&#xff1b; &#xff08;2&#xff09;编写程序使用说明&#…

c语言区简单数据类型,c语言简单数据类型有哪些

c语言中简单的数据类型分别为&#xff1a;1、整型【int、short、long、long long】&#xff1b;2、浮点型【float&#xff0c;double】&#xff1b;3、字符型【char】。 c语言中简单的数据类型分别为&#xff1a; 1、整(数)型int&#xff1a;基本整数型&#xff0c;用于存储整数…

C语言-基本数据类型

C语言中有3种基本数据类型&#xff0c;分别是整型、字符型和实型&#xff08;浮点型&#xff09;&#xff0c;下表列出的是32位平台数据类型的长度及其取值范围 类别名称类型名数据长度取值范围整型[有符号]整型[signed] int32位-2147483648~2147483647(-2^31 ~ 2^31-1)[有符号…