【发布时间】:2015-02-23 23:49:04
【问题描述】:
我一直在研究 opencv 并希望匹配从 2 个不同相机拍摄的图像。基本上是一个 Kinect 和一个外部摄像头。 我发现单应性是一种很好的技术,但有很多问题。 对图像进行不失真后,我是否必须在未失真的图像上再次找到匹配点(通过使用棋盘)才能得到 Homography 矩阵?棋盘需要有完美的方格吗? 这个问题有什么简单的解决办法吗?
谢谢!
【问题讨论】:
我一直在研究 opencv 并希望匹配从 2 个不同相机拍摄的图像。基本上是一个 Kinect 和一个外部摄像头。 我发现单应性是一种很好的技术,但有很多问题。 对图像进行不失真后,我是否必须在未失真的图像上再次找到匹配点(通过使用棋盘)才能得到 Homography 矩阵?棋盘需要有完美的方格吗? 这个问题有什么简单的解决办法吗?
谢谢!
【问题讨论】:
相机是您的测量设备。您已经对它们进行了校准以消除不准确性,并获得正确的单应性,您需要使用这些未失真的准确数据。要计算单应性,您现在需要在第一张图像中找到特征并在第二张图像中找到它们的匹配项。在两个图像中找到的点(或至少它们的某个子集)必须对应于位于平面上的世界点。匹配集不需要完美,因为 OpenCV 中的单应性计算过程可以使用 RANSAC 进行稳健估计,因此能够处理异常值(至少在某种程度上)。
据我了解,在您的应用程序中,您可以看到两个相机的校准模式,这使事情变得更加容易 - 只需在两个图像中查找棋盘并建立匹配,然后将其传递给单应计算函数。你可以确定世界点都在一个平面上。至于正方形的形状和大小 - 只要两个相机看到相同的图案,它对校准而不是单应性计算很重要,但是使用 OpenCV 函数找到不准确的棋盘可能会有些麻烦。
【讨论】:
谢谢各位。 我最终找到了两个失真(正常)图像之间的 Homography 矩阵,并进行了透视变换。 这显然是最简单的方法并且有效,但似乎没有从校准图像中获得更好的结果:D
【讨论】:
哦,我遇到了同样的问题,但我以不同的方式解决了它。我只是使用了一个小校准:要求用户将他/她的手放在相机图像上的特定点上,然后捕获该位置。再重复 3 次以获得矩形的 4 个角。然后,我使用一个公式将一个点从梯形映射到一个矩形,瞧!现在我已经将坐标从 Kinect 转换到相机空间。
它有局限性:Kinect 和摄像头必须尽可能靠近,否则当用户离开他所站立的平面(靠近或靠近 Kinect)时会出现不准确。但它在大多数情况下都足够好用,测试一下,你就会看到。
我什至为此制作了一个小型库(在 C# 和 AS3 中),在下午 6 点(GMT -5)之后给我发消息,我会将其发送给您或在此处发布,并附带一个小型演示应用程序;并编辑并发布指向我找到公式的网站的链接,我现在找不到了。
我的团队也在 OpenCV 的单应性问题上苦苦挣扎了两周没有结果,直到我们想出了这个。
【讨论】: