我有 7 张来自 gopro 的图像(装备中有 5 个相机,一个用于顶部,一个用于底部,它们都是 gopro 相机)。我想将所有这些图像拼接在一起以创建 3d 全景图。我已经能够使用 opencv stitching_detailed.cpp 在 Rig 中拼接 5 张图像。文件链接:
https://raw.githubusercontent.com/opencv/opencv/master/samples/cpp/stitching_detailed.cpp
但我不确定如何缝合顶部和底部(对我来说现在底部不是那么重要,但我必须对顶部做些什么)。知道如何做到这一点吗?如果我也可以使用相同的 stitching_detailed.cpp 来缝合顶部,请告诉我。
以下链接包含我正在使用的图像。它还包含我在 rig 中拼接图像得到的结果。
https://drive.google.com/folderview?id=0B_Bl8s2ePunQcnBaM3A4WDlDcXM&usp=sharing
最佳答案
因此,首先您需要了解 stitching_detailed.cpp 的工作原理。 1. 使用 SURF/ORB/SIFT 等方法在每个图像中检测特征关键点。然后对于每个图像对,找到最佳特征匹配并计算单应性矩阵并获得每对图像的内点数
(*finder)(img, features[i]);
BestOf2NearestMatcher matcher(try_cuda, match_conf);
matcher(features, pairwise_matches);
所有这些对都被传递到 leaveBiggestComponent 以获得属于全景图的最大图像集。
相机参数或每张图像是根据上述获得的集合计算的,并完成变形和混合。
第 1 步将为每对查找单应性并生成一定数量的内点。第 2 步将删除所有置信度因子(内点数)小于阈值的图像对。由于 cam7 img 的特征非常少,并且几乎没有与任何其他图像重叠的区域,因此它会在 leavebiggestcomponent 步骤中被拒绝。
可以在这个链接看到features和mtaching(我用过orbfeatures)
https://drive.google.com/open?id=0B2wDitsftUG9QnhCWFIybENkbDA
我也没有改变图像大小,但我想稍微减小图像尺寸(可能减半)会产生更多的特征点
您可以做的是减少拍摄帧进行拼接的时间间隔。为了获得好的结果,图像之间必须至少有 40% 的重叠区域。
关于c++ - OpenCv 3d拼接全景图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269798/