首页 > 解决方案 > 在开放 CV 中使用单应性从同一场景的相同相机拍摄的两个图像之间的视图映射,除了相机位置不平行

问题描述

我试图了解同一场景的两个图像之间的映射点,但相机位置不同。像这样说近似相机位置为粗略的草图和手写道歉。取自 cam1相机1捕获的样本图像和取自 cam2 的样本图像相机2捕获。试图在这两个图像之间进行映射。因为使用的两个相机是相同的(罗技相机)。我认为不需要相机校准。因此,在 SIFT 描述符和特征匹配的帮助下,使用来自图像的良好匹配作为带有 RANSAC 的 Homography 的输入。我得到 3*3 矩阵。验证视图映射。我在 cam1 图像中选择了几个对象(比如图像中的 bin),并尝试使用 warp_perspective 使用 3 * 3 矩阵在 cam2 图像中映射相同的对象,但输出并不好。说这样的话查看地图输出 已选择 cam1 图像(即 bin)中对象的左上角和右下角,并尝试为 cam2 图像中的所需对象绘制边界框。但正如在视图地图输出图像中可见的那样,边界框不适合垃圾箱。

想明白,我哪里错了。是否是相机位置影响,这不应该用于单应性或必须使用多个单应性或必须了解相机位置之间的转换。很困惑。谢谢你。

标签: opencvcomputational-geometryprojectionhomographyperspectivecamera

解决方案


单应性将平面转换为平面。仅当所有匹配项都位于现实世界中的平面上(例如,在平面墙上)或特征点都位于远离两个相机的位置时,才能使用它,因此相机之间的变换可能表示为纯旋转。请参阅此链接以获取更多说明。

在您的情况下,对象位于不同的深度,因此您需要执行相机的立体校准,然后计算深度图以便能够将像素从一个相机映射到另一个相机。


推荐阅读