Reputation: 733
I am using the function findHomography
of OpenCV with the RANSAC method in order to find the homography that relates two images linked with a set of keypoints.
The main issue is that I haven't been able to find anywhere yet what are the values of the mask matrix that the function outputs.
The only information that I know is that 0 values are outliers, and non zero values are inliers. But what does it mean the inliers value? Does anyone know?
Piece of code where I call findHomography
:
cv::Mat H12;
cv::Mat mask;
H12 = cv::findHomography(FvPointsIm1, FvPointsIm2, mask, CV_RANSAC, 5);
ui->Debug_Label->setText(Mat2QString(mask));
Upvotes: 13
Views: 13379
Reputation: 259
I used the findHomography method after applying keypoint matching.
Then you can use the mask output to extract the subset of correct matches from all matches.
There is an example in 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]]
Upvotes: 2
Reputation: 11329
The mask returned by findHomography
is an 8-bit, single-channel cv::Mat
(or std::vector<uchar>
, if you prefer) containing either 0
or 1
indicating the outlier status.
EDIT: You access each element of the mask by calling .at<double>
, which is leading to the confusing output. You should be using .at<uchar>
, which will interpret the matrix value correctly.
Upvotes: 15