[转]OpenCV仿射变换+投射变换+单应性矩阵

  • estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。
  • getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6.
  • warpAffine():对输入图像进行仿射变换
  • findHomography: 计算多个二维点对之间的最优单映射变换矩阵 H(3行x3列) ,使用最小均方误差或者RANSAC方法 。(当已知对应点较多时,建议使用该方法)
  • getPerspectiveTransform():计算4个二维点对之间的透射变换矩阵 H(3行x3列)
  • warpPerspective(): 对输入图像进行透射变换
  • perspectiveTransform():对二维或者三维矢量进行透射变换,也就是对输入二维坐标点或者三维坐标点进行投射变换。
  • estimateAffine3D:计算多个三维点对之间的最优三维仿射变换矩阵H (3行x4列)
  • transform():对输入的N维矢量进行变换,可用于进行仿射变换、图像色彩变换.
  • findFundamentalMat:计算多个点对之间的基矩阵H。
快速解决:
  • 问题1:如何计算3个二维点对之间的仿射变换矩阵?
    答:使用getAffineTransform()。
  • 问题2:如何计算多个二维点对之间的仿射变换矩阵(使用误差最小准则 )?
    答:使用estimateRigidTransform()或者findHomography。
  • 问题3:如何计算4个二维点对之间的透射变换?
    答:使用getPerspectiveTransform()。
  • 问题4:如何计算多个三维点对之间的仿射变换?
    答:使用estimateAffine3D。
  • 问题5:如何对输入图像进行仿射变换?
    答:使用warpAffine()。
  • 问题6:如何对输入图像进行透射变换?
    答:使用perspectiveTransform()
      
  • 问题7:如何对输入的二维点对进行仿射变换?
    答:使用transform()。
  • 问题8:如何对输入的三维点对进行投射变换?
    答:使用perspectiveTransform()。
 
 
注:perspectiveTransform实现二维点或者三维点之间的对应关系,因此要实现图像的透视变换,需要提取图片的所有的坐标点,实现点的变换即实现图像的变换,这种方法比较麻烦,但是目前还不清楚有没有直接实现图像透视变换的方法。
  图片的仿射变换可以直接使用warpAffine方法实现,比较简单。
posted @ 2014-07-13 23:51  dupuleng  阅读(2337)  评论(0编辑  收藏  举报