OpenCv 3d拼接全景

时间:2016-09-01 11:02:15

标签: c++ opencv image-stitching

我有来自gopro的7张照片(钻机中有5个摄像头,一个用于顶部,一个用于底部,它们都是gopro摄像头)。我想将所有这些图像拼接在一起以创建一个3d全景图。我已经能够使用opencv stitching_detailed.cpp在Rig中缝合5个图像。链接到文件:

https://raw.githubusercontent.com/opencv/opencv/master/samples/cpp/stitching_detailed.cpp

但是我不确定如何缝合顶部和底部(对我来说,现在底部不是那么重要,但我必须做一些关于顶部的事情)。知道如何做到这一点?如果我也可以使用相同的stitching_detailed.cpp来缝合顶部,请告诉我。

以下链接包含我正在使用的图像。它还包含我在装备中缝合图像时得到的结果。

https://drive.google.com/folderview?id=0B_Bl8s2ePunQcnBaM3A4WDlDcXM&usp=sharing

1 个答案:

答案 0 :(得分:2)

首先,您需要了解stitching_detailed.cpp的工作原理。 1.使用SURF / ORB / SIFT左右在每个图像中检测特征关键点。然后,对于每个图像对,找到最佳特征匹配并计算单应矩阵并获得每对的内部数量

(*finder)(img, features[i]); 


 BestOf2NearestMatcher matcher(try_cuda, match_conf);
 matcher(features, pairwise_matches);
  1. 所有这些对都被置于leaveBiggestComponent中以获取属于全景图的最大图像集。

  2. 相机参数或每张图像都是从上面获得的集合中计算出来的,并且完成了变形和混合。

  3. 步骤1将找到每对的单应性并生成多个内点。步骤2将移除所有那些置信因子(内部数)小于阈值的图像对。由于cam7 img具有如此少的特征并且几乎没有与任何其他图像重叠的区域,因此它将在leavebiggestcomponent步骤中被拒绝。

    您可以在此链接中看到功能和相关(我使用了orbfeatures)

    https://drive.google.com/open?id=0B2wDitsftUG9QnhCWFIybENkbDA

    此外我还没有改变图像尺寸,但我想减少图像尺寸(可能减半)会产生更多的特征点

    您可以做的是缩短拼接框架的时间间隔。为了获得良好的结果,图像之间必须至少有40%的重叠区域。