精华内容
下载资源
问答
  • 棋盘格图像角点坐标亚像素提取方法
    2021-04-18 12:52:08

    基于视觉测量的物体位姿测量系统通常要求定位系统的标定精度在mm级或以上,达到这个标定级别的关键步骤就在于摄像机标定精度的提高[1].在摄像机标定过程中黑白棋盘格模板图像内部角点的提取精度是非常重要的,因为标定的精度依赖于角点提取的精度[1-2].由于黑白棋盘格角点的特殊性,通用的算法在精确性和鲁棒性方面都存在一些问题,如SUSAN算法采用的判别标准决定其对难以区分边缘上和角点处的点,Harris算法在某些特定部位的精度有限[1-3].同时在此基础上也出现了许多检点检测的工具.其中使用最广泛的是Matlab相机标定工具箱,但它须要手动指定棋盘格标定模板的4个外角点,才能对内角点进行准确地识别和定位,自动化程度不高.所以寻求一种角点检测和定位精度较高的稳定性较好的算法是实现摄像机全自动精确标定的关键.本研究提出了一种自动识别和亚像素提取黑白平面棋盘格模板图像内部角点的方法,该方法在详细分析了棋盘格图像的局部特性基础上,建立了准确高效的改进的SUSAN角点检测算法和精确的亚像素级提取角点坐标的方法,并通过实验验证了该算法的可行性和有效性.1棋盘格图像角点特性分析角点作为一幅图像中非常的重要特征信息,在三维场景重建、运动估计、目标跟踪以及图像配准与匹配等计算机视觉领域发挥着重要的作用[2,5].通常把一幅图像当中亮度变化最为剧烈的点或者是图像边缘上曲率为极大值的点称为角点[6-7].如图1所示为原始的平面棋盘格模板图像,包括外角点和内部角点,内部角点如图2所示的圆圈区域.从图2可见:内部的角点是2个黑色和白色正方形在坐标格子处的交点,同时也是黑白格交界处的边缘点,这一特性为后续的角点提取方法的建立提供了新的思路.图1黑白棋盘格标定模板图像图图2内角点标注图像2改进的角点检测算法2.1SUSAN算法及不足SUSAN算法的原理用图3表示[8-10],在一小块黑白棋盘格图像中,假定图中所有的模板面积均为S,A点和B点处于既不是边缘也不是角点的平坦区域,USAN区域面积等于模板的面积S;D点和F点是处于边缘附近的点,但不同的是D点处USAN区域面积大于S/2但不等于S,F点的USAN区域面积小于S/2,也不等于S;E点处于外角点上,USAN区域面积是S/4;C点和G点的面积均为S/2,但C点是黑白棋盘格图像的内角点,而G点是边缘点,因此对于棋盘格图像的内角点检测来说,原始的SUSAN算法并不完全适用.图3不同位置的USAN区域面积表示2.2改进的SUSAN算法在分析黑白棋盘格图像特性以及SUSAN算法不足的基础上,从灰度阈值的选择、边缘点的检测和计算USAN区域内灰度的跳变频率三个方面来对原始的SUSAN算法进行改进.按照理论来讲,对于对比度较好的图像,要选择较大的灰度阈值,但灰度阈值选取过大,检测到的角点数目也会增加,就有可能造成误检;如果图像的对比度较小,那么选择的灰度阈值也相应变小,但较小的灰度阈值检测到的角点也较少,还有可能会漏检,所以改进的SUSAN算法先从灰度阈值的选择入手,将黑白棋盘格图像的灰度均值,即平均灰度(theaveragegrayTAG)作为阈值选择的参考,并在大量黑白棋盘格图像角点提取试验中证实1/4的TAG值将获得较大的角点提取准确度.SUSAN算法在进行黑白棋盘格内部角点检测时须要对图像中的每个像素点进行判断USAN是不是局部最小值,运算量很大,速度较慢,因此为提高效率,且通过对黑白棋盘格内部角点的特性分析发现角点一定是边缘点.所以本文先对原始的灰度图像进行边缘检测,在确定边缘之后,仅对边缘用SUSAN算法来检测黑白棋盘格图像的内部

    更多相关内容
  • 已调试通过! 实现圆形阵列标定板的椭圆圆心的亚像素提取,可针对不同标定板修改相应参数。尤其适合投影仪的标定的前期圆心坐标提取!
  • 为解决实际测量中求光条中心速度慢的问题,提出一种基于阈值法和Hessian矩阵的改进算法。...实验表明该算法能有效降低噪声对图像的影响,极大提高Hessian矩阵的求取速度,同时精度也可达到亚像素级。
  • matlab实现了边缘亚像素提取算法
  • 利用opencv的亚像素级别的边缘检测和获取,添加了原有程序的包含文件和库,可以直接调试运行,个边参数可以根据实际情形修改
  • 针对现有亚像素级边缘检测算法过于依赖图像灰度值,且计算邻域不明确等不足,提出一种改进的圆形标志中心亚像素级检测方法。利用双阈值法得到边缘的粗定位点,将坐标轴按粗定位点的梯度方向进行旋转,在新坐标系下通过...
  • 亚像素提取边缘和直线的不错文献。在卫星和遥感图像处理中有重要应用。
  • 亚像素边缘提取方法总结

    万次阅读 多人点赞 2017-04-11 10:08:37
    亚像素边缘技术概述 数字图像的边缘检测是图像分割、目标识别、区域形状提取等图像处理领域的重要基础。在进行图像理解和分析时,第一步往往是边缘检测。 1965年,L.G.Roberts最早开始系统研究边缘检测。最早提出...

            图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。图象的边缘部分集中了图象的大部分信息,图象边缘的确定与提取对于整个图象场景的识别与理解是非常重要的,同时也是图象分割所依赖的重要特征,边缘检测主要是图象的灰度变化的度量、检测和定位。

    亚像素边缘技术概述

           数字图像的边缘检测是图像分割、目标识别、区域形状提取等图像处理领域的重要基础。在进行图像理解和分析时,第一步往往是边缘检测。从广义来讲,边缘形成的是对象的轮廓,对象是视觉系统的分析主体。

          1965年,L.G.Roberts最早开始系统研究边缘检测。最早提出的是一阶微分算子,1965年L.G.Roberts提出Robert算子,随后,在Robert算子基础上人们经过改进得到的Sobel算子、Prcwitt 算子和Kirsh 算子等。但是,这些算子检测到的边缘往往不是很理想,边缘较宽,还需要进行细化处理,这样又影响到边缘的定位。在这种情况下,Laplacian 算子应运而生。这种算子利用二阶导数的过零点来检测边缘位置,所得边缘较细,不需要边缘细化,定位精确度也相应的得到了提高。我们在研究图像的边缘时,不可避免的会遇到噪声的干扰。用微分算子法可以检测图像的边缘同时也会检测到噪声,为了减少噪声的干扰,人们很自然地提出在进行边缘检测之前对图像进行适当的平滑滤波。基于这种思想Mart和Hildreth提出了LOG(Laplacian of Gaussian)算子。随着研究的进一步深入,后来Canny J F指出高斯函数的一阶导数可以近似为最优边缘检测算子,基于这种思想,提出Canny算子,这种算子具有较理想的检测标准、定位标准和单响应标准。

          上述传统的边缘检测方法的检测精度最高只能达到一个像素级,但是,随着科学技术的飞速发展,工业检测等应用对精确度的要求不断提高,传统的像素级边缘检测方法已经不能满足实际测量的需要。在此基础上,亚像素级边缘提取技术应运而生。

          亚像素是将像素这个基本单位再进行细分,它是比像素还小的单位,从而提高了图像分辨率。通常情况下,亚像素边缘点存在于图像中逐渐发生过度变化的区域,我们可以利用多项式拟合等多种方法获得边缘点的亚像素位置。亚像素定位可以理解为在摄像系统硬件条件不变的情况下,用软件算法来提高边缘检测精度的方法,或者说是一种使分辨率小于一个像素的图像处理技术。

    亚像素定位技术的应用具有一定的前提条件

    1、被检测目标不是由孤立的、单个的像素点组成,而是由多个像素点组成,且这些像素点应具有一定的分布特性,如灰度分布、几何形状分布特性等;

    2、一般情况下,不同的目标都具有各自的特征,主要包括基于目标的灰度分布特征、几何形状特征、几何与灰度耦合特征等,能够分析并利用已知的目标特征,通过对被检测目标图像的分析、识别,最后确定出目标的准确位置。在此分析定位的过程中,采用浮点运算对目标图像进行定位,得到的目标定位精度高于整像素级的定位精度。这种利用目标特性从图像中分析,计算出最符合此特征的目标位置的方法称为图像目标亚像素定位技术。

    亚像素边缘技术国内外发展现状

          目前研究的亚像素级的边缘检测算法,可以归纳为3种类型:矩方法、插值法和拟合法。

    矩方法

          矩作为数学上的完备描述,相当于原函数在新的坐标空间上的展开,即一个分段连续有界函数可用其矩族唯一表示。灰度矩边缘定位算法的基本原理是假设实际图像中的实际边缘分布与理想边缘模型的灰度矩保持一致,即矩不变。通过此关系来确定实际边缘的位置。Tabatabai等首先提出一种利用前三阶灰度矩对边缘进行亚像素边缘定位的算法 ,随后基于空间矩、Zernike正交矩的方法也相继被提出。Zernike矩的方法由于只需要计算3个模板,计算量比空间矩的方法要小得多。但是 ,这些方法都是针对理想边缘模型提出的。Shan等对矩方法进行了改进,使用了模糊边缘模型,更能真实反映边缘信息。矩方法的优点是计算简便,并且可以得到解析解。但是矩方法对图像噪声敏感,如果考虑模糊后的边缘模型,就会增加模型参数,使得解析解的确定变得十分困难。

    下面文章是介绍zernike矩方法边缘提取的:

    http://www.cnblogs.com/luo-peng/p/5171455.html

    http://blog.csdn.net/u010839382/article/details/50610459

    插值法

           插值法的核心是对像素点的灰度值或灰度值的导数进行插值,增加信息,以实现亚像素边缘检测。其中,研究比较多的方法有二次插值、B样条插值和切比雪夫多项式插值等。插值类的运算时间短,二次插值算法简单,可以通过硬件实现,适合在线检测。当光学系统的线扩散函数对称时,插值边缘检测的精度较高。插值法的特点同基于矩的方法类似,计算过程简单,但是容易受噪声的影响。

    拟合法

           拟合方法是通过对假设边缘模型灰度值进行拟合来获得亚像素的边缘定位。Nalwa等给出一种边缘模型为双曲正切函数的最小二乘拟合算法;Ye等提出的算法所用的边缘模型是理想边缘模型与高斯函数卷积得到的高斯型边缘函数。这两种算法都能提供较高的亚像素边缘定位精度。由于拟合不需要数值微分,而且按各灰度值到拟合曲线的距离最小进行拟合,不但合理地利用了有误差的灰度值,又可以减小灰度值误差的影响,因此拟合方法对噪声不敏感。但因模型复杂,其求解速度慢。

    基于改进形态学梯度和Zernike矩的亚像素边缘检测方法

           该算法先利用改进的数学形态学梯度算子进行边缘点的粗定位,在像素级上确定边缘点的坐标和梯度方向;然后再根据构造的边缘点向量和参考阈值,用Zernike矩算法对边缘点进行亚像素的重新定位,实现图像的亚像素边缘检测。这种复合的图像边缘亚像素检测算法,能够很好地融合数学形态学梯度算子及Zernike矩算法的优点,具备良好的抗噪性能与亚像素精确定位能力,其计算量相对较少,能快速实现CCD图像测量系统的亚像素边缘检测。此外,由于一般测量图像简单且对比度高,若采用适当的模板窗口,该算法可具有良好的处理效率,能够满足一般图像测量系统的实时性、亚像素精确测量要求,具备良好的应用前景。

    基于改进的形态学梯度的样条插值亚像素边缘检测方法

          此改进方法是将改进的形态学梯度滤波算子与三次样条插值法结合起来进行边缘检测,首先利用改进的数学形态学梯度滤波算子进行边缘点的粗定位,得到图像的像素级边缘;然后再利用三次样条插值法对提取出的边缘图像进行插值运算,即亚像素精定位。最后将插值后的边缘进行细化,可得到亚像素级边缘图像。

    比较经典的亚像素提取论文subpixel-precise extranction of lines and edges》,

    资源地址:http://download.csdn.net/detail/piaoxuezhong/9805093,后面找时间整理一下。

    参考:

    http://blog.csdn.net/lsh_2013/article/details/44980993

    http://blog.csdn.net/kezunhai/article/details/52248015 (亚像素级提取的例子)

    http://blog.csdn.net/augusdi/article/details/12907151/

    展开全文
  • 亚像素边缘提取程序

    2012-02-12 15:38:01
    这个是我根据论文编写的提取图像亚像素边缘的程序,有兴趣的可以看看,可以直接应用
  • 亚像素级别的边缘检测和获取/SubPixelEdgeDetection/aifeng.bmp亚像素级别的边缘检测和获取/SubPixelEdgeDetection/alf.bmp亚像素级别的边缘检测和获取/SubPixelEdgeDetection/b1.bmp亚像素级别的边缘检测和获取/...

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/aifeng.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/alf.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/b1.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/b2.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/b3.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/b4.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/chip-insp-82.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/chip-insp-83.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/chip-insp-86.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/chip-insp-89.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/chip-insp-95.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cv.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cv.hpp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cv.lib

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cv100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cvaux100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cvcam100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cvcompat.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cvtypes.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cvver.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cxcore.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cxcore.hpp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cxcore.lib

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cxcore100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cxerror.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cxts001.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/cxtypes.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Debug/ImProcess.obj

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Debug/main.obj

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Debug/SubPixelEdgeDetection.exe

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Debug/SubPixelEdgeDetection.ilk

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Debug/vc60.idb

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Debug/vc60.pdb

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/file.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/file_pat_2.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/highgui.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/highgui.lib

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/highgui100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/highgui_c.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Image05.jpg

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/img1.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/ImProcess.cpp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/ImProcess.h

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/libguide40.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/main.cpp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/ml100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/model.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/rect.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/chip-insp-95.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/cv100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/cvaux100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/cvcam100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/cxcore100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/cxts001.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/highgui100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/ImProcess.obj

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/ImProcess.sbr

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/libguide40.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/main.obj

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/main.sbr

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/ml100.dll

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/SubPixelEdgeDetection.bsc

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/SubPixelEdgeDetection.exe

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/Thumbs.db

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release/vc60.idb

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.dsp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.dsw

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.ncb

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.opt

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.plg

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.sdf

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.sln

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.suo

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.vcxproj

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.vcxproj.filters

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/SubPixelEdgeDetection.vcxproj.user

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/t3.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/t6.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/template2.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Thumbs.db

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/wafer1.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/wafer2.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/wafer3.bmp

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/wafer4.bmp

    亚像素级别的边缘检测和获取/基于亚像素的边缘提取,对于图像匹配,缺陷检测有很大帮助8SubPixelEdgeDetection.rar

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/ipch/subpixeledgedetection-24f7be1

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Debug

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/ipch

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection/Release

    亚像素级别的边缘检测和获取/SubPixelEdgeDetection

    亚像素级别的边缘检测和获取

    展开全文
  • 亚像素边缘提取算法

    2014-08-17 20:47:07
    这是MATLAB的亚像素边缘提取程序,经过我的验证,能够实现相应的功能。
  • 在现实世界中,角点...一提到角点检测,最常用的方法莫过于Harris角点检测,opencv中也提供了Harris角点检测的接口,即cornerHarris(),但是Harris角点检测存在很多缺陷(如角点是像素级别的,速度较慢等),open...

    在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。从图像分析的角度来定义角点可以有以下两种定义:

    1. 角点可以是两个边缘的角点;
    2. 角点是邻域内具有两个主方向的特征点;

    一提到角点检测,最常用的方法莫过于Harris角点检测,opencv中也提供了Harris角点检测的接口,即cornerHarris(),但是Harris角点检测存在很多缺陷(如角点是像素级别的,速度较慢等),opencv中有另一个功能更为强大的函数—goodFeaturesToTrack(),它不仅支持Harris角点检测,也支持Shi Tomasi算法的角点检测。但是,该函数检测到的角点依然是像素级别的,若想获取更为精细的角点坐标,则需要调用cv::cornerSubPix()函数进一步细化处理,即亚像素。

     Harris角点

     基本原理

          人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一些方向上没有发生变化,那么,窗口内的图像可能就是一条直线的线段。

     

    Harris角点算法实现

    根据上述讨论,可以将Harris图像角点检测算法归纳如下,共分以下五步:

     

    上式中,

     

    注意:重点来了: 该系数矩阵的对角线上的元素是 一阶求导再平方,而不是二阶求导啊, 这个很容易搞错

    M(x,y)的特征值由\lambda _{1}\lambda _{2}组成,特征值\lambda _{1}\lambda _{2}与图像中的角点、直线(边缘)和平面之间的关系如下图所示。分为三种情况:

    • 图像中的直线。一个特征值大,另一个特征值小,λ1≫λ2或λ2≫λ1。自相关函数值在某一方向上大,在其他方向上小。
    • 图像中的平面。两个特征值都小,且近似相等;自相关函数数值在各个方向上都小。
    • 图像中的角点。两个特征值都大,且近似相等,自相关函数在所有方向都增大。

    1增大阈值,检测到的角点会减少;

    2增大α的值,将减小角点响应值R,降低角点检测的灵性,减少被检测角点的数量;减小α值,将增大角点响应值R,增加角点检测的灵敏性,增加被检测角点的数量。

    3同时邻域的大小也会影响角点的检测。

    from:http://www.cnblogs.com/ronny/p/4009425.html

    Harris的OpenCV接口

    cornerHarris 函数用于在OpenCV中运行Harris角点检测算子处理图像。和cornerMinEigenVal( )以及cornerEigenValsAndVecs( )函数类似,cornerHarris 函数对于每一个像素(x,y)在blockSize*blockSize邻域内,计算2x2梯度的协方差矩阵M(x,y),接着它计算如下式子:

     

    void cornerHarris( InputArray src, OutputArray dst, int blockSize,
                                    int ksize, double k,
                                    int borderType=BORDER_DEFAULT );
    • src – 输入的单通道8-bit或浮点图像。
    • dst – 存储着Harris角点响应的图像矩阵,大小与输入图像大小相同,是一个浮点型矩阵。
    • blockSize – 邻域大小。
    • apertureSize – 扩展的微分算子大。
    • k – 响应公式中的,参数αα。
    • boderType – 边界处理的类型

    该接口很少使用,一般我们使用goodFeaturesToTrack函数:

    	void cv::goodFeaturesToTrack(
    		cv::InputArray image, // 输入图像(CV_8UC1 CV_32FC1)
    		cv::OutputArray corners, // 输出角点vector
    		int maxCorners, // 最大角点数目
    		double qualityLevel, // 质量水平系数(小于1.0的正数,一般在0.01-0.1之间)
    		double minDistance, // 最小距离,小于此距离的点忽略
    		cv::InputArray mask = noArray(), // mask=0的点忽略
    		int blockSize = 3, // 使用的邻域数
    		bool useHarrisDetector = false, // false ='Shi Tomasi metric'
    		double k = 0.04 // Harris角点检测时使用
    	);
    

    第一个参数是输入图像(8位或32位单通道图)。

    第二个参数是检测到的所有角点,类型为vector或数组,由实际给定的参数类型而定。如果是vector,那么它应该是一个包含cv::Point2f的vector对象;如果类型是cv::Mat,那么它的每一行对应一个角点,点的x、y位置分别是两列。

    第三个参数用于限定检测到的点数的最大值。

    第四个参数表示检测到的角点的质量水平(通常是0.10到0.01之间的数值,不能大于1.0)。

    第五个参数用于区分相邻两个角点的最小距离(小于这个距离得点将进行合并)。

    第六个参数是mask,如果指定,它的维度必须和输入图像一致,且在mask值为0处不进行角点检测。

    第七个参数是blockSize,表示在计算角点时参与运算的区域大小,常用值为3,但是如果图像的分辨率较高则可以考虑使用较大一点的值。

    第八个参数用于指定角点检测的方法,如果是true则使用Harris角点检测,false则使用Shi Tomasi算法。

    第九个参数是在使用Harris算法时使用,最好使用默认值0.04。

     上面我们提到Shi Tomasi算法,与Harris角点检测的区别主要是阈值标准不一样。Harris角点采用det(M)-α*trace(M)^2;而Shi Tomasi算法采用min(λ2,λ1),与阈值进行比较。

    亚像素角点检测

        前面已经提及goodFeaturesToTrack()提取到的角点只能达到像素级别,获取的角点坐标是整数,但是通常情况下,角点的真实位置并不一定在整数像素位置,因此为了获取更为精确的角点位置坐标,需要角点坐标达到亚像素(subPixel)精度。这时,我们则需要使用cv::cornerSubPix()对检测到的角点作进一步的优化计算,可使角点的精度达到亚像素级别。举例说明,已知得到角点坐标为(20,30),经过亚像素检测,得到新的坐标(19.329,30.512),使用亚像素角点检测后角点的精细度确实得到了显著的提升。

    原理解析

           在亚像素级精度的角点检测算法中,一种方法是从亚像素角点到周围像素点的矢量应垂直于图像的灰度梯度这个观察事实得到的,通过最小化误差函数的迭代方法来获得亚像素级精度的坐标值。

     

    如上图所示,假设一个起始角点q在实际亚像素角点附近。p点在q点附近的邻域中,若p点在均匀区域内部,则p点的梯度为0;若p点在边缘上,则p点的梯度方向垂直边缘方向。如果向量q-p方向与边缘方向一致,那么q-p向量与p点的梯度向量点积运算结果为0。在初始角点(初始角点可能不在边缘上)附近我们可以收集很多组点的梯度以及相关向量q-p,此时的q就是我们所要求的更精确角点位置,那么每一组的向量点积设置为0,正是基于这个思想,将点积为0的等式组合起来形成一个系统方程,该系统方程的解就是更精确的亚像素角点位置。 将新的q点作为区域的中心,可以继续使用这个方法进行迭代,获得很高的精度。
    from:https://blog.csdn.net/weixin_41695564/article/details/79991733

    亚像素角点的求法

    1、求出角点的下一步往往需要求亚像素点。即,从一个整数坐标,求出一 个小数坐标。从科学上来讲,精度提高了。——“精确到了小数点后 X 位”。

    2 解答

    2.1 如何从整数算出小数? 图像本来都是像素点,用整数来表达坐标最自然。为什么会有小数坐标 呢?这其实是引入数学手段,进行计算的结果。那是什么数学方法呢?最小 二乘法

    2.2 如何构造方程 最小二乘法需要得到 Xβ = y,才有方程可解。在亚像素角点的求解中, 列方程用到了“垂直向量,乘积为 0”这一性质。 那是哪两个向量相乘呢?看图:

       

     

    原理截图来自:https://xueyayang.github.io/pdf_posts/%E4%BA%9A%E5%83%8F%E7%B4%A0%E8%A7%92%E7%82%B9%E7%9A%84%E6%B1%82%E6%B3%95.pdf 

    函数原型如下:

    	void cv::cornerSubPix(
    		cv::InputArray image, // 输入图像
    		cv::InputOutputArray corners, // 角点(既作为输入也作为输出)
    		cv::Size winSize, // 区域大小为 NXN; N=(winSize*2+1)
    		cv::Size zeroZone, // 类似于winSize,但是总具有较小的范围,Size(-1,-1)表示忽略
    		cv::TermCriteria criteria // 停止优化的标准
    	);
    

    第一个参数是输入图像,和cv::goodFeaturesToTrack()中的输入图像是同一个图像。
    第二个参数是检测到的角点,即是输入也是输出。

    第三个参数是计算亚像素角点时考虑的区域的大小,大小为NXN; N=(winSize*2+1)。

    第四个参数作用类似于winSize,但是总是具有较小的范围,通常忽略(即Size(-1, -1))。

    第五个参数用于表示计算亚像素时停止迭代的标准,可选的值有cv::TermCriteria::MAX_ITER 、cv::TermCriteria::EPS(可以是两者其一,或两者均选),前者表示迭代次数达到了最大次数时停止,后者表示角点位置变化的最小值已经达到最小时停止迭代。二者均使用cv::TermCriteria()构造函数进行指定。

    源码分析可参考:OpenCV亚像素角点cornerSubPixel()源代码分析

    实例:

    	cv::Mat image_color = cv::imread("image.jpg", cv::IMREAD_COLOR);
     
    	//用于绘制亚像素角点
    	cv::Mat image_copy = image_color.clone();
    	//使用灰度图像进行角点检测
    	cv::Mat image_gray;
    	cv::cvtColor(image_color, image_gray, cv::COLOR_BGR2GRAY);
     
    	//设置角点检测参数
    	std::vector<cv::Point2f> corners;
    	int max_corners = 100;
    	double quality_level = 0.01;
    	double min_distance = 10;
    	int block_size = 3;
    	double k = 0.04;
     
    	//角点检测
    	cv::goodFeaturesToTrack(image_gray,
    		corners,
    		max_corners,
    		quality_level,
    		min_distance,
    		cv::Mat(),
    		block_size,
    		false,
    		k);
     
    	//将检测到的角点绘制到原图上
    	for (int i = 0; i < corners.size(); i++)
    	{
    		cv::circle(image_color, corners[i], 5, cv::Scalar(0, 0, 255), 2, 8, 0);
    	}
     
    	//指定亚像素计算迭代标注
    	cv::TermCriteria criteria = cv::TermCriteria(
    					cv::TermCriteria::MAX_ITER + cv::TermCriteria::EPS,
    					40,
    					0.01);
     
    	//亚像素检测
    	cv::cornerSubPix(image_gray, corners, cv::Size(5, 5), cv::Size(-1, -1), criteria);
     
    	//将检测到的亚像素角点绘制到原图上
    	for (int i = 0; i < corners.size(); i++)
    	{
    		cv::circle(image_copy, corners[i], 5, cv::Scalar(0, 255, 0), 2, 8, 0);
    	}
     
    	cv::imshow("corner", image_color);
    	cv::imshow("sub pixel corner", image_copy);
     
    	cv::imwrite("corner.jpg", image_color);
    	cv::imwrite("corner_sub.jpg", image_copy);
    	cv::waitKey(0);
    	return;
    

    from:【OpenCV3】角点检测——cv::goodFeaturesToTrack()与cv::cornerSubPix()详解 

     

    展开全文
  • 【Halcon视觉】图像亚像素边缘提取

    千次阅读 2021-08-25 18:29:36
    Halcon提供了亚像素边缘提取方法,可直接获取高精度的亚像素边缘。 算子:edges_sub_pix () 亚像素边缘 *关闭窗口 dev_close_window () *打开窗口 dev_open_window (0, 0, 512, 512, 'black', WindowHandle) ...
  • 亚像素边缘提取

    2016-11-08 10:20:08
    亚像素边缘提取、matlab代码。文档里包括插值法、拟合法、基于灰度矩法、基于zernike矩法
  • Halcon图像的亚像素边缘提取

    千次阅读 2021-02-02 15:36:19
    图像的亚像素边缘提取图像的亚像素边缘提取图像的亚像素边缘提取
  • Pixel Edge Detector: an Implementation of theCanny/Devernay Algorithm》提出了一种基于canny算法进行亚像素级边缘提取的算法,并给出了网页测试demo,可以在上面载入图像进行边缘提取测试,效果不错。...
  • 基于MATLAB的Harris角点检测并精确到亚像素,有六张测试图片,两个harris角点检测matlab程序,一个harris角点精确到亚像素的文档。
  • 亚像素边缘提取综述

    千次阅读 2017-07-19 08:15:06
    1 引言  数字图像的边缘检测是图像分割、目标...传统的边缘检测方法的检测精度最高只能达到一个像素级,但是,随着科学技术的飞速发展,工业检测等应用对精确度的要求不断提高,传统的像素级边缘检测方法已经不能满
  • matlab程序,通过高斯法,重心法,中心法,hessian矩阵法实现亚像素光斑中心提取,同时可实现多光斑的亚像素中心提取。程序做了大量批注 文件中包含程序源码以及实验图片,
  • 线激光光条中心亚像素提取,使用梯度质心、亚像素插值、高斯拟合方法
  • 文章目录亚像素级别角点检测演示像素坐标检测 亚像素级别角点检测 亚像素:在生成数字图像处理时(拍照等)我们是将物理世界中连续的图像进行了离散化处理。现实世界中颜色为连续的且有无数种类,成像到像素面上每一...
  • 一种快速亚像素边缘检测算法的实现的理论,可以快速实现亚像素的算法,在时间上有一定的优势,先看理论,然后自己通过理论用C++实现
  • 使用边缘检测算子提取亚像素轮廓; 根据得到的真实边缘,进步处理和计算所需的线、弧、圆等; 现学现用:检测圆 处理思路:1. 根据以上所讲套路,求得外边缘轮廓;  2. 根据所得轮廓,拟合圆;...
  • 亚像素边缘提取的例子

    万次阅读 2016-08-19 10:05:50
    求帮忙下载: ... pkma75 资源积分:1分 ...备注:pdf格式,用曲线拟合的方法计算亚像素,编程易实现,具有较强的实用价值   2.http://download.csdn.net/detail/kuailechengzi/4408229 上 传 者:kuailec
  • 亚像素 面阵摄像机的成像面以像素为最小单位。例如某CMOS摄像芯片,其像素间距为5.2微米。摄像机拍摄时,将物理世界中连续的图像进行了离散化处理。到成像面上每一个像素点只代表其附近的颜色。至于“附近”到...
  • 修改过的亚像素边缘检测修改过的亚像素边缘检测修改过的亚像素边缘检测
  • 1 引言 基于单平面模板的摄像机自标定是当前应用比较广泛的摄像机标定方法,只需要摄像机从不同方向拍摄3幅用于标定的图像(棋盘格),提取出其中的角点,根据其与平面模板间的关系,确定单应性矩阵,便可以计算出摄像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,286
精华内容 2,114
关键字:

亚像素提取