在开放 CV 中使用单应性从同一场景的相同相机拍摄的两个图像之间的视图映射,除了相机位置不平行
Posted
技术标签:
【中文标题】在开放 CV 中使用单应性从同一场景的相同相机拍摄的两个图像之间的视图映射,除了相机位置不平行【英文标题】:view mapping between two images taken from same cameras of same scene using homography in open CV, except the camera positions are not parallel 【发布时间】:2021-07-29 18:23:50 【问题描述】:我试图了解同一场景的两个图像之间的映射点,但相机位置不同。像这样说 为粗略的草图和手写道歉。从 cam1 获取的样本图像和从 cam2 获取的样本图像。试图在这两个图像之间进行映射。因为使用的两个相机是相同的(罗技相机)。我认为不需要相机校准。因此,在 SIFT 描述符和特征匹配的帮助下,使用来自图像的良好匹配作为带有 RANSAC 的 Homography 的输入。我得到 3*3 矩阵。验证视图映射。我在 cam1 图像中选择了几个对象(比如图像中的 bin),并尝试使用 warp_perspective 使用 3 * 3 矩阵在 cam2 图像中映射相同的对象,但输出并不好。说这样的话 选择了 cam1 图像(即箱)中对象的左上角和右下角,并尝试为 cam2 图像中的所需对象绘制边界框。 但在视图地图输出图像中可见,边界框不适用于 bin。
想明白,我哪里错了。是否是相机位置影响,这不应该用于单应性或必须使用多个单应性或必须了解相机位置之间的转换。很混乱。谢谢。
【问题讨论】:
【参考方案1】:单应性将平面转换为平面。只有当所有匹配都位于现实世界中的一个平面上(例如平面墙上)或特征点都远离两个相机时,才能使用它,因此相机之间的转换可能表示为纯旋转。请参阅此link 以获取更多说明。
在您的情况下,对象位于不同的深度,因此您需要对摄像机执行 stereo calibration,然后计算 depth map 以便能够将像素从一台摄像机映射到另一台摄像机。
【讨论】:
以上是关于在开放 CV 中使用单应性从同一场景的相同相机拍摄的两个图像之间的视图映射,除了相机位置不平行的主要内容,如果未能解决你的问题,请参考以下文章
opencv cv2.findHomography sift、surf特征匹配 单应性矩阵理解
OpenCV中的「透视变换 / 投影变换 / 单应性」—cv.warpPerspectivecv.findHomography