Применение RANSAC к вектору & lt; Point2f & gt; для преобразования подобия

Я использовал параметр CV_RANSAC в функции findHomography, но теперь я хочу использовать оценкуRigidTransform. Таким образом, я больше не могу использовать CV_RANSAC.

Я хочу исключить выбросы из моих SIFT-данных, сопоставленных с данными, и применить оценкуRigidTransform. Как я могу это сделать?

1

Решение

Вот решение, которое сработало для меня:

  • Используйте SURF дескриптор и экстрактор для получения характерных очков
  • Используйте FLANN-matcher, чтобы получить хорошие совпадения
  • Перепроверьте все совпадения. Вот как я это сделал:

    std::vector<Point2f> valid_coords_1, valid_coords_2;
    std::vector< DMatch > valid_matches;
    //-- Show detected matchesint counter;
    float res;
    for( int i = 0; i < (int)good_matches.size(); i++ ){
    counter = 0;
    for(int j = 0; j < (int)good_matches.size(); j++){
    if(i!=j){
    res = cv::norm(keypoints_1[good_matches[i].queryIdx].pt - keypoints_1[good_matches[j].queryIdx].pt) - cv::norm(keypoints_2[good_matches[i].trainIdx].pt-keypoints_2[good_matches[j].trainIdx].pt);
    if(abs(res) < (img_1.rows * 0.004 + 3)){ //this value has to be adjusted
    counter++;
    }
    //printf("Match good point %d with %d: %f \n", i, j, res);
    }
    }
    /* printf( "-- Good Match [%d] Keypoint 1: %d (%f,%f)  -- Keypoint 2: %d (%f,%f) Distance: %f  \n", i, good_matches[i].queryIdx,
    keypoints_1[good_matches[i].queryIdx].pt.x, keypoints_1[good_matches[i].queryIdx].pt.y,
    good_matches[i].trainIdx,
    keypoints_2[good_matches[i].trainIdx].pt.x, keypoints_2[good_matches[i].trainIdx].pt.y,
    good_matches[i].distance); */
    //printf("Point nr %d: has %d valid matches \n", i, counter);
    if(counter > (good_matches.size() / 10)){
    valid_matches.push_back(good_matches[i]);
    valid_coords_1.push_back(keypoints_1[good_matches[i].queryIdx].pt);
    valid_coords_2.push_back(keypoints_2[good_matches[i].trainIdx].pt);
    }
    }
    
    • Использовал функцию ratingRigidTransform.

Я надеюсь, что это помогло в некотором роде. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация 🙂

2

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


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