【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测

opencv学习(1)-- 角点检测 自定义角点检测是基于Harris和Shi-Tomasi角点检测,首先通过计算矩阵M得到两个特征值而获取角点响应值。然后自己设置阈值实现计算出阈值得到有效响应值的角点位置。通过进行亚像素级别的角点检测可以提高角点的检测精准度,因为角点的位置不会是一个准确的像素点。可以通过插值算法、基于图像矩计算、曲线拟合(高斯曲面、多项式、椭圆曲面) 阅读详情

角点

特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系。点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(keypoint feature),或“兴趣点”(interest point),或“角点”(conrner)。

关于角点的具体描述可以有几种:

  • 一阶导数(即灰度的梯度)的局部最大所对应的像素点;
  • 两条及两条以上边缘的交点;
  • 图像中梯度值和梯度方向的变化速率都很高的点;
  • 角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向。

 

Harris角点检测

当一个窗口在图像上移动,在平滑区域如图(a),窗口在各个方向上没有变化。在边缘上如图(b),窗口在边缘的方向上没有变化。在角点处如图(c),窗口在各个方向上具有变化。Harris角点检测正是利用了这个直观的物理现象,通过窗口在各个方向上的变化程度,决定是否为角点。

将图像窗口平移[u,v]产生灰度变化E(u,v)

由:, 得到:

对于局部微小的移动量 [u,v],近似表达为:

其中M是 2*2 矩阵,可由图像的导数求得:

E(u,v)的椭圆形式如下图:

 

定义角点响应函数 R 为:

Harris角点检测算法就是对角点响应函数R进行阈值处理:R > threshold,即提取R的局部极大值。

 

【相关代码】

OpenCV中定义了 cornerHarris 函数:

[cpp]  view plain copy
  1. void cornerHarris( InputArray src, OutputArray dst, int blockSize,  
  2.                                 int ksize, double k,  
  3.                                 int borderType=BORDER_DEFAULT );  

可以结合 convertScaleAbs 函数,通过阈值取角点:

[cpp]  view plain copy
  1. void cornerHarris_demo( int, void* )  
  2. {  
  3.   Mat dst, dst_norm;  
  4.   dst = Mat::zeros( src.size(), CV_32FC1 );  
  5.   /// Detector parameters  
  6.   int blockSize = 2;  
  7.   int apertureSize = 3;  
  8.   double k = 0.04;  
  9.   /// Detecting corners  
  10.   cornerHarris( src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT );  
  11.   /// Normalizing  
  12.   normalize( dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat() );  
  13.   convertScaleAbs( dst_norm, dst_norm_scaled );   
  14.   /// Drawing a circle around corners  
  15.   for( int j = 0; j < dst_norm.rows ; j++ )  
  16.      { for( int i = 0; i < dst_norm.cols; i++ )  
  17.           {  
  18.             if( (int) dst_norm.at<float>(j,i) > thresh )  
  19.               {   
  20.                 circle( dst_norm_scaled, Point( i, j ), 5,  Scalar(0), 2, 8, 0 );   
  21.                 circle(src,Point( i, j ), 5,  Scalar(255,0,0), -1, 8, 0 );  
  22.               }  
  23.           }   
  24.      }      
  25.   /// Showing the result  
  26.   imshow( corners_window, dst_norm_scaled );  
  27.   imshow( source_window, src );    
  28. }  

 
 

Shi-Tomasi 算法

Shi-Tomasi 算法是Harris 算法的改进。Harris 算法最原始的定义是将矩阵 M 的行列式值与 M 的迹相减,再将差值同预先给定的阈值进行比较。后来Shi 和Tomasi 提出改进的方法,若两个特征值中较小的一个大于最小阈值,则会得到强角点。

如上面第二幅图中,对自相关矩阵 M 进行特征值分析,产生两个特征值和两个特征方向向量。因为较大的不确定度取决于较小的特征值,也就是,所以通过寻找最小特征值的最大值来寻找好的特征点也就解释的通了。
Shi 和Tomasi 的方法比较充分,并且在很多情况下可以得到比使用Harris 算法更好的结果。

 

【相关代码】

