我想在图像之间进行匹配,我使用SIFT作为功能,并使用RANSAC来改善匹配。一些结果很好,但有些失败了。谁能告诉我如何改进它?我认为我的实施应该是正确的,因为我得到了一些好的结果。
我做实验的步骤是:
Step1 :提取SIFT功能;
Step2 :使用FlannBasedMatcher进行匹配;
Step3 :使用RANSAC更正匹配;
以下是我的实验的核心代码:
FlannBasedMatcher matcher;
std::vector< DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );
double max_dist = 0;
double min_dist = 100;
for( int i = 0; i < descriptors_1.rows; i++ )
{
double dist = matches[i].distance;
if( dist < min_dist ) min_dist = dist;
if( dist > max_dist ) max_dist = dist;
}
for( int i = 0; i < descriptors_1.rows; i++ )
{
if( matches[i].distance < max_dist)
{
good_matches.push_back( matches[i]); //keep all the matches
}
}
H = findHomography( tmp_obj, tmp_scene, CV_RANSAC, 3.0, Mask);
for (int i = 0; i< good_matches.size(); i ++)
{
if (Mask.at<uchar>(i) != 0) // RANSAC selection
{
obj.push_back( keypoints_object[ good_matches[i].queryIdx ].pt );
scene.push_back( keypoints_scene[ good_matches[i].trainIdx ].pt );
good_matches2.push_back(good_matches[i]);
numGood = numGood + 1;
}
}
一些失败的案例:
图片1匹配:
图片2匹配:
答案 0 :(得分:0)
我认为问题在于,在经过匹配的功能后,您可能不会绘制匹配的功能。 我可以看到您使用ransac提取了单应性H,但是不清楚您如何用H绘制点的精炼样本。