单应矩阵与透视变换矩阵

透视变换矩阵与单应矩阵

1. 单应矩阵

单应矩阵Wikipedia定义为:

In the field of computer vision, any two images of the same planar surface in space are related by a homography (assuming a pinhole camera model).

在计算机视觉领域,空间同一平面的任意两幅图像被单应矩阵联系着(假设在针孔相机模型中),即一个相机拍摄空间同一平面的两张图像,这两张图像之间的映射关系可以用单应矩阵表示。
在两视几何中,也可以这样理解,两架相机拍同一空间上得到两幅图像A、B,其中图像A到图像B存在一种变换,而且这种变换是一一对应的关系,这个变换矩阵用单应矩阵表示1.
OpenCV中可以用函数findHomography计算得到单应矩阵H。

2. 透视变换矩阵

透视变换矩阵(Perspective Transformation Mat),也称为投影映射矩阵(Porjective Mapping Mat),透视变换保持直线性,仿射变换是透视变换的一种特殊情况(仿射变换保持平行性).
OpenCV中可以用函数getPerspectiveTransform计算得到投影矩阵P

3. OpenCV中相关变换矩阵:

转载自原文
1. estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。
2. getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6.
3. warpAffine():对输入图像进行仿射变换
4. findHomography: 计算多个二维点对之间的最优单映射变换矩阵 H(3行x3列) ,使用最小均方误差或者RANSAC方法 。
5. getPerspectiveTransform():计算4个二维点对之间的透射变换矩阵 H(3行x3列)
6. warpPerspective(): 对输入图像进行透射变换
7. perspectiveTransform():对二维或者三维矢量进行透射变换,也就是对输入二维坐标点或者三维坐标点进行投射变换。
8. estimateAffine3D:计算多个三维点对之间的最优三维仿射变换矩阵H (3行x4列)
9. transform():对输入的N维矢量进行变换,可用于进行仿射变换、图像色彩变换.
10. findFundamentalMat:计算多个点对之间的基矩阵H。

快速解决:

  • 问题1:如何计算3个二维点对之间的仿射变换矩阵?
    答:使用getAffineTransform()。

  • 问题2:如何计算多个二维点对之间的仿射变换矩阵(使用误差最小准则 )?
    答:使用estimateRigidTransform()或者findHomography。

  • 问题3:如何计算4个二维点对之间的透射变换?
    答:使用getPerspectiveTransform()。

  • 问题4:如何计算多个三维点对之间的仿射变换?
    答:使用estimateAffine3D。

  • 问题5:如何对输入图像进行仿射变换?
    答:使用warpAffine()。

  • 问题6:如何对输入图像进行透射变换?
    答:使用perspectiveTransform()。

  • 问题7:如何对输入的二维点对进行仿射变换?
    答:使用transform()。

  • 问题8:如何对输入的三维点对进行投射变换?
    答:使用perspectiveTransform()。

展开阅读全文

没有更多推荐了,返回首页