由于这种Shi-Tomasi算子与1994年在文章 Good Features to Track [1]中提出,OpenCV 实现的算法的函数名定义为 goodFeaturesToTrack:

[cpp]  view plain copy
  1. void goodFeaturesToTrack( InputArray image, OutputArray corners,  
  2.                                      int maxCorners, double qualityLevel, double minDistance,  
  3.                                      InputArray mask=noArray(), int blockSize=3,  
  4.                                      bool useHarrisDetector=false, double k=0.04 );  

自定义使用函数(以方便createTrackbar的响应)如下:

[cpp]  view plain copy
  1. void cornerShiTomasi_demo( int, void* )  
  2. {  
  3.   if( maxCorners < 1 ) { maxCorners = 1; }  
  4.   /// Parameters for Shi-Tomasi algorithm  
  5.   vector<Point2f> corners;  
  6.   double qualityLevel = 0.01;  
  7.   double minDistance = 10;  
  8.   int blockSize = 3;  
  9.   bool useHarrisDetector = false;  
  10.   double k = 0.04;  
  11.   /// Copy the source image  
  12.   Mat cormat;  
  13.   /// Apply corner detection :Determines strong corners on an image.  
  14.   goodFeaturesToTrack( src_gray,   
  15.                corners,  
  16.                maxCorners,  
  17.                qualityLevel,  
  18.                minDistance,  
  19.                Mat(),  
  20.                blockSize,  
  21.                useHarrisDetector,  
  22.                k );  
  23.   /// Draw corners detected  
  24.   for( int i = 0; i < corners.size(); i++ ){   
  25.       circle( dst_norm_scaled,  corners[i], 5,  Scalar(255), 2, 8, 0 );   
  26.       circle( src, corners[i], 4, Scalar(0,255,0), 2, 8, 0 );   
  27.   }  
  28.   
  29.   /// Show what you got  
  30.   imshow( corners_window, dst_norm_scaled );  
  31.   imshow( source_window, src );    
  32. }  

 
 

实践

在主函数中定义两个进度条方便调整阈值:

[cpp]  view plain copy
  1. namedWindow( source_window, CV_WINDOW_AUTOSIZE );  
  2. createTrackbar( "Threshold: ", source_window, &thresh, max_thresh, cornerHarris_demo );  
  3. createTrackbar( "Max  corners:", source_window, &maxCorners, maxTrackbar, cornerShiTomasi_demo );    
  4.   
  5. namedWindow( corners_window, CV_WINDOW_AUTOSIZE );  
  6. namedWindow( source_window, CV_WINDOW_AUTOSIZE );  
  7. imshow( source_window, src );    
  8.   
  9. cornerHarris_demo( 0, 0 );  
  10. cornerShiTomasi_demo( 0, 0 );  


这里还需要说的是OpenCV 2.4.2中给的角点检测跟踪的示例代码有些问题,是应为SURF等不再定义在 feature2d模块中,而是legacy和nonfree,所以需要加入引用:

[cpp]  view plain copy
  1. #include "opencv2/legacy/legacy.hpp"  
  2. #include "opencv2/nonfree/nonfree.hpp"  

 

角点检测结果:

蓝色实心点为Harris检测结果,绿色空心圈为goodFeaturetoTrack检测结果。

M特征值分解后每个像素点相减的图(也就是Harris阈值判断的图)如下:

黑色实心点为Harris阈值检测结果,白色空心圈为阈值为27时Shi-Tomasi检测结果。

转载请注明出处:http://blog.youkuaiyun.com/xiaowei_cqu/article/details/7805206
源码及资料下载: http://download.youkuaiyun.com/detail/xiaowei_cqu/4466627

参考资料:

[1] Shi and C. Tomasi. Good Features to Track. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 593-600, June 1994.

[2] Richard Szeliski. Computer Vision: Algorithms and Applications. Springer, New York, 2010.

[3] 图像特征点提取PPT http://wenku.baidu.com/view/f61bc369561252d380eb6ef0.html 

 

 

