【问题标题】:Estimating R/T from Homography从单应性估计 R/T
【发布时间】:2016-08-14 08:13:21
【问题描述】:

我一直在尝试计算 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

【问题讨论】:

  • 我很想知道这个代码是否更好 (github.com/LaurentBerger/TestHomograhy)
  • 我试试看!谢谢@LBerger
  • 快速提问,我一直在阅读 OpenCV 文档,发现一些有趣的功能可能有助于我实现目标。你对calibrateCamera/calibrationMatrixValues/solvePNP有什么看法? @LBerger
  • solvePNP 是对我来说最有意义的函数。但是,我不确定从哪里获得distCoeffs。或者我​​应该坚持我原来的方法吗? IE。查找和匹配特征 -> 分解单应性 -> 传回.R?

标签: c++ opencv


【解决方案1】:

如果使用计算出的 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. 使用整经机、寻缝机和搅拌机进行最终缝合输出

【讨论】:

  • 我喜欢你扫描我所有的问题并用智慧回答它们的方式:) 谢谢!
猜你喜欢
  • 2018-11-08
  • 2018-04-04
  • 2013-01-03
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2017-10-24
  • 2015-06-09
  • 1970-01-01
相关资源
最近更新 更多