в этот ответ я все понимаю до непосредственно перед "// 5. Проверить совпадения с помощью RANSAC".
В своем коде я использую этот код, за исключением части ransacTest. Я сталкиваюсь с проблемой, что я получаю слишком много неправильных "совпадений" и/или иногда прямоугольник вокруг объекта, который находит мой код, слишком искажен.
//Template image's corners
obj_corners[0] = cvPoint( 0, 0);
obj_corners[1] = cvPoint( best_img.cols, 0 );
obj_corners[2] = cvPoint( best_img.cols, best_img.rows );
obj_corners[3] = cvPoint( 0, best_img.rows );
obj.clear();
scene.clear();
for ( int i = 0; i < best_matches.size(); i++ )
{
//Get the keypoints from the good matches
obj.push_back( best_img_keypoints[ best_matches[i].queryIdx ].pt ); // Template image
scene.push_back( frame_keypoints[ best_matches[i].trainIdx ].pt ); // Frame
}
// -----Find homography----- //
std::vector<uchar> outlier_mask; //I don't use this line
cv::Mat H = findHomography( obj, scene, CV_RANSAC, reprojThres, outlier_mask);
cv::perspectiveTransform(obj_corners, scene_corners, H);
а) Если я использую фундаментальную матрицу, смогу ли я использовать findHomography и перспективное преобразование?
б) Есть ли что-то неправильное в приведенных выше строках?