Shi-Tomasi角点检测算法 文章目录Shi-Tomasi角点检测算法Shi-Tomasi概念APICode效果 Shi-Tomasi角点检测算法 1、Shi-Tomasi概念; 2、API; 3、Code; Shi-Tomasi概念 1、角点检测除了Harris角点检测算法外,还常常使用Shi-Tomasi算法,Shi-Tomasi算法是harris算法的改进,因此计算速度更快 , Shi-Tomasi算法于1994年在文章... 阅读详情

相关推荐

0037-OpenCV环境下用算法moravec、harris、Shi-Tomasi进行角点检测

角点的定义: “如果某一点在任意方向的一个微小变动都会引起灰度很大的变化,那么我们就把它称之为角点”。角点一般反应的是图像中局部最大值或最小值的孤立点,以角点为中心点的窗口向图像中的任意方向滑动,都会引起较大的灰度变化。 角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域中。 关于角点的具体...

清溪算法 436

opencv学习-几种角点检测方法

opencv几种的角点检测

wyw0000的博客 7365

计算机视觉(角点检测)- 2 - Shi-Tomasi 角点检测

计算机视觉(角点检测)- 2 - Shi-Tomasi 角点检测学习前言一、Shi-Tomasi 角点检测二、API介绍   ```corners = cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance[, corners[, mask[, blockSize[, useHarrisDetector[, k]]]]])```三、代码&效果图 学习前言   关于角点检测呢,就是检测图像中角点的算法,常见的有四种常见的

qq_40374812的博客 4366

OpenCV 之 角点检测

角点 (corners) 的定义有两个版本:两条边缘的交点,或者,邻域内具有两个主方向的特征点 从人眼来看,角点是图像亮度发生剧烈变化的点 或边缘曲线上曲率为极大值的点。例如,下图 E 和 F 便是典型的角点 1 检测思路 在图像中定义一个局部小窗口,然后沿各个方向移动这个窗口,则会出现 a) b) c) 三种情况,分别对应平坦区、边缘和角点 a) 窗口内的图像强度,在窗口向各个方向移动时,都没有发生变化,则窗口内都是 “平坦区”,不存在角...

fengweichangzi的博客 6486

几种角点检测算法实现

本科毕业论文中的角点检测 包含moravec、harris、Nobel、Shi-tomasi角点检测算法 包含拟合亚像素角点、向量点乘亚像素角点算法 此外还有矩阵的通常运算加减乘除、求逆等 程序采用opencv+Qt5 GUI

HDMI接口技术解析:从基础到应用

本文深入解析HDMI接口技术,从其发展历程、物理结构到传输原理,全面剖析HDMI如何成为影音传输的主流标准。通过对比不同版本的带宽升级和实际应用案例,展示HDMI在4K/8K视频传输中的卓越性能,并分享硬件设计中的实战经验与避坑指南。

weixin_30485379的博客 369

OpenCV —— 角点检测之 Harris 角点检测、Shi-Tomasi 角点检测、FAST 角点检测

Harris 角点检测实现原理OpenCV 函数优化GFTT 在图像处理和计算机视觉领域,兴趣点(inter points),也被称作关键点(key points)、特征点(feature points)。它被大量用于解决物体识别、图像识别、图像匹配、视觉跟踪、三维重建等一系列的问题。我们不再观察整幅图,而是选择某些特殊的点,然后对它们进行局部有的放矢地分析。如果能检测到足够多的这种点,同时它们的区分度很高,并且可以精确定位稳定的特征,那么这个方法就具有实用价值。 图像特征类型可以被分为如下三种: 边缘

学无止境 9441

深入博通PEX89000内部:那颗ARM CPU和Synthetic Mode到底能玩出什么花样?

本文深入解析博通PEX89000系列PCIe交换芯片内置的ARM CPU与Synthetic Mode技术,揭示其在AI计算和数据中心的智能潜能。通过ARM Cortex CPU的实时控制和Synthetic Mode的自治网络功能,PEX89000实现了GPU集群的动态拓扑重组和资源池化,大幅提升AI训练效率。文章还探讨了该技术在软件定义数据平面和弹性AI架构中的创新应用。

weixin_30776273的博客 209

OpenCV-Python Harris角点检测与Shi-Tomasi角点检测

OpenCV-Python Harris角点检测与Shi-Tomasi角点检测

