gpt4 book ai didi

opencv - 如何在 OpenCV 中估计二维相似性变换(线性共形、非反射相似性)?

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:52 25 4
gpt4 key购买 nike

我正在尝试通过匹配 SIFT 描述符并通过 RANSAC 查找转换矩阵来搜索输入图像中的特定对象。只能通过 2D 空间中的相似变换(缩放、旋转、平移)在场景中修改对象,因此我需要在 3D 空间中估计 2x2 变换矩阵而不是 3x3 单应矩阵。我如何在 OpenCV 中实现这一点?

最佳答案

您可以使用 estimateRigidTransform (不知道是不是RANSAC,http://code.opencv.org/projects/opencv/repository/revisions/2.4.4/entry/modules/video/src/lkpyramid.cpp处的代码在注释中说是RANSAC),第三个参数设置为false,为了得到just scale+rotation+translation:

#include <vector>
#include <iostream>
#include "opencv2/video/tracking.hpp"

int main( int argc, char** argv )
{
std::vector<cv::Point2f> 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;
}

使用 OpenCV 2.4.4 编译和测试。输出是:

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

关于opencv - 如何在 OpenCV 中估计二维相似性变换(线性共形、非反射相似性)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14833049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com