Я использую функцию 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));
Маска возвращается findHomography
8-битный одноканальный cv::Mat
(или же std::vector<uchar>
если хотите) содержащий либо 0
или же 1
с указанием статуса выброса.
РЕДАКТИРОВАТЬ: Вы получаете доступ к каждому элементу маски, вызывая .at<double>
, что приводит к запутанному выводу. Вы должны использовать .at<uchar>
, который будет правильно интерпретировать значение матрицы.
Я использовал findHomography метод после применения сопоставления ключевых точек.
Затем вы можете использовать вывод маски для извлечения подмножества правильных совпадений из всех совпадений.
Есть пример в 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]]