【发布时间】: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()).
然后通过使用上面的库,我传入来自 R 和 t 的值,但响应是在 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?