一、基础知识铺垫

假设在二维平面上的任意点坐标为仿射变换和透视变换的区别,经过变换  后得到点 仿射变换和透视变换的区别

1、图像缩放

变换矩阵:

仿射变换和透视变换的区别

则有:

仿射变换和透视变换的区别

得到:

仿射变换和透视变换的区别

这个变换只作用于对应的分量上,可知变换矩阵正对角线(左上到右下)为缩放因子。

 

2、图像旋转

变换矩阵:

仿射变换和透视变换的区别

 

则有:

仿射变换和透视变换的区别

 

得到:

仿射变换和透视变换的区别

 

可见原本轴维度上的分量变换到维度上的分量,原本轴维度上的分量变换到维度上的分量。可知变换矩阵反对角线(右上到左下)为旋转因子。

 

3、图像错切

水平错切

 

仿射变换和透视变换的区别

变换矩阵:

仿射变换和透视变换的区别

 

则有:

仿射变换和透视变换的区别

 

得到:

 

仿射变换和透视变换的区别

 

垂直错切

仿射变换和透视变换的区别

 

变换矩阵:

仿射变换和透视变换的区别

 

则有:

仿射变换和透视变换的区别

 

得到:

 

仿射变换和透视变换的区别

 

水平垂直一起错切

仿射变换和透视变换的区别

 

变换矩阵:

仿射变换和透视变换的区别

 

则有:

仿射变换和透视变换的区别

 

得到:

 

仿射变换和透视变换的区别

 

4、图像平移

为方便理解,这里需要再添加一个维度变量     仿射变换和透视变换的区别

变换矩阵:

仿射变换和透视变换的区别

 

则有:

仿射变换和透视变换的区别

 

得到:

仿射变换和透视变换的区别

 

很好理解,各在x轴和y轴做偏移,M矩阵最后一列为偏移因子。

 

 

至此,变换矩阵M可以是这样的:

 

仿射变换和透视变换的区别

 

 

二、仿射变换(图像的二维平面变换)

变换矩阵:

仿射变换和透视变换的区别

则有:

仿射变换和透视变换的区别

 

得到:

仿射变换和透视变换的区别

也是对图像的缩放、错位以及平移的综合操作。同时可以看到其中的未知数有6个:

仿射变换和透视变换的区别

求解这个齐次方程,则需要变换前3个坐标点和对应变换后3个目标坐标点,这就是为什么opencv的仿射变换函数需要提供6个坐标点的原理了

 

 

三、透视变换(图像的三维在二维平面的变换)

重点来啦!仿射变换只是二维平面的综合操作。那如果考虑现实三维空间中深度对图像的变换,得引入深度维度z,则一个三维空间得点表示为:

仿射变换和透视变换的区别

 

考虑到二维图像中的点并没有z坐标信息,那就设置为, 其在三维空间得表示为:

仿射变换和透视变换的区别

 

设经过变换后得到三维空间点为:

仿射变换和透视变换的区别

 

变换矩阵:

仿射变换和透视变换的区别

 

则有:

仿射变换和透视变换的区别

 

得到:

仿射变换和透视变换的区别

 

但问题来了,透视变换最终还是要把变换得图画在二维得图像平面上的,点的不好直接在二维图像中表示吧。既然二维图像中只有x轴和y轴,那么就要用z轴的信息对x轴和y轴的坐标信息做一个变换吧,我这里自大地起个名字 —— “降维变换”:

仿射变换和透视变换的区别

 

其中:

仿射变换和透视变换的区别

 

可以理解为x轴分量与z轴分量的夹角的关系。

仿射变换和透视变换的区别

 

可以理解为y轴分量与z轴分量的夹角的关系。

 

这个时候,有8个未知数要求解:

仿射变换和透视变换的区别

 

需要变换前的4个坐标点和变换后的4个目标坐标点来求出。这个就是为什么opencv的透明变换一定要提供8个坐标点的原理了

相关文章:

  • 2021-10-21
  • 2021-11-21
  • 2021-07-13
  • 2022-12-23
  • 2021-07-02
  • 2021-05-29
  • 2021-11-26
  • 2021-07-08
猜你喜欢
  • 2021-05-23
  • 2021-08-26
  • 2021-11-10
  • 2021-12-16
  • 2021-05-18
  • 2022-12-23
相关资源
相似解决方案