1

我必须缝合两个图像并且我使用openCV4Android。我阅读了有关缝合图像的文档和一些线程,例如:全景 - OpenCV 中的图像拼接,使用 Android 的OpenCV的图像之间的单应性缝合多个图像与 Android 中的 ORB 匹配错误和其他。起初,这似乎很容易。但结果很奇怪!下面,您可以看到我用于测试和结果的两张图像:

这是“图像1”:

在此处输入图像描述

这是“image2”:

在此处输入图像描述

您可以看到绘制的特征:

在此处输入图像描述

这是翘曲的结果image1

在此处输入图像描述

我做错了什么?或者可能是我没有理解好?

4

1 回答 1

1

快速回答:

我会说你的图像之间没有足够的重叠。如果你查看你的匹配项(你称之为“绘制的特征”),它们中的大多数都是错误的。作为第一个测试,尝试拼接两个具有 80% 重叠的图像。

更多细节:

大图:

当您拼接两张图像时,您假设存在一个仿射变换(您的“单应性”),它将把一张图像的特征投影到另一张图像上。当您知道这种变换时,您就知道图像的相对位置,并且可以“将它们放在一起”。如果您发现的单应变换不好,那么拼接也会不好。

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

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

但为什么它在这里不起作用?

如果您查看您的“绘制的特征”,您会发现“Google”的“Go”部分只有少数几个和书签中的一些对应,而其他的却是错误的。这意味着您的大多数匹配都是错误的,然后可以找到适用于该数据的单应性,但这是错误的。

为了获得更好的单应性,您需要更多的“好”匹配。因此,您可能需要在图像之间有更多的重叠。

注意:使用“全景图 - OpenCV 中的图像拼接”中使用的图像尝试您的代码

于 2014-12-26T12:35:00.413 回答