1

Я работаю над обнаружением угловых функций с помощью детектора harris. Я написал программу функции определения в изображении в MATLAB, используя следующий код функции определения ХаррисаСвязь между результатами детектирования harris в matlab и opencv

corners = detectHarrisFeatures(img, 'MinQuality', 0.0001); 
S = corners.selectStrongest(100); 

я передать всю программу из MATLAB для OpenCV

Я использовал следующий код для обнаружения Харриса точки

int thresh = 70; 

for(int j = 0; j < dst_norm.rows && cont < 100; j++) 
{ 
    for(int i = 0; i < dst_norm.cols && cont < 100; i++) 
    { 
     if((int) dst_norm.at<float>(j, i) > thresh) 
     {       
      S.at<int>(cont, 0) = i; 
      S.at<int>(cont, 1) = j; 
      I.at<int>(cont, 0) = i; 
      I.at<int>(cont, 1) = j; 

      cont = cont + 1;        
     } 
    } 
} 

извлеченная область была различной в обеих программах, и я обнаружил, что Харрис обнаружил угловые точки в матлабе не так, как Харрис обнаружил угловые точки в opencv.

Как сделать обнаруженные угловые точки из обеих программ одинаковыми?

ответ

1

Есть dst_norm массив значений угла Гарриса? В этом случае вы выбираете первые 100 пикселей с угловой метрикой выше порога, что неверно.

В вашем коде MATLAB detectHarrisFeatures находит точки, которые являются локальными максимумами угловой метрики. Затем selectStrongest метод выбирает 100 из этих точек с наивысшей метрикой. Итак, сначала вы должны найти локальные максимумы. Затем вам нужно отсортировать их и взять верхнюю часть 100.

Даже тогда результаты не будут точно такими же, потому что detectHarrisFeatures находит углы с субпиксельной точностью, используя интерполяцию.

+0

как я могу найти локальные максимумы точек в opencv ??????? / –

Смежные вопросы