从内在矩阵和外在矩阵计算单应矩阵
Compute Homography Matrix from Intrinsic and Extrinsic Matrices
我有来自相机校准的内在 (K) 和外在 ([R|t]) 矩阵。如何计算单应矩阵 (H)?
我已经尝试 H = K [R|t]
使用 R 矩阵 = 0 的 z 分量并更新 H 矩阵,使目标图像点完全位于框架内,但它没有' 给出所需的 H。
实际上,我正在尝试使用给定内在和外在矩阵的单应性来拼接多个图像。完成特征匹配和单应计算后,结果完全没问题,但我需要从 K 和 [ 计算矩阵 H R|t] 矩阵.
似乎有些混乱。如果您使用单应性将图像相互映射,那么您假设它们之间的相机运动是纯旋转。
如果给出了这个旋转,例如作为旋转矩阵 R,则单应性就是 H = K * R * inv(K)。如果不是,您必须从图像中估计它。最简单的情况可能是 pan-tilt 运动(想想三脚架上的相机)。对于这种情况,您只需要每对图像之间有一个点匹配。
编辑:改进初始单应性解决方案。
您还应该研究捆绑调整 - 例如使用优秀的 Ceres 求解器。 B.A 的一个很好的(如果有点过时)介绍。是 https://lear.inrialpes.fr/pubs/2000/TMHF00/Triggs-va99.pdf .
对于图像拼接,基本思想是为每个匹配的图像点对(您可能需要 tens/hundreds,很好地分布在整个图像区域)引入一个位于平面上的辅助 3D 点,即与一个坐标等于零。然后,您联合优化相机参数(内部和外部)和 3D 点位置,以最大限度地减少 3D 点到您匹配的图像点的重投影误差。找到解决方案后,您可以做出以下选择:
- 如果场景离相机较远或图像之间的相机平移可以忽略,您可以将图像之间的相机旋转“转换”为单应性,并使用它们进行拼接。
- 如果不能忽略相机翻译,事情很快就会变得复杂得多。如果存在明显的可见遮挡(场景的区域在一张图像中可见,但在其他图像中不可见),则通常没有 pure-stitching 方法可以在不使用场景的 3D 模型的情况下解决它们。有时您可以使用近似值,例如将场景细分为近似平面的块。
我有来自相机校准的内在 (K) 和外在 ([R|t]) 矩阵。如何计算单应矩阵 (H)?
我已经尝试 H = K [R|t]
使用 R 矩阵 = 0 的 z 分量并更新 H 矩阵,使目标图像点完全位于框架内,但它没有' 给出所需的 H。
实际上,我正在尝试使用给定内在和外在矩阵的单应性来拼接多个图像。完成特征匹配和单应计算后,结果完全没问题,但我需要从 K 和 [ 计算矩阵 H R|t] 矩阵.
似乎有些混乱。如果您使用单应性将图像相互映射,那么您假设它们之间的相机运动是纯旋转。
如果给出了这个旋转,例如作为旋转矩阵 R,则单应性就是 H = K * R * inv(K)。如果不是,您必须从图像中估计它。最简单的情况可能是 pan-tilt 运动(想想三脚架上的相机)。对于这种情况,您只需要每对图像之间有一个点匹配。
编辑:改进初始单应性解决方案。
您还应该研究捆绑调整 - 例如使用优秀的 Ceres 求解器。 B.A 的一个很好的(如果有点过时)介绍。是 https://lear.inrialpes.fr/pubs/2000/TMHF00/Triggs-va99.pdf .
对于图像拼接,基本思想是为每个匹配的图像点对(您可能需要 tens/hundreds,很好地分布在整个图像区域)引入一个位于平面上的辅助 3D 点,即与一个坐标等于零。然后,您联合优化相机参数(内部和外部)和 3D 点位置,以最大限度地减少 3D 点到您匹配的图像点的重投影误差。找到解决方案后,您可以做出以下选择:
- 如果场景离相机较远或图像之间的相机平移可以忽略,您可以将图像之间的相机旋转“转换”为单应性,并使用它们进行拼接。
- 如果不能忽略相机翻译,事情很快就会变得复杂得多。如果存在明显的可见遮挡(场景的区域在一张图像中可见,但在其他图像中不可见),则通常没有 pure-stitching 方法可以在不使用场景的 3D 模型的情况下解决它们。有时您可以使用近似值,例如将场景细分为近似平面的块。