m0_37302966的博客 1231

Keystone变换(4)MATLAB仿真

关于Keystone变换三种方法(DFT-IFFT法、Sinc插值法和Chirp-Z法)的仿真

qq_45846079的博客 1569

基于 YOLO + SAM 的自动图像标注实战

摘要: 本文提出一种基于YOLO检测和SAM分割的自动化数据标注流水线方案,通过YOLO定位目标并生成检测框,再以检测框为提示驱动SAM完成精细分割,最终输出YOLO格式的标注文件。该方案将人工标注升级为半自动流程,显著提升标注效率,尤其适用于多类别、大规模图像的实例级标注需求。代码模块化设计支持模型灵活替换,并集成异常处理与进度可视化功能。虽依赖YOLO检测质量且对小目标存在局限,但作为工程落地方案,可有效降低私有数据集构建成本,适用于工业检测、遥感等场景的冷启动标注。

qq_64366203的博客 1144

opencv c++ Harris角点检测、shi-tomasi角点

应用:连续的图像移动或图像拼接场景中,确定图像中某一对象的位置。 在x方向和y方向都有最大梯度变化的像素点,衡量这个变化的计算式如下,为xx,xy,yx,yy四个方向的梯度sum值组成的2×2矩阵: a)在实际过程中,会在计算梯度时,乘以一个对应位置的权重 w(x, y),u,v为沿着对应方向移动的距离。 b)在经过转换后得到新的E(u, v)式子: 其中: k = 0.04~0.6

lucust的博客 2052

立创EDA手动拼板实战:当自带功能不够用,如何用‘复制粘贴’搞定异形拼版与特殊布局

本文详细介绍了立创EDA手动拼板技术在异形拼版与特殊布局中的应用实战。通过CTRL+SHIFT+V等核心操作技巧,解决混合尺寸拼板、特殊间距需求等复杂场景,提升PCB设计效率与灵活性,特别适合需要高精度控制的射频电路和医疗设备项目。

weixin_31967485的博客 385

OpenCV——角点检测原理分析(Harris,Shi-Tomasi、亚像素级角点检测)

一、角点(corner)        角点通常被定义为两条边的交点,或者说,角点的局部邻域应该具有两个不同区域的不同方向的边界。角点检测(Corner Detection)是计算机视觉系统中获取图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维重建和目标识别等,也可称为特征点检测。 1、角点的类型              2、角点检测算法的基本思想:          ...

zhu_hongji的博客 4万+

电镀技术:微型制造的原子级加法工艺与核心优势

电镀是一种利用电解原理在基材表面沉积金属层的表面处理技术,其本质是通过电场控制溶液中金属离子的迁移与还原,实现原子级的可控沉积。这一过程的核心在于对电流密度、温度、添加剂等参数的精密调控,从而实现对镀层结晶结构、性能的“编程”。从技术价值看,电镀作为一种“加法制造”工艺,在微观尺度上具有无与伦比的保形性和材料灵活性,能够实现复杂三维结构的均匀覆盖与功能复合。在应用场景上,它尤其契合现代微型化制造的需求,例如在集成电路的铜互连填充、高密度PCB板微孔金属化、MEMS传感器电极制备以及柔性电子器件制造中发挥着不

weixin_42524842的博客 527

猫群优化算法(CSO)详解:从生物灵感到智能优化

猫群优化算法(CSO)是一种模拟猫科动物行为的群体智能优化算法。该算法基于猫的两种主要行为模式:搜寻状态(全局探索)和跟踪状态(局部开发)。CSO通过混合率(MR)动态调整两种模式的比例,实现探索与开发的平衡。算法核心包括搜寻模式的变异操作和跟踪模式的速度-位移模型,具有收敛性能好、全局搜索能力强等特点。相比传统优化算法,CSO在高维复杂问题中表现优异,已成功应用于函数优化、图像处理等多个领域。算法性能受混合率、变化域等参数影响,自适应参数策略可进一步提升优化效果。

qq_42212808的博客 617

Opencv之角点 Harris、Shi-Tomasi 检测详解

Opencv之角点 Harris、Shi-Tomasi 检测详解

yohnyang的博客 1575

