• J.Shi和C.Tomasi在1994年在其论文“Good Features to Track”中,提出了一种对Harris角点检测算子的改进算法——Shi-Tomasi角点检测算子,可以看到,Opencv中函数goodFeaturesToTrack就是直接取自他们论文的名字。
  • 在了解Shi-Tomasi角点检测理论之前,读者最好需要了解一下 Harris角点检测 理论的相关知识

Shi-Tomasi角点检测理论

  • 跟Harris角点检测的理论几乎完全一致,唯一不同的是在使用矩阵 特征值 λλλ1 λλλ2 计算角度响应的时候。
  • Harris角点检测 时候计算角点响应时候使用的公式
  • Shi-Tomasi角点检测 时候计算角点响应时使用的公式:
    R=min(λ1,λ2)R = min(λ1, λ2)R=min(λ1,λ2)
    如果 R 值超过阈值,我们就认为它是一个角点。我们可以把它绘制到λ1~λ2空间中,就会得到下图

    从这幅图中,我们可以看出来只有当λ1和λ2都大于最小值时,才被认为是角点(绿色区域)。

API参数说明

opencv提供了goodFeaturesToTrack函数用来实现Shi-Tomasi算子,goodFeaturesToTrack有比cornerHarris更多的控制参数,其API函数接口为:

void goodFeaturesToTrack( // Shi-Tomasi角点检测InputArray image,  // 灰度图像OutputArray corners, // 检测出来的角点在输入图像的Pointint maxCorners, // -maxCorners 表示返回角点的数目,如果检测出来的角点数目大于最大数目则返回响应值最强前maxCorners数目。double qualityLevel, // -qualityLevel表示最小可接受的向量值1500, 0.01, 15double minDistance, // -minDistance两个角点之间的最小距离(欧几里得距离)InputArray mask = noArray(), int blockSize = 3, // -blockSize 计算导数微分不同的窗口大小bool useHarrisDetector = false, // -useHarrisDetector是否使用Harris角点检测,设置为false的时候 下一个参数 k 无效double k = 0.04 // 最好 0.04~0.06
);
  • 第一个参数image:输入图像,须为8位或浮点型32位单通道图像。
  • 第二个参数corners:位置点向量,保存的是检测到的角点的坐标;
  • 第三个参数maxCorners:定义可以检测到的角点的数量的最大值;
  • 第四个参数qualityLevel :double类型,角点检测可接受的最小特征值。其实际用于过滤角点的最小特征值是qualityLevel与图像中最大特征值的乘积。所以qualityLevel通常不会超过1(常用的值为0.10或者0.01)。而检测完所有的角点后,还要进一步剔除掉一些距离较近的角点。
  • 第五个参数minDistance:两个角点间最小间距,以像素为单位;此参数用于保证返回的焦点之间的距离不小于minDistance个像素。
  • 第六个参数mask:可选参数,表示感兴趣区域,有默认值noArray()。指定检测区域,若检测整幅图像,mask置为空Mat();
  • 第七个参数blockSize :int类型,有默认值3,计算协方差矩阵时窗口大小;
  • 第八个参数useHarrisDetector :bool类型,默认值false,是否使用Harris角点检测,为false,则使用Shi-Tomasi算子;
  • 第九个参数k :double类型,有默认值0.04,为用于设置Hessian自相关矩阵行列式的相对权重的权重系数,一般取经验值0.04~0.06。第八个参数为false时,该参数不起作用;

程序代码

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int num_corners = 25;
int max_corners = 200;
const char* output_title = "ShiTomasi Detector";
Mat src, gray_src;
RNG rng(12345);void ShiTomasi_Demo(int, void*);int main(int argc, char** argv) {src = imread("E:/Experiment/OpenCV/Pictures/ShiTomasiTest.jpg");if (src.empty()) {printf("could not load image...\n");return -1;}namedWindow("input image", CV_WINDOW_AUTOSIZE);imshow("input image", src);cvtColor(src, gray_src, COLOR_BGR2GRAY);namedWindow(output_title, CV_WINDOW_AUTOSIZE);createTrackbar("Num Corners:", output_title, &num_corners, max_corners, ShiTomasi_Demo);ShiTomasi_Demo(0, 0);waitKey(0);return 0;
}void ShiTomasi_Demo(int, void*) {if (num_corners < 5) {num_corners = 5;}vector<Point2f> corners;double qualityLevel = 0.01;double minDistance = 10;int blockSize = 3;bool useHarris = false;double k = 0.04;Mat resultImg = gray_src.clone();cvtColor(resultImg, resultImg, COLOR_GRAY2BGR);// 让原图灰度,角点彩色// opencv中的所有函数都有对应的 cv 开头的函数,那是没有使用命名空间时使用的,函数作用一致// shi-tomasi 角点检测,运算速度比harris角点检测要快很多,但是harris找出的角点比ShiTomasi要多。不过ShiTomasi的检测结果是能接受的goodFeaturesToTrack(gray_src, corners, num_corners, qualityLevel, minDistance, Mat(), blockSize, useHarris, k);printf("Number of Detected Corners:  %d\n", corners.size());for (size_t t = 0; t < corners.size(); t++) {circle(resultImg, corners[t], 2, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)), 2, 8, 0);}imshow(output_title, resultImg);
}

运行截图

参考博客:

  1. https://blog.csdn.net/dcrmg/article/details/52551637
  2. https://blog.csdn.net/lly_117/article/details/80324947
  3. https://blog.csdn.net/qq_36387683/article/details/80550964
  4. https://blog.csdn.net/chaipp0607/article/details/54697457
  5. https://blog.csdn.net/huanghuangjin/article/details/81262115

OpenCV-特征提取与检测(02、Shi-Tomasi角点检测)相关推荐

  1. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  2. OpenCV学习之路(七)——角点检测

    角点检测(Corner Detection)是计算机视觉中用来获得图像特征的一种方法,广泛应用于运动检测.视频追踪.目标识别等领域中,也称特征点检测. 一.兴趣点与角点 对于角点,到目前为止还没有明确 ...

  3. 《OpenCV3编程入门》学习笔记10 角点检测(一)Harris角点检测

    第10章 角点检测 10.1 Harris角点检测 10.1.1 角点 1.图像特征类型: (1)边缘 (2)角点(感兴趣点) (3)斑点(感兴趣区域) 2.角点定义: (1) 一阶导数(灰度的梯度) ...

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

    计算机视觉(角点检测)- 2 - Shi-Tomasi 角点检测 学习前言 一.Shi-Tomasi 角点检测 二.OpenCV中API介绍    ```corners = cv2.goodFeatu ...

  5. 计算机视觉(角点检测)- 1 - Harris角点检测

    计算机视觉(角点检测)- 1 - Harris角点检测 学习前言 一.Harris角点检测   1.什么是角点?   2.Harris角点检测的基本原理&基本思想   3.Harris角点检测 ...

  6. 【opencv】goodFeaturesToTrack源码分析-2-Shi-Tomasi角点检测

    本文章是[opencv]goodFeaturesToTrack源码分析-1的后续,主要描述Shi-Tomasi角点检测算法原理及opencv实现. 1.算法原理 Shi-Tomasi算法是Harris ...

  7. 《OpenCV3编程入门》学习笔记10 角点检测(二)Shi-Tomasi角点检测

    10.2 Shi-Tomasi角点检测 10.2.1 Shi-Tomasi角点检测:goodFeaturesToTrack()函数 1.定义:   Harris算法改进,若矩阵M行列式的值与M的迹中较 ...

  8. python 角点检测_opencv python Shi-Tomasi角点检测

    cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance[, corners[, mask[, blockSize[, ...

  9. fast角点检测 java_opencv3_java 图像的角点检测DetectConers goodFeaturesToTrack

    图像的角点检测DetectConers goodFeaturesToTrack package opencv_java_demo; import org.opencv.core.*; import o ...

  10. harris角点检测c语言,Harris角点检测原理及实现

    为便于理解,先简要介绍角点的概念和角点检测背景 一.角点及角点检测背景: 角点概念: 角点,通常可理解为两条边的角点,也可理解为像素值在多个方向有显著变化的点或局部区域内某个属性明显的点.如多个轮廓的 ...

最新文章

  1. a*算法matlab代码_导向滤波算法及其matlab代码实现
  2. 文件上传与下载【目前仅仅实现了上传功能】
  3. 用「我的世界」自动生成「现实世界」:英伟达展示AI脑补新技术
  4. java 对变量加锁_Java最全锁剖析:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁...
  5. 揭秘!如何快速提高网站权重-关键词百度指数叠加
  6. CSS3 box-shadow 属性
  7. Python爬虫的requests模块你真的学会了吗?来看看这些高级用法!
  8. mysql 语法树_Inception 语法树打印(15)
  9. SQL SERVER 2005 数据挖掘与商业智能完全解决方案---学习笔记(二)
  10. (转)ASP.NET MVC 3.0:基于Ajax的表单提交,A页面认证失败后页面被强转至登录页面,待登录成功将如何回到A页面?...
  11. debian英文环境中中文输入
  12. 三维模型_浅谈倾斜摄影及三维模型的应用行业
  13. 计算机网络基础 习题,计算机网络基础练习题集.pdf
  14. HTML页面跳转的5种方法分析介绍
  15. 有向图的深度优先遍历
  16. libreelec投屏_我的NAS+HTPC折腾之旅 篇八:LibreELEC部署媒体中心服务器emby和jellyfin篇...
  17. PPT(默认设置快捷键的使用)
  18. C基础:程序执行时间的计算方法的三种方式
  19. CPU、MPU、MCU、SOC的概念与区别
  20. rogabet notepad 浏览器调用

热门文章

  1. spring @Bean注解的使用
  2. Android四大组件 之一 广播接收者
  3. ping命令两种返回信息的区别
  4. 活动目录权限委派|父域子域管理
  5. CruiseControl初探
  6. 计算机包括桌面计算机和便携式计算机,【填空题】( )计算机包括桌面计算机和便携式计算机这两种形式。...
  7. 用python股票_十分钟学会用Python交易股票
  8. maria安装包mysql_Redhat 7.3安装系统自带Mariadb安装包
  9. Js页面截取小数点后两位
  10. 仓库镜像源为清华_conda国内镜像修改(最新版)