goodFeaturesToTrack——Shi-Tomasi角点检测
2016-09-15 23:32
671 查看
J.Shi和C.Tomasi在1994年在其论文“Good Features to Track”中,提出了一种对Harris角点检测算子的改进算法——Shi-Tomasi角点检测算子,可以看到,Opencv中函数goodFeaturesToTrack就是直接取自他们论文的名字。
goodFeaturesToTrack有比cornerHarris更多的控制参数,函数原型:
第一个参数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:
goodFeaturesToTrack相比cornerHarris,增加了检测的复杂度,同时也可以更好的控制检测到的角点的特性,比如角点个数,角点间最小间距等。设置检测点数为11时,只有特征值最大的前11个角点被检测出来:
继续增大检测点数的值,所有角点都被检测出来:
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角点检测
- OpenCV2.4.4实现Shi-Tomasi角点检测(goodFeaturesToTrack)
- goodFeaturesToTrack——Shi-Tomasi角点检测
- goodFeaturesToTrack——Shi-Tomasi角点检测
- 检测实现OpenCV2.4.4实现Shi-Tomasi角点检测(goodFeaturesToTrack)
- 【opencv】goodFeaturesToTrack源码分析-2-Shi-Tomasi角点检测
- opencv例程之cvGoodFeaturesToTrack
- GoodFeaturesToTrack函数
- 【练习8.7】cvGoodFeaturesToTrack确定图像强角点、cvFindCornerSubPix亚像素级角点检测
- 图像处理特征不变算子系列之KLT算子--GoodFeaturesToTrack(七)
- 【opencv】goodFeaturesToTrack源码分析-1
- 图像处理特征不变算子系列之KLT算子--GoodFeaturesToTrack(七)
- 【OpenCV】goodFeaturesToTrack_Demo详解
- goodFeaturesToTrack函数详细注释
- Good Features to track特征点检测原理与opencv(python)实现
- 使用GoodFeaturesToTrack进行关键点检测---29
- [learning opencv]第十章cvGoodFeaturesToTrack的demo
- OpenCV:cvGoodFeaturesToTrack 和cvFindCorner特征点检测
- cvGoodFeaturesToTrack()与goodFeaturesToTrack()进行harris角点检测
- cvGoodFeaturesToTrack()设置ROI的问题