湿式双离合器自动变速器simulink建模与仿真

随着汽车工业的不断发展,自动变速器在提高汽车性能、驾驶舒适性和燃油经济性等方面发挥着越来越重要的作用。湿式双离合器自动变速器(Wet Dual-Clutch Transmission,简称 WDCT)作为一种先进的自动变速器技术,具有换挡速度快、动力传递平稳、燃油经济性好等优点,被广泛应用于各类汽车中。结构组成湿式双离合器自动变速器主要由双离合器、齿轮传动系统、液压控制系统和电子控制系统等部分组成。双离合器:由两个独立的离合器组成,分别控制奇数挡和偶数挡。通过切换两个离合器的工作状态,可以实现快速换挡。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 348

OpenCV:Harris、Shi-Tomasi角点检测

Harris 角点检测 基于矩阵行列式和迹,检测速度快,但对噪声敏感。Shi-Tomasi 角点检测 基于最小特征值,角点质量更高,适用于目标跟踪。在目标跟踪、图像匹配、3D 重建等任务中,Shi-Tomasi 角点通常表现更优。

u011186532的专栏 1192

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

opencv-harris和shi-tomasi角点检测

角点 特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系。点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(keypoint feature),或“兴趣点”(interest point),或“角点”(conrner)。 关于角点的具体描述可以有几种: 一阶导数(即灰度的梯度)的局部最大所对

qq_27789527的博客 844

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OpenCV-Python:Harris角点检测与Shi-Tomasi角点检测

一、Harris角点检测 原理: 角点特性:向任何方向移动变换都很大。 Chris_Harris 和 Mike_Stephens 早在 1988 年的文章《A CombinedCorner and Edge Detector》中就已经提出了焦点检测的方法,被称为Harris 角点检测。将窗口向各个方向移动(u,v)然后计算所有差异的总合:表达式如下: 角点检测中要使E(u,v)的值最大...

weixin_33860553的博客 512

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Opencv-C++笔记 (23) :图像特征提取(Harris角点检测、Shi-Tomasi角点检测、自定义角点检测)

基于Harris与Shi-Tomasi角点检测首先通过计算矩阵 M MM 得到 λ 1 , λ 2 两个特征值根据他们得到角点响应值然后自己设置阈值实现计算出阈值得到有效响应值的角点位置使用 OpenCV 函数 cornerEigenValsAndVecs 来计算像素对应的本征值和本征向量来确定其是否是角点。使用OpenCV 函数 cornerMinEigenVal 通过最小化本征值来进行角点检测。

jiyanghao19的博客 1625

opencv---Harris角点检测和shi-Tomasi角度检测

Harris角点检测方法 void cornerHarris( InputArray src, OutputArray dst, int blockSize, int ksize, double k, int borderType = BORDER_DEFAULT ); shi-Tomasi角度检测 void goodFeaturesToTrack( InputArray image, Outp...

qq_42503022的博客 754

Harris、SHI-TOMASI角点检测opencv源码总结

       最近一个项目需要进行图像的角点检测,但是用opencv提供的各种接口效果并不是很理想,于是想探究一下它们的实现,所以看了其源码并且摘录下来,整理了一下,本想在源码的基础上再修改修改但无耐没有思路。以下使自己的整理:#include&lt;opencv2/core/core.hpp&gt; #include&lt;opencv2/highgui/highgui.hpp&gt; ...

Coder_Hzz的博客 323

OpenCV + CPP 系列(卅三)图像特征提取(Harris角点检测、Shi-Tomasi角点检测、自定义角点检测)

常用图像特征描述: SIFT SURF HOG Haar LBP KAZE AKAZE BRISK 图像特征描述子用于: Detection Description Matching Harris角点检测 Shi-Tomasi角点检测 maxCorners 表示返回角点的数目,如果检测出来 角点数目大于最大数目则返回响应值最强前规定 数目。 -qualityLevel表示最小可接受的向量值1500, 0.01, 15 -minDistance两个角点之间的最小距离(欧几里得 距离) -blockSi

红叶谷 wsp_1138886114的博客 1495
上一篇: Harris 角点检测子
下一篇: DoG (Difference of Gaussian)角点检测
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值