图像仿射变换
仿射变换
仿射变换包括平移、旋转、缩放和错切四种基本变换的组合,广泛应用于计算机图形学、图像处理和计算机视觉等领域。
仿射变换的一般矩阵表示
在二维空间中,仿射变换可以抽象表示为:
[ x ′ y ′ 1 ] = [ a b t x c d t y 0 0 1 ] [ x y 1 ] \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} =\begin{bmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} x′y′1 = ac0bd0txty1 xy1
其中, ( x , y ) (x,y) (x,y)是原始图像中的一个点, ( x ′ , y ′ ) (x′,y′) (x′,y′)是经过变换后的图像中的对应点。 ( a , b , c , d ) (a,b,c,d) (a,b,c,d)描述线性变换部分, ( t x , t y ) (t_x,t_y) (tx,ty)用于描述平移 。
在三维空间中,仿射变换可以抽象表示为:
[ x ′ y ′ z ′ 1 ] = [ a b c t x d e f t y g h i t z 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} =\begin{bmatrix} a & b & c & t_x \\ d & e & f & t_y \\ g & h & i & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = adg0beh0cfi0txtytz1 xyz1
其中, ( x , y , z ) (x,y,z) (x,y,z) 是原始图像中的一个点, ( x ′ , y ′ , z ′ ) (x′,y′,z') (x′,y′,z′) 是经过变换后的图像中的对应点。 ( a , b , c , d , e , f , g , h , i ) (a,b,c,d,e,f,g,h,i) (a,b,c,d,e,f,g,h,i)描述线性变换部分, ( t x , t y , t z ) (t_x,t_y,t_z) (tx,ty,tz) 用于描述平移 。
四种基本变换的矩阵表示
1. 平移(Translation)
平移变换是指将图像中的所有点沿某个方向移动相同的距离。
其二维空间矩阵表示为:
[ x ′ y ′ 1 ] = [ 1 0 t x 0 1 t y 0 0 1 ] [ x y 1 ] \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} =\begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} x′y′1 = 100010txty1 xy1
其中, ( x , y ) (x,y) (x,y)是原始图像中的一个点, ( x ′ , y ′ ) (x′,y′) (x′,y′)是经过变换后的图像中的对应点。 t x t_x tx 和 t y t_y ty 分别是沿 x 轴和 y 轴的平移距离。
其三维空间矩阵表示为:
[ x ′ y ′ z ′ 1 ] = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} =\begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1& t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = 100001000010txtytz1 xyz1
其中, ( x , y , z ) (x,y,z) (x,y,z) 是原始图像中的一个点, ( x ′ , y ′ , z ′ ) (x′,y′,z') (x′,y′,z′) 是经过变换后的图像中的对应点。 t x t_x tx 、 t y t_y ty 和 t z t_z tz分别是沿 x 轴、 y 轴和 z 轴的平移距离。
2. 缩放(Scaling)
缩放变换用于改变图像各轴的大小。
其二维空间矩阵表示为:
[ x ′ y ′ 1 ] = [ s x 0 0 0 s y 0 0 0 1 ] [ x y 1 ] \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} =\begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} x′y′1 = sx000sy0001 xy1
其中, ( x , y ) (x,y) (x,y)是原始图像中的一个点, ( x ′ , y ′ ) (x′,y′) (x′,y′)是经过变换后的图像中的对应点。 s x s_x sx 和 s y s_y sy 分别是沿 x 轴和 y 轴的缩放因子。当 s x s_x sx= s y s_y sy时,图像均匀缩放。
其三维空间矩阵表示为:
[ x ′ y ′ z ′ 1 ] = [ s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} =\begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z& 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = sx0000sy0000sz00001 xyz1
其中, ( x , y , z ) (x,y,z) (x,y,z) 是原始图像中的一个点, ( x ′ , y ′ , z ′ ) (x′,y′,z') (x′,y′,z′) 是经过变换后的图像中的对应点。 s x s_x sx 、 s y s_y sy 和 s z s_z sz分别是沿 x 轴、 y 轴和 z 轴的缩放因子。当 s x s_x sx= s y s_y sy= s z s_z sz时,图像均匀缩放。
3. 旋转(Rotation)
旋转变换是指将图像绕某个点(通常是原点)旋转一个角度。
其二维空间矩阵表示为:
[ x ′ y ′ 1 ] = [ c o s α − s i n α 0 s i n α c o s α 0 0 0 1 ] [ x y 1 ] \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} =\begin{bmatrix} cos α & - sin α & 0 \\ sin α & cos α & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} x′y′1 = cosαsinα0−sinαcosα0001 xy1
其中, ( x , y ) (x,y) (x,y)是原始图像中的一个点, ( x ′ , y ′ ) (x′,y′) (x′,y′)是经过变换后的图像中的对应点。α 是旋转角度,旋转中心是图像原点,不是中心点,原点通常是左上角。
其三维空间矩阵表示为:
1️⃣绕 x 轴旋转:
[ x ′ y ′ z ′ 1 ] = [ 1 0 0 0 0 cos α − sin α 0 0 sin α cos α 0 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} =\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos \alpha & -\sin \alpha & 0 \\ 0 & \sin \alpha & \cos \alpha & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = 10000cosαsinα00−sinαcosα00001 xyz1
2️⃣绕 y 轴旋转:
[ x ′ y ′ z ′ 1 ] = [ cos α 0 sin α 0 0 1 0 0 − sin α 0 cos α 0 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} =\begin{bmatrix} \cos \alpha & 0 & \sin \alpha & 0 \\ 0 & 1 & 0 & 0 \\ -\sin \alpha & 0 & \cos \alpha & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = cosα0−sinα00100sinα0cosα00001 xyz1
3️⃣绕 z 轴旋转:
[ x ′ y ′ z ′ 1 ] = [ cos α − sin α 0 0 sin α cos α 0 0 0 0 1 0 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} =\begin{bmatrix} \cos \alpha & -\sin \alpha & 0 & 0 \\ \sin \alpha & \cos \alpha & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = cosαsinα00−sinαcosα0000100001 xyz1
其中, ( x , y , z ) (x,y,z) (x,y,z) 是原始图像中的一个点, ( x ′ , y ′ , z ′ ) (x′,y′,z') (x′,y′,z′) 是经过变换后的图像中的对应点。 α α α是沿各轴的旋转角度。
4. 错切(Shearing)
错切变换是一种较为特殊的仿射变换,它会使图像在某个方向上发生倾斜。
其二维空间矩阵表示为:
[ x ′ y ′ 1 ] = [ 1 s h x 0 s h y 1 0 0 0 1 ] [ x y 1 ] \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} =\begin{bmatrix} 1 & sh_x & 0 \\ sh_y & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} x′y′1 = 1shy0shx10001 xy1
其中, ( x , y ) (x,y) (x,y)是原始图像中的一个点, ( x ′ , y ′ ) (x′,y′) (x′,y′)是经过变换后的图像中的对应点。 s h x sh_x shx和 s h y sh_y shy分别是沿 x 轴和 y 轴的错切因子。
其三维空间矩阵表示为:
1️⃣绕 x 轴错切:
[ x ′ y ′ z ′ 1 ] = [ 1 a b 0 0 1 0 0 0 0 1 0 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} =\begin{bmatrix} 1 & a & b & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = 1000a100b0100001 xyz1
2️⃣绕 y 轴错切:
[ x ′ y ′ z ′ 1 ] = [ 1 0 0 0 c 1 d 0 0 0 1 0 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} =\begin{bmatrix} 1 & 0 & 0 & 0 \\ c & 1 & d & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = 1c0001000d100001 xyz1
3️⃣绕 z 轴错切:
[ x ′ y ′ z ′ 1 ] = [ 1 0 0 0 0 1 0 0 e f 1 0 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} =\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ e & f & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = 10e001f000100001 xyz1
其中, ( x , y , z ) (x,y,z) (x,y,z) 是原始图像中的一个点, ( x ′ , y ′ , z ′ ) (x′,y′,z') (x′,y′,z′) 是经过变换后的图像中的对应点。 ( a , b , c , d , e , f ) (a,b,c,d,e,f) (a,b,c,d,e,f) 是错切参数,分别控制沿不同方向的错切程度。
基本变换的组合
通过矩阵乘法,我们可以将多个基本变换组合成一个复合变换。例如,二维空间下,先平移再旋转,其复合变换矩阵为:
[ x ′ y ′ 1 ] = [ c o s α − s i n α 0 s i n α c o s α 0 0 0 1 ] [ 1 0 t x 0 1 t y 0 0 1 ] [ x y 1 ] \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} =\begin{bmatrix} cos α & - sin α & 0 \\ sin α & cos α & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} x′y′1 = cosαsinα0−sinαcosα0001 100010txty1 xy1
其中,矩阵乘法的顺序决定了符合变换的顺序,靠前的操作在右边。