在计算harris特征角时候,我们要在两个方向计算梯度,计算代价有点大。在paper
The article by E. Rosten and T. Drummond, Machine learning for high-speed corner detection, in In European Conference on Computer Vision, pp. 430-443, 2006.
中,作者提出了一种快速的特征检测方法。paper下载:http://yunpan.cn/QDbtIDnBhqUxT
对于中心点p,半径为3的圆,计算圆周上的点和中心点的灰度值差,如果大于阈值,且这些点组成的弧长大于圆周长的3/4,则中心点p为特征点。如下图所示,在计算时候,可以先计算1,5,9,13处的灰度值差,至少有3个点的差大于阈值,中心点p才有可能是特征点,通过这种方法,能加快特征点的检测。
opencv中实现了概算法,下面的代码演示了如何调用快速特征检测:
// Read input image
image= cv::imread("../church01.jpg",0);
//快速特征检测
keypoints.clear();
//40是阈值
cv::FastFeatureDetector fast(40);
fast.detect(image,keypoints);
cv::drawKeypoints(image,keypoints,image,cv::Scalar(255,255,255),cv::DrawMatchesFlags::DRAW_OVER_OUTIMG);
// Display the corners
cv::namedWindow("FAST Features");
cv::imshow("FAST Features",image);
下面左图为快速特征检测的结果,可以看到和good特征检测出的特征点结果很接近。
程序代码:参考FirstOpenCV49