zoukankan      html  css  js  c++  java
  • goodFeaturesToTrack——Shi-Tomasi角点检测

    J.Shi和C.Tomasi在1994年在其论文“Good Features to Track”中,提出了一种对Harris角点检测算子的改进算法——Shi-Tomasi角点检测算子,可以看到,Opencv中函数goodFeaturesToTrack就是直接取自他们论文的名字。


    goodFeaturesToTrack有比cornerHarris更多的控制参数,函数原型:

    void goodFeaturesToTrack( InputArray image, OutputArray corners,
                                         int maxCorners, double qualityLevel, double minDistance,
                                         InputArray mask=noArray(), int blockSize=3,
                                         bool useHarrisDetector=false, double k=0.04 );


    第一个参数image:8位或32位单通道灰度图像;

    第二个参数corners:位置点向量,保存的是检测到的角点的坐标;

    第三个参数maxCorners:定义可以检测到的角点的数量的最大值;

    第四个参数qualityLevel:检测到的角点的质量等级,角点特征值小于qualityLevel*最大特征值的点将被舍弃;

    第五个参数minDistance:两个角点间最小间距,以像素为单位;

    第六个参数mask:指定检测区域,若检测整幅图像,mask置为空Mat();

    第七个参数blockSize:计算协方差矩阵时窗口大小;

    第八个参数useHarrisDetector:是否使用Harris角点检测,为false,则使用Shi-Tomasi算子;

    第九个参数k:留给Harris角点检测算子用的中间参数,一般取经验值0.04~0.06。第八个参数为false时,该参数不起作用;


    goodFeaturesToTrack检测Shi-Tomasi角点简单demo:


    #include "core/core.hpp"  
    #include "highgui/highgui.hpp" 
    #include "imgproc/imgproc.hpp"
    
    using namespace cv;   
    
    Mat image;
    Mat imageGray;
    int thresh=5;   //角点个数控制
    int MaxThresh=255;
    
    void Trackbar(int,void*);  
    
    int main(int argc,char*argv[])  
    {  
    	image=imread(argv[1]);
    	cvtColor(image,imageGray,CV_RGB2GRAY);
    	GaussianBlur(imageGray,imageGray,Size(5,5),1); // 滤波
    	namedWindow("Corner Detected");
    	createTrackbar("threshold:","Corner Detected",&thresh,MaxThresh,Trackbar);
    	imshow("Corner Detected",image);
    	Trackbar(0,0);
    	waitKey();
    	return 0;
    }  
    
    void Trackbar(int,void*)
    {
    	Mat dst,imageSource;
    	dst=Mat::zeros(image.size(),CV_32FC1);  
    	imageSource=image.clone();
    	vector<Point2f> corners;  
    	goodFeaturesToTrack(imageGray,corners,thresh,0.01,10,Mat());
    	for(int i=0;i<corners.size();i++)
    	{
    		circle(imageSource,corners[i],2,Scalar(0,0,255),2);
    	}
    	imshow("Corner Detected",imageSource); 
    }


    goodFeaturesToTrack相比cornerHarris,增加了检测的复杂度,同时也可以更好的控制检测到的角点的特性,比如角点个数,角点间最小间距等。设置检测点数为11时,只有特征值最大的前11个角点被检测出来:





    继续增大检测点数的值,所有角点都被检测出来:



  • 相关阅读:
    正态分布与中心极限定理
    超几何分布与二项分布及其期望
    cf492E. Vanya and Field(扩展欧几里得)
    ZR#317.【18 提高 2】A(计算几何 二分)
    小米OJ刷题日志
    cf519D. A and B and Interesting Substrings(前缀和)
    cf519C. A and B and Team Training(找规律)
    BZOJ2118: 墨墨的等式(最短路 数论)
    Service生命周期图
    python2.7中使用mysql (windows XP)
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411963.html
Copyright © 2011-2022 走看看