OpenCv目标跟踪_cvGoodFeaturesToTrack()寻找角点

在OpenCv中提供了两种实现目标跟踪的关键算法,LK算法和HS算法,也就是通常所说的稀疏光流和稠密光流。

寻找角点

角点,其实也就是一幅图像中,容易被跟踪的特征点,通常来说,这个点在两个正交方向上都有明显的倒数,该点在图像中我们认为是独一无二的。

从直观上讲,角点是一类有足够信息并且能够从当前帧和下一帧都能提取出来的点。

关于角点的定义,是由Harris提出的,其基础是图像灰度强度的二阶导数矩阵 。该定义的角点位于图像二阶导数的自相关矩阵中有两个最大特征值的地方,这本质上表示以此点为中心周围存在至少两个不同方向的边缘。实际上一个角点也就是由两个不同方向的边缘相交而成的。而且,采用二阶导数是因为它对图像的均匀梯度不产生相应(梯度是一阶导数而来,如果一阶导数为均匀的,则二阶导数为0)。

函数cvGoodFeaturesToTrack()

void cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, CvArr* temp_image,
CvPoint2D32f* corners, int* corner_count,
double quality_level, double min_distance,
const CvArr* mask=NULL );

在这个函数中,输入图像image必须是8位或者是32位,也就是IPL_DEPTH_8U 或者是 IPL_DEPTH_32F 单通道图像。

第二和第三个参数是大小与输入图像相同的32位单通道图像。

参数 temp_image 和 eig_image 在计算过程中被当做临时变量使用,计算结束后eig_image中的内容是有效的。特别的,每个函数包含了输入图像中对应的最小特征值。

corners 是函数的输出,为检测到 32位(CvPoint2D32f)的角点数组,在调用 cvGoodFeaturesToTrack 函数之前要为该数组分配内存空间。

corner_count 表示可以返回的最大角点数目,函数调用结束后,其返回实际检测到的角点数目。

quality_level 表示一点呗认为是角点的可接受的最小特征值,实际用于过滤角点的最小特征值是quality_level与图像汇总最大特征值的乘积,所以quality_level的值不应该超过1,通常取值为(0.10或者是0.01)

检测完之后还要进一步剔除掉一些距离较近的角点,min_distance 保证返回的角点之间的距离不小于min_distance个像素

mask是可选参数,是一幅像素值为boolean类型的图像,用于指定输入图像中参与角点计算的像素点,若mask的值为NULL,值表示选择整个图像

block_size 是计算导数的自相关矩阵是指定的领域,采用小窗口计算的结果比单点(也就是block_size 为1)计算的结果要好

函数cvGoodFeaturesToTrack() 的输出结果为需找到的角点的位置数组。

时间: 2024-07-30 10:17:52

OpenCv目标跟踪_cvGoodFeaturesToTrack()寻找角点的相关文章

目标跟踪之粒子滤波---Opencv实现粒子滤波算法

目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方面的问题.所以本次的代码与前几次改变比较小.当然这些code基本也是参考网上的.代码写得很不规范,时间不够,等以后有机会将其优化并整理成类的形式.)              Opencv实现粒子滤波算法            摘要 本文通过opencv实现了一种目标跟踪算法——粒子滤波算法,算法的

寻找目标跟踪算法(1)

目标跟踪算法 从知乎的一个帖子开始 计算机视觉中,目前有哪些经典的目标跟踪算法?(https://www.zhihu.com/question/26493945) 跟踪算法比较 Visual Tracker Benchmark:http://www.visual-tracking.net/ 经典算法: Mean-shift, Particle Filter, Ensemble Tracking,TLD, 压缩感知跟踪,KCF Tracker及其改进 KCF(opencv里集成了) http://

目标跟踪学习笔记_1(opencv中meanshift和camshift例子的应用)

在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行opencv中给的sample并稍加修改. Camshift函数的原型为:RotatedRect CamShift(InputArray probImage, Rect& window, TermCriteria criteria). 其中probImage为输入图像直方图的反向投影图,window为要

opencv学习之基于背景提取等目标跟踪算法#20190704

/* *********************************************************************************************************************** 任务目标: 基于背景提取的目标跟踪算法实践及代码分析. ***************************************************************************************************

计算机视觉目标跟踪的算法分类

摘自百度百科............. (1)基于区域的跟踪算法 基于区域的跟踪算法基本思想是:将目标初始所在区域的图像块作为目标模板,将目标模板与候选图像中所有可能的位置进行相关匹配,匹配度最高的地方即为目标所在的位置.最常用的相关匹配准则是差的平方和准则,(Sum of Square Difference,SSD). 起初,基于区域的跟踪算法中所用到的目标模板是固定的,如 Lucas 等人提出 Lucas-Kanade 方法,该方法利用灰度图像的空间梯度信息寻找最佳匹配区域,确定目标位置.之

目标跟踪之模板匹配---简单的模板匹配

一.概述 目标跟踪是计算机视觉领域的一个重要分支.研究的人很多,近几年也出现了很多很多的算法.大家看看淋漓满目的paper就知道了.但在这里,我们也聚焦下比较简单的算法,看看它的优势在哪里.毕竟有时候简单就是一种美. 在这里我们一起来欣赏下“模板匹配”这个简单点的跟踪算法.它的思想很简单,我们把要跟踪的目标保存好,然后在每一帧来临的时候,我们在整个图像中寻找与这个目标最相似的,我们就相信这个就是目标了.那如何判断相似呢?就用到了一些相关性的东西了,这个在我之前的一篇博文里面介绍过,大家可以参考下

最简单的目标跟踪(模版匹配)

一.概述 目标跟踪是计算机视觉领域的一个重要分支.研究的人很多,近几年也出现了很多很多的算法.大家看看淋漓满目的paper就知道了.但在这里,我们也聚焦下比较简单的算法,看看它的优势在哪里.毕竟有时候简单就是一种美. 在这里我们一起来欣赏下“模板匹配”这个简单点的跟踪算法.它的思想很简单,我们把要跟踪的目标保存好,然后在每一帧来临的时候,我们在整个图像中寻找与这个目标最相似的,我们就相信这个就是目标了.那如何判断相似呢?就用到了一些相关性的东西了,这个在我之前的一篇博文里面介绍过,大家可以参考下

目标跟踪之光流法---光流法简单介绍

光流的概念是Gibson在1950年首先提出来的.它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法.一般而言,光流是由于场景中前景目标本身的移动.相机的运动,或者两者的共同运动所产生的.其计算方法可以分为三类: (1)基于区域或者基于特征的匹配方法: (2)基于频域的方法: (3)基于梯度的方法: 简单来说,光流是空间运动物体在观测成像平面上的像素运

目标跟踪算法综述

转自  https://www.zhihu.com/question/26493945 作者:YaqiLYU 第一部分:目标跟踪速览 先跟几个SOTA的tracker混个脸熟,大概了解一下目标跟踪这个方向都有些什么.一切要从2013年的那个数据库说起..如果你问别人近几年有什么比较niubility的跟踪算法,大部分人都会扔给你吴毅老师的论文,OTB50和OTB100(OTB50这里指OTB-2013,OTB100这里指OTB-2015,50和100分别代表视频数量,方便记忆): Wu Y, L