gpt4 book ai didi

c++ - 从单应性估计 R/T

转载 作者:太空狗 更新时间:2023-10-29 21:15:04 30 4
gpt4 key购买 nike

我一直在尝试计算 2 张图像中的特征,然后将这些特征传回 CameraParams.R,但没有成功。特征已成功计算和匹配,但是,问题是将它们传递回 R & t

我知道你必须分解 Homography 才能使这成为可能,我已经使用类似这样的东西完成了:https://github.com/syilma/homography-decomp ,但我真的做对了吗?

现在我只是在使用:

匹配:

vector< vector<DMatch> > matches;
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(algorithmName);
matcher->knnMatch( descriptors_1, descriptors_2, matches, 50 );

vector< DMatch > good_matches; // Storing good matches here

我注意到 good_matches 没有在任何地方使用。所以我想我的问题是,如何将 good_matches 传回给 cameras.R/t

提取单应性:

Mat K;
cameras[img_idx].K().convertTo(K, CV_32F);

findHomography -> decomposeHomography(H, K, outputR,outputT,noarray()).

然后通过利用上面的库,我传入了 Rt 的值,但响应是在 4 个可能的结果中没有找到单应性。

我走的路对吗?似乎 decomposeHomography 是 3D 解决方案,但是,findHomography 是 2D?

绝对目标:

根据图像中发现的特征优化 CameraParam.R/t

为什么?因为我目前正在从设备旋转矩阵传入 .R 但旋转稍微不准确。在我之前的问题中查看更多信息:Refining Camera parameters and calculating errors - OpenCV

最佳答案

如果你是使用计算出的R来进行图像拼接,那么就没有必要使用分解单应性了。整个拼接管道假设为零平移。所以它只为旋转情况提供完美的输出,并且在相机姿势中引入平移时引入了轻微的错误。如果您从单应性研究 R 的 opencv 计算,它假定为 0 平移。

Mat R = K_from.inv() * pairwise_matches[pair_idx].H.inv() * K_to;
cameras[edge.to].R = cameras[edge.from].R * R;

您可以在 motion_estimators.cpp ->calcRotation 函数中找到源代码。关于使用 goodmatches 计算 R 的问题。goodmatches 实际上用于计算单应矩阵,使用 findhomography 函数

所以整个过程会是这样的

  1. 查找匹配项(如您所述)

  2. 使用 findhomography 从这些匹配中找到单应矩阵功能

  3. 使用calcrotation函数求R
  4. 使用 findfocalfromhomography 函数找到焦点并创建内在矩阵
  5. 使用 warper、seamfinder 和 blender 进行最终拼接输出

关于c++ - 从单应性估计 R/T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38940389/

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