天天看點

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個角點被檢測出來:

goodFeaturesToTrack——Shi-Tomasi角點檢測

繼續增大檢測點數的值,所有角點都被檢測出來:

goodFeaturesToTrack——Shi-Tomasi角點檢測