如何在2个不同的相机之间进行单应性?

时间:2015-02-23 23:49:04

标签: opencv kinect

我一直在研究opencv并希望匹配从2个不同摄像头拍摄的图像。基本上是Kinect和外置摄像头。  我发现单应性技术是一种很好的技术,但却有很多问题。  在不扭曲图像之后,我是否必须在未失真图像上再次找到匹配点(通过使用棋盘)来获得Homography矩阵?棋盘需要有完美的方块吗?  这个问题有什么简单的解决方案吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

相机是您的测量设备。您已经校准它们以消除不准确性,并且为了获得正确的单应性,您需要使用这种未失真的,准确的数据。要计算单应性,您现在需要在第一张图像中找到要素,在第二张图像中找到它们的匹配。在两个图像(或至少它们的一些子集)中找到的点必须对应于位于平面上的世界点。匹配集不需要是完美的,因为OpenCV中的单应性计算过程可以使用RANSAC进行稳健估计,因此能够处理异常值(至少在某种程度上)。

根据我的理解,在您的应用程序中,您可以为两个摄像机都显示校准模式,这使事情变得更加容易 - 只需在两个图像中查找棋盘并建立匹配,然后将其传递给单应计算功能。你可以确定世界上的所有点都在飞机上。至于方形和大小 - 只要两个摄像机看到相同的模式,它对校准都很重要,而不是单应计算,但是你可能在使用OpenCV函数找到一个不准确的棋盘时遇到麻烦。

答案 1 :(得分:1)

谢谢你们。 我最终在两个失真(正常)图像之间找到了Homography矩阵,并进行了透视变换。 这显然是最简单的方式而且有效,似乎没有从校准图像中获得更好的结果:D

答案 2 :(得分:0)

哦,我有同样的问题,我以不同的方式解决了它。我只是使用了一个小的校准:要求用户将他/她的手放在相机图像上的特定点上,然后捕获该位置。重复3次以获得矩形的4个角。然后,我用一个公式将一个点从一个梯形映射到一个矩形,瞧!现在我已经将坐标从Kinect转换到相机空间。

它有局限性:Kinect和相机必须尽可能接近,否则当用户离开他所站立的飞机(靠近或远离Kinect时)会出现不准确的情况。但它适用于大多数情况,测试它,你会看到。

我甚至为此制作了一个小型图书馆(在C#和AS3中),在下午6点(格林威治标准时间-5)之后给我发消息,我会发送给你或者在这里发布一个小的演示应用程序;并编辑并发布链接到我找到公式的网站,现在我再也找不到了。

在我们提出这个问题之前,我的团队还在两周没有结果的情况下与OpenCV的单应性进行了斗争。