How to estimate 2D similarity transformation (linear conformal, nonreflective similarity) in OpenCV?

后端 未结 2 1543
慢半拍i
慢半拍i 2021-02-06 14:50

I\'m trying to search a specific object in input images by matching SIFT descriptors and finding the transformation matrix by RANSAC. The object can only be modified in scene by

2条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-02-06 15:44

    You can use estimateRigidTransform (I do not know whether it is RANSAC, the code at http://code.opencv.org/projects/opencv/repository/revisions/2.4.4/entry/modules/video/src/lkpyramid.cpp says RANSAC in its comment), the third parameter is set to false in order to get just scale+rotation+translation:

    #include 
    #include 
    #include "opencv2/video/tracking.hpp"
    
    int main( int argc, char** argv )
    {
        std::vector p1s,p2s;
    
        p1s.push_back(cv::Point2f( 1, 0));
        p1s.push_back(cv::Point2f( 0, 1));
        p1s.push_back(cv::Point2f(-1, 0));
        p1s.push_back(cv::Point2f( 0,-1));
    
        p2s.push_back(cv::Point2f(1+sqrt(2)/2, 1+sqrt(2)/2));
        p2s.push_back(cv::Point2f(1-sqrt(2)/2, 1+sqrt(2)/2));
        p2s.push_back(cv::Point2f(1-sqrt(2)/2, 1-sqrt(2)/2));
        p2s.push_back(cv::Point2f(1+sqrt(2)/2, 1-sqrt(2)/2));
    
        cv::Mat t = cv::estimateRigidTransform(p1s,p2s,false);
    
        std::cout << t << "\n";
    
        return 0;
    }
    

    compiled and tested with OpenCV 2.4.4. The output is:

    [0.7071067988872528, -0.7071067988872528, 1.000000029802322;
      0.7071067988872528, 0.7071067988872528, 1.000000029802322]
    

提交回复
热议问题