Улучшение результата детектора угла Харриса
Я читал об обнаружении признаков и хотел попробовать детектор 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 ответ:
Вы можете попробовать функцию goodFeaturesToTrack. Он построен поверх детектора Harris corner, но фильтрует наш шум и возвращает только сильные углы.