改善哈里斯角探测器的效果

时间:2012-11-03 22:52:02

标签: opencv feature-detection

我一直在阅读有关特征检测的内容,并想尝试使用哈里斯角探测器。我意识到这是通过调用

来实现的

void cornerHarris(InputArray src, OutputArray dst, int blockSize, int ksize, double k, int borderType=BORDER_DEFAULT )

其中dst是每个像素包含角点强度的浮点图像。

我希望看到它有用,所以我想把它应用到下面的图片中:

pic of a laptop http://i49.tinypic.com/dbijh3.jpg

产生的结果如下:

corners not detected http://i49.tinypic.com/jgtzqt.jpg

你可以说结果不好。在我看来它只是拾起噪音,甚至没有发现主角。

以下是我用于在图像上打印角落的代码,我使用了阈值并为阈值设置了任意值。

int _tmain(int argc, _TCHAR* argv[])
{

Mat img, dst, threshed;
img = imread("c:\\laptop.jpg",0);

dst = Mat::zeros(img.size(), CV_32FC1);

cornerHarris(img, dst, 2, 3, 0.04, BORDER_DEFAULT);



threshold(dst, threshed, 0.00001, 255, THRESH_BINARY_INV);

namedWindow("meh", CV_WINDOW_AUTOSIZE);
imshow("meh", threshed);
//imwrite("harris.jpg", threshed);
waitKey(0);

return 0;

If I reduce threshold the result is white with just a few black dots (detections) Increasing threshold just produces a more noisy like image.

我错过了什么吗?如何提高此功能的质量?

谢谢

1 个答案:

答案 0 :(得分:9)

您可以尝试goodFeaturesToTrack功能。它建立在Harris角点探测器的顶部,但过滤我们的噪音并仅返回强角。