单应性变换、仿射变换、透视变换 很到位

引用 在路上 的博文 https://blog.csdn.net/qq_29462849/article/details/80728757

单应性变换

如下图所示的平面的两幅图像。红点表示两幅图像中的相同物理点,我们称之为对应点。这里显示了四种不同颜色的四个对应点 - 红色,绿色,黄色和橙色。 一个Homography是一个变换(3×3矩阵),将一个图像中的点映射到另一个图像中的对应点。单应性变换其实就是一个平面到另一个平面的变换关系。 

单应性变换、仿射变换、透视变换 很到位_第1张图片

 

仿射变换

仿射变换是一种二维坐标到二维坐标之间的线性变换(相同平面),它保持了二维图形的“平直性”(直线经过变换之后依然是直线)和“平行性”(二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变),但是角度会改变。任意的仿射变换都能表示为乘以一个矩阵(线性变换),再加上一个向量 (平移) 的形式。 

这里写图片描述
单应性变换、仿射变换、透视变换 很到位_第2张图片

 

透视变换

透视变换是将图片投影到一个新的视平面,也称作投影映射.它是二维(x,y)到三维(X,Y,Z),再到另一个二维(x′,y′)(x′,y′)空间的映射.相对于仿射变换,它提供了更大的灵活性,将一个四边形区域映射到另一个四边形区域(不一定是平行四边形).它不止是线性变换.但也是通过矩阵乘法实现的,使用的是一个3x3的矩阵,矩阵的前两行与仿射矩阵相(m11,m12,m13,m21,m22,m23)(m11,m12,m13,m21,m22,m23),也实现了线性变换和平移,第三行用于实现透视变换. 

单应性变换、仿射变换、透视变换 很到位_第3张图片 
单应性变换、仿射变换、透视变换 很到位_第4张图片

 

在看看另外一个的解释吧

图像处理的仿射变换和透视变换

其实一直也没理解“仿射”俩字是啥意思,但是大家都这么叫,其实仿射变换和透视变换更直观的叫法可以叫做“平面变换”和“空间变换”或者“二维坐标变换”和“三维坐标变换”。如果这么命名的话,其实很显然,这俩是一回事,只不过一个是二维坐标(x,y),一个是三维坐标(x,y,z)。也就是:

仿射变换: 
这里写图片描述

透视变换: 
这里写图片描述

从另一个角度也能说明三维变换和二维变换的意思,仿射变换的方程组有6个未知数,所以要求解就需要找到3组映射点,三个点刚好确定一个平面。透视变换的方程组有8个未知数,所以要求解就需要找到4组映射点,四个点就刚好确定了一个三维空间。

写个程序求解线性方程组相信不是什么难事。

解出方程组之后,就可以按照上面的方程,找到与结果图像上对应的源像素点。然后做插值。

看一下效果啊:

原图: 
单应性变换、仿射变换、透视变换 很到位_第5张图片

仿射变换之后: 
单应性变换、仿射变换、透视变换 很到位_第6张图片

透视变换之后: 
单应性变换、仿射变换、透视变换 很到位_第7张图片

从上图也能看出来区别,仿射变换之后还是平行四边形,透视变换之后就只剩下四边形了形状不规则啊。图像的旋转缩放理论上都能用仿射变换来实现(90度、180度、270度的旋转用仿射变换实现不划算)。透视变换的用途可能更多一些,比如: 
你扫到的二维码是这样的: 
单应性变换、仿射变换、透视变换 很到位_第8张图片
这样你直接读二维码信息肯定不行,所以需要透视变换一下,成这样: 
单应性变换、仿射变换、透视变换 很到位_第9张图片 
就可以读出信息了。

刚才讲,求解仿射变换需要3组对应的点,求解透视变换需要4组对应的点,如果找到的映射点的数量少于3组或4组就肯定解不出来,但是如果多于3组或4组怎么办?那就要最小二乘法做拟合,找到一个最佳变换方程。这个不细说了。

你可能感兴趣的:(计算机视觉)