OpenCV C ++ findHomography маска значения значения

Я использую функцию findHomography OpenCV с методом RANSAC, чтобы найти гомографию, которая связывает два изображения, связанные с набором ключевых точек. Основная проблема заключается в том, что я еще нигде не смог найти значения матрицы масок, которые выводит функция. Единственная информация, которую я знаю, — это то, что 0 значений являются выбросами, а ненулевые значения являются выбросами. Но что это означает значение inliers? Кто-нибудь знает?

Заранее спасибо!

Кусок кода, где я звоню findHomography:

cv::Mat H12;
cv::Mat mask;

H12 = cv::findHomography(FvPointsIm1, FvPointsIm2, mask, CV_RANSAC, 5);
ui->Debug_Label->setText(Mat2QString(mask));

6

Решение

Маска возвращается findHomography 8-битный одноканальный cv::Mat (или же std::vector<uchar>если хотите) содержащий либо 0 или же 1 с указанием статуса выброса.

РЕДАКТИРОВАТЬ: Вы получаете доступ к каждому элементу маски, вызывая .at<double>, что приводит к запутанному выводу. Вы должны использовать .at<uchar>, который будет правильно интерпретировать значение матрицы.

11

Другие решения

Я использовал findHomography метод после применения сопоставления ключевых точек.

  • Inliers
    совпадают ключевые точки, которые рассчитываются как истинные положительные значения (правильные совпадения);
  • Выпадающие
    совпадают ключевые точки, которые рассчитываются как ложные срабатывания (ложные совпадения).

Затем вы можете использовать вывод маски для извлечения подмножества правильных совпадений из всех совпадений.

  • Есть пример в Python 3.6 & OpenCV 3.4.1:

    good_kp = [gray_kp[m.queryIdx].pt for m in good_matches]
    correct_matched_kp = [good_kp[i] for i in range(len(good_kp)) if mask[i]]
    
1

По вопросам рекламы [email protected]