亚像素角点

Harris 角点定义为一个邻域内存在两个正交方向上梯度变化较大的点。

作 xy 平面上的二维函数,使用自相关函数可描述图像上一固定点在任意方向上的灰度变化;然后利用泰勒级数展开自相关函数,即可将其转换为矩阵特征值问题(参考博文 "光流跟踪")。

在某些应用中(如视觉测量),想获得更加精确的角点定位,可使用角点亚像素算法实现。

在提取亚像素边缘时,可以通过数学建模(最小二乘法)来描述边缘方向上一阶导数曲线,该曲线为一个二次函数;然后找到数学模型的最值点即为亚像素边缘位置。

对于 Harris 角点,考察 角点邻域内点 p 的梯度向量,p点与初始角点 q 构成的向量 ,在理想情况下,发现两向量点积均为 0。具体来说:

1)当 p 点位于平坦区域内,p 的梯度向量为 0,两向量点积为 0;

2)当 p 点位于边缘上,p 的梯度向量于向量 qp 正交,两向量点积仍然为 0。

如上图所示,将 q 点坐标当作未知量,通过解方程组即可求得更加精确的角点坐标。一旦求解到新的角点坐标,可以使用新的角点坐标位起点,按同样方法建立方程组,迭代求解,直到精度满足要求。

在实际应用中,当考察点离参考角点 q 较近时,角点附近点存在两个方向梯度,故合成梯度方向与 qp 边缘基本不能正交;

当考察点离参考角点 q 较远时,考察点多半位于边缘上,故考察点梯度方向与 qp 边缘基本正交;

所以,实际应用中会排除离 p 点较近的部分点,以提升线性方程组可解性。

另一方面,在平坦区域内点的梯度一般不等于 0,这会提升方程组真实解。可以设定一个梯度门限,方程组仅接收梯度门限较大值,从而提升可解性。

参考资料 Learning OpenCV 3

原文地址:https://www.cnblogs.com/luofeiju/p/12667625.html

时间: 2024-08-01 11:28:36

亚像素角点的相关文章

寻找Harris、Shi-Tomasi和亚像素角点

Harris.Shi-Tomasi和亚像素角点都是角点,隶属于特征点这个大类(特征点可以分为边缘.角点.斑点). 一.Harris角点检测是一种直接基于灰度图像的角点提取算法,稳定性较高,但是也可能出现有用信息丢失的情况. 函数:cornerHarris() void cv::cornerHarris ( InputArray  src,  //需要为8位单通道     OutputArray  dst,  //结果     int  blockSize, //领域大小     int  ksi

图像处理之角点检测与亚像素角点定位

角点是图像中亮度变化最强地方反映了图像的本质特征,提取图像中的角点可以有效提高图像处理速度与精准度.所以对于整张图像来说特别重要,角点检测与提取的越准确图像处理与分析结果就越接近真实.同时角点检测对真实环境下的对象识别.对象匹配都起到决定性作用.Harr角点检测是图像处理中角点提取的经典算法之一,应用范围广发,在经典的SIFT特征提取算法中Harr角点检测起到关键作用.通常对角点检测算法都有如下要求: 1. 基于灰度图像.能够自动调整运行稳定,检测出角点的数目. 2. 对噪声不敏感.有一定的噪声

OpenCV——Harris、Shi Tomas、自定义、亚像素角点检测

在图像处理和与计算机视觉领域,兴趣点(interest points),或称作关键点(keypoints).特征点(feature points) 被大量用于解决物体识别,图像识别.图像匹配.视觉跟踪.三维重建等一系列的问题.我们不再观察整幅图,而是选择某些特殊的点,然后对他们进行局部有的放矢的分析.如果能检测到足够多的这种点,同时他们的区分度很高,并且可以精确定位稳定的特征,那么这个方法就有使用价值. 图像特征类型可以被分为如下三种: <1>边缘 <2>角点 (感兴趣关键点) &

OpenCV中feature2D学习——亚像素级角点检测(cornerSubPix)

概述 除了利用Harris进行角点检测和利用Shi-Tomasi方法进行角点检测外,还可以使用cornerEigenValsAndVecs()函数和cornerMinEigenVal()函数自定义角点检测函数.如果对角点的精度有更高的要求,可以用cornerSubPix()函数将角点定位到子像素,从而取得亚像素级别的角点检测效果. cornerSubPix()函数 (1)函数原型 cornerSubPix()函数在角点检测中精确化角点位置,其函数原型如下: C++: void cornerSub

亚像素级角点定位

代码示例: #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace cv; using namespace std; #define WINDOW_NAME "Shi-Tom

OpenCv_cvFindCornerSubPix()查找亚像素级角点

如果我们进行图像处理的目的不是用于识别特征点而是进行稽核测量,则通常需要更高的精度,而cvGoodFeatureToTrack()只能提供简单的像素坐标值,但有时候我们会需要实际坐标值而不是证书坐标值,例如,我们想要确定图形中一个尖锐的峰值点的位置,但是峰值点的位置一般都不会位于一个像素点的正中心,,这时候就可以使用亚像素检测方法. 亚像素级角点的位置在社星际标定.跟踪并重建蛇形阿基的轨迹或者重建被跟踪目标的三维结构时就是一个基本的测量值.通过cvGoodFeaturesToTrack()函数可

OpenCV亚像素级的角点检测

亚像素级的角点检测 目标 在本教程中我们将涉及以下内容: 使用OpenCV函数 cornerSubPix 寻找更精确的角点位置 (不是整数类型的位置,而是更精确的浮点类型位置). 理论 代码 这个教程的代码如下所示.源代码还可以从 这个链接下载得到 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #inclu

亚像素边缘检测评述

转载请注明出处:http://blog.csdn.net/lsh_2013 1 引言 数字图像的边缘检测是图像分割.目标识别.区域形状提取等图像处理领域的重要基础.在进行图像理解和分析时,第一步往往是边缘检测.目前边缘检测已经成为机器视觉领域最活跃的课题之一,其研究具有非常重要的理论意义和实际应用价值.传统的边缘检测方法的检测精度最高只能达到一个像素级,但是,随着科学技术的飞速发展,工业检测等应用对精确度的要求不断提高,传统的像素级边缘检测方法已经不能满足实际测量的需要,本文重点介绍的亚像素边缘

亚像素数值极值检测算法总结

动机 在计算机视觉领域,经常需要检测极值位置,比如SIFT关键点检测.模板匹配获得最大响应位置.统计直方图峰值位置.边缘检测等等,有时只需要像素精度就可以,有时则需要亚像素精度.本文尝试总结几种常用的一维离散数据极值检测方法,几个算法主要来自论文<A Comparison of Algorithms for Subpixel Peak Detection>,加上自己的理解和推导. 问题定义 给定如下离散值,求其极值位置.可知125为观察极值. \[[60, 80, 100, 120, 125,