在视频跟踪中,有多种局部特征可以用来跟踪。我们可以想象,如果视频背景是一张白纸,此时我们很难在下一个视频帧中找到上个视频帧中的某一点。如果,此时的背景是一张有一个黑点的白纸,那么在下一个视频中,这个黑点很容易被找到。简而言之,角点就是这个黑点。当然在实际视频处理中,角点往往不是这么清晰的容易找到。一般来说,如果某个点在两个正交的方向上都有明显的导数,则认为该点是这张视频帧中独一无二的点,也即角点。
在OpenCV中,函数cvGoodFeaturesToTrack()采用了Shi和Tomasi提出的方法,先利用sobel算子计算二阶导数,再计算特征值,它返回满足易于跟踪的一系列角点。函数定义如下:
注意:函数cvGoodFeaturesToTrack()的输出结果为角点的位置数组。
如果在实际的操作中,需要精度更高的角点坐标,此时仅仅得到像素点位置就不够了,需要得到其物理位置。这个位置成为亚像素点(或精确角点),subPix。
得到该点的OpenCV函数为:FindCornerSubPix,具体定义如下:
FindCornerSubPix
精确角点位置
void cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,
int count, CvSize win, CvSize zero_zone,
CvTermCriteria criteria );
image
输入图像.
corners
输入角点的初始坐标,也存储精确的输出坐标
count
角点数目
win
搜索窗口的一半尺寸。如果 win=(5,5) 那么使用 5*2+1 × 5*2+1 = 11 × 11 大小的搜索窗口
zero_zone
死区的一半尺寸,死区为不对搜索区的中央位置做求和运算的区域。它是用来避免自相关矩阵出现的某些可能的奇异性。当值为 (-1,-1) 表示没有死区。
criteria
求角点的迭代过程的终止条件。即角点位置的确定,要么迭代数大于某个设定值,或者是精确度达到某个设定值。 criteria 可以是最大迭代数目,或者是设定的精确度,也可以是它们的组合。
函数 cvFindCornerSubPix 通过迭代来发现具有子象素精度的角点位置,或如图所示的放射鞍点(radial saddle points)。
子象素级角点定位的实现是基于对向量正交性的观测而实现的,即从中央点q到其邻域点p 的向量和p点处的图像梯度正交(服从图像和测量噪声)。考虑以下的表达式:
εi=DIpiT•(q-pi)
其中,DIpi表示在q的一个邻域点pi处的图像梯度,q的值通过最小化εi得到。通过将εi设为0,可以建立系统方程如下:
sumi(DIpi•DIpiT)•q - sumi(DIpi•DIpiT•pi) = 0
其中q的邻域(搜索窗)中的梯度被累加。调用第一个梯度参数G和第二个梯度参数b,得到:
q=G-1•b
该算法将搜索窗的中心设为新的中心q,然后迭代,直到找到低于某个阈值点的中心位置。
PS:
继Harris提出角点以及后来的Shi个Tomasi提出角点后,许多其他类型的角点和相关局部特征也被提出来。SIFI(Scale-invariant Feature Transform)是其中应用比较广泛的类型。SIFI具有缩放不变个旋转不变的特性。目前,OpenCV没有专门的实现该特征的函数。参考文献1指出,利用OpenCV现有函数,可以实现计算机视觉领域参考文献提出的绝大部分算法(特征)。
PS:
具体实现代码(转自文献3):
==================================================================================
参考文献:
1.学习OpenCV(中文版) Gary Bradski & Adrian Kaebler著 于仕祺 刘瑞祯 译 清华大学出版社。 P351-356
2.OpenCV中文网站,http://www.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86
3.http://blog.csdn.net/sunyongbit/article/details/6335400
分享到:
相关推荐
harris算子寻找角点,并实现配准。附试验材料。
根据Harris算法 CSS算法写的一个简单图像角点检测类
棋盘图片角点 寻找并保存工具 vc 棋盘图片角点 寻找并保存工具 vc
一般实验发现,Matlab的棋盘格角点检测算法相比Opencv的棋盘格角点检测算法更加鲁棒且精确。《Automatic Camera and Range Sensor Calibration using a single Shot》一文正是Matlab角点检测的参考算法,这里是...
函数输入三角形三个点坐标,输出费马点坐标,如果三角形顶角大于120度,则输出的点在三角形外部,使用者可在主函数中自行判断是否使用该点。
改进的Harris角点检测, 该算法首先选取一个具有最大 最小特征值的点(即:max(min(e1,e2)),e1,e2是harris矩阵的特征值)作为角点,然后依次按照最大最小特征值顺序寻找余下的角点,当然和前一角点距离在容忍...
寻找R位于一定阈值之上的局部最大值,去除伪角点。 方向导数IxIx和IyIy可以使用cv2.Sobel()函数得到 Harris角点检测的结果是灰度图,图中的值为角点检测的打分值。需要选取合适的阈值对结果进行二值化来检测...
寻找角点 亚像素级角点 不变特征 光流 mean-shift和camshift跟踪 运动模板 预估器 condensation算法 练习 第11章 摄像机模型与标定 摄像机模型 标定 矫正 一次完成标定 罗德里格斯变换 练习 第12章 投影与三维视觉 ...
轮廓的匹配 练习 第9章 图像局部与分割 局部与分割 背景减除 分水岭算法 用Inpainting修补图像 均值漂移分割 Delaunay三角剖分和Voronoi 划分 练习 第10章 跟踪与运动 跟踪基础 寻找角点 亚像素级角点 不变特征 光流...
分别对两幅图寻找两幅图中的最大特征值点。然后使用你n*n的模板进行特征点匹配。调整阈值可以得到很好匹配效果。
文章目录亚像素级角点检测亚像素级角点检测APICode效果 亚像素级角点检测 1、概念; 2、API; 3、Code; 亚像素级角点检测 ...1、cornerSubPix() : 寻找亚像素角点位置(不是整数类型的位置,而是更精确的浮
寻找问题关键点,多角度合理转化——对一道解三角形模拟题的深度学习.pdf
本发明公开一种基于角点检测和非局部相 似性的视频压缩感知重构算法,具体为:对分布 式视频压缩感知多假设重构算法的非关键帧进 行块模式判别,针对小变化块采用帧间多假设重 构算法进行重构;针对大变化块首先利用...
该算法主要在定位到人眼区域的基础上,利用改进的SUSAN算法寻找圆形角点;然后根据梯度放缩计算角点向量的梯度值,最后通过筛选函数输出瞳孔中心位置及亮瞳面积,准确地定位到瞳孔,并根据亮瞳的大小定位到瞳孔区域...
Description 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 编程任务:对于给定的由n 行数字组成的数字三角形,编程计算从...
在大图中寻找小图,并定位具体坐标点,DLL文件,速度很快。 参数说明: largePic:大图 smallPic:小图 leftupX:左上角X坐标 leftupY:左上角Y坐标 rightdownX:右下角X坐标 rightdownY:右下角Y坐标 tolerance:容...
# Python粒子群优化算法 二维空间中寻找目标点Pygame可视化 该程序演示了粒子群优化(PSO)算法在二维空间中的可视化。PSO 算法模拟粒子在寻找最优解时的移动。 ## 依赖 确保你的系统上安装了 Python 和 Pygame。你...
针对图像配准对时间和精度的需求,本文提出适用于角点特征的配准算法:提取两幅图像的角点构造三角形,计算三角形的角度,寻找两幅图像对应的相似三角形,用三角形的顶点坐标求得仿射变换系数,参考图像进行仿射变换,与待...
笔试题-N*N矩阵到达对角顶点寻找最大和值的路线(Qt实现) 有n*n个格子,每个格子里有正数或者0,从最左上角往最右下角走,只能向下和向右,从A点走到B点,把所有经过的格子的数加起来,求最大值SUM