假设我们使用同一部相机,用不同视角拍了两张照片,那么如何对这两张图片视角变换进行建模,将相邻的两张图片联系起来,就成为了一个问题。

在这里插入图片描述

上图展示了一些几何变换。单应矩阵的作用在于,将图像平面P1转换为另一个图像平面P2。下面是一个例子:

在这里插入图片描述

上面的projective(射影变换)可以表示为:I1=H×I2
其中H即为单应矩阵。单应矩阵保持图像中的直线,因此,唯一可能的变换是平移、仿射等。H矩阵可以表示为:
h11 h12 h13
h21 h22 h23
h31 h32 h33

在图像拼接这一问题中,我们一旦获得了图像之间的匹配,下一步就是计算单应矩阵。单应矩阵将使用这些匹配的关键点估计图像之间的相对方向变换。

那么,对于全景拼接过程中两张图像相邻的情况,怎样计算单应矩阵呢?我们注意到,这涉及到RANSAC算法,在OpenCV中,调用findHomography()方法时指定cv2.RANSAC参数。

给定原始图像与目标图像,则相应的单应矩阵可以用OpenCV中的findHomography()方法求得。

# pts_src与pts_dst都是numpy arrays
h, status = cv2.findHomography(pts_src, pts_dst, cv2.RANSAC)

给定原始图像与单应矩阵,则转换后的图像可以用OpenCV中的warpPerspective()方法求得。

# im_src是numpy arrays
# size的格式:(width,height)
im_dst = cv2.warpPerspective(im_src, h, size)
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