Opencv4Android,拼接两个图像

时间:2014-12-26 10:47:52

标签: android opencv homography image-stitching opencv4android

我必须缝合两张图片并使用openCV4Android。我阅读了关于缝合图像的文档和一些线索,例如:Panorama – Image Stitching in OpenCVHomography between images using OpenCV for AndroidStitch multiple imagesError matching with ORB in Android和其他人。首先,它似乎很容易。但结果很奇怪!下面,您可以看到我用于测试和结果的两个图像:

这是“image1”:

enter image description here

这是“image2”:

enter image description here

您可以看到绘制的功能:

enter image description here

这是翘曲image1

的结果

enter image description here

我做错了什么?或者可能是我不理解?

1 个答案:

答案 0 :(得分:1)

快速回答:

我会说你的图像之间没有足够的重叠。如果你看一下你的比赛(你所说的"绘制的功能"),大多数都是错的。作为第一个测试,尝试缝合两个具有80%重叠的图像。

更多详情:

大图:

当你缝合两张图像时,你会认为存在一个仿射变换(你的"单应性"),它会将一个图像的特征投影到另一个图像上。当你知道这个变换时,你就知道你的图像的相对位置,你可以把它们放在一起#34;。如果你发现的单应变换是坏的,那么拼接也会很糟糕。

我们如何找到单应变换呢?

  • 首先,您检测两个图像上的功能(包含FeatureDetector)。
  • 然后,您描述它们(使用您的DescriptorExtractor)。基本上,这会创建您的功能的表示,以便您可以比较两个功能并查看它们的相似程度。
  • 您将第一张图片(使用DescriptorMatcher)功能与第二张图片中的功能相匹配。这意味着对于第一张图像中的每个特征,您尝试在第二张图像中找到最相似的特征。这些是你的"绘制的功能"。
  • 从这些比赛中,您使用一种名为" RANSAC"找到与您的数据对应的单应变换。我们的想法是,您尝试从所有"绘制的功能中找到一组匹配"这在几何上是有道理的。

但为什么它不起作用?

如果你看一下你的"绘制的功能",你会发现" Go" " Google"的一部分当其他人错了时,一些在boorkmarks中对应。这意味着你的大多数匹配都很糟糕,然后它就可以找到适用于这些数据的单应性,但这是错误的。

为了获得更好的单应性,你需要更多的"好"火柴。因此,您可能需要在图像之间存在更多重叠。

注意:使用" Panorama – Image Stitching in OpenCV"

中使用的图片尝试使用您的代码