Улучшение результата детектора угла Харриса


Я читал об обнаружении признаков и хотел попробовать детектор harris corner. Я понимаю, что это достигается путем вызова

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

Где dst-это изображение поплавков, содержащих угловые силы в каждом пикселе.

Я хотел увидеть его работу, поэтому я хотел применить его к следующей картине:

Фото ноутбука http://i49.tinypic.com/dbijh3.jpg

Результат получился такой:

Углы не обнаружены 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 4

1 ответ:

Вы можете попробовать функцию goodFeaturesToTrack. Он построен поверх детектора Harris corner, но фильтрует наш шум и возвращает только сильные углы.