我一直在研究opencv,想要匹配从两个不同的摄像头拍摄的图像。基本上是一个Kinect和一个外置摄像头。我发现单应性是一种很好的技术,但有很多问题。在对图像进行去失真之后,我是否必须在未失真的图像上再次找到匹配点(通过使用棋盘)才能获得单应性矩阵?棋盘需要有完美的方块吗?这个问题有什么简单的解决方案吗?
谢谢!
发布于 2015-02-24 17:39:06
相机是你的测量设备。您已经校准了它们,以消除不准确,并且为了获得正确的单应性,您需要使用这些未失真的、准确的数据。为了计算单应性,你现在需要在第一张图像中找到特征,并在第二张图像中找到它们的匹配。在两个图像(或至少其中的某个子集)中找到的点必须对应于位于平面上的世界点。匹配集不需要完美,因为OpenCV中的单应性计算过程可以使用RANSAC进行鲁棒估计,因此能够处理异常值(至少在某种程度上)。
据我所知,在你的应用程序中,你可以有一个对两个摄像头都可见的校准模式,这使得事情变得更加容易-只需在两个图像中查找棋盘并建立匹配,然后将其传递给homograpy计算函数。您可以确保世界上的所有点都位于一个平面上。至于正方形的形状和大小-只要两个摄像头看到相同的图案,它对于校准没有关系,对于单应性计算没有关系,但是你可能会在使用OpenCV函数找到不准确的棋盘时遇到一些麻烦。
发布于 2015-02-28 22:21:46
谢谢你们。我最终找到了两个失真(正常)图像之间的单应性矩阵,并进行了透视变换。这显然是最简单的方法,而且它起作用了,似乎没有从校准的图像中获得更好的结果:D
发布于 2015-02-28 01:31:40
哦,我也有同样的问题,但我用不同的方法解决了它。我简单地使用了一个小校准:让用户将他/她的手定位在相机图像上的特定点上,然后捕获该位置。再重复3次,得到一个矩形的4个角。然后,我使用一个公式将一个点从梯形映射到矩形,瞧!现在我已经将坐标从Kinect转换到相机空间。
它有局限性: Kinect和摄像头必须尽可能靠近,否则当用户离开他所站的飞机(向Kinect靠近或更远)时,就会出现不准确的情况。但它在大多数情况下都工作得很好,测试一下就知道了。
我甚至为此做了一个小的库(用C#和AS3),在下午6点(格林威治标准时间5点)后给我发一条消息,我会把它发送给你或贴在这里,还有一个小的演示应用程序;我还编辑并发布了我找到公式的网站的链接,现在我找不到了。
我的团队也与OpenCV的单应性进行了两周的斗争,但没有结果,直到我们提出了这一点。
https://stackoverflow.com/questions/28685807
复制相似问题