当前位置: 首页 > article >正文

图像仿射变换

仿射变换

仿射变换包括平移、旋转、缩放和错切四种基本变换的组合,广泛应用于计算机图形学、图像处理和计算机视觉等领域。

仿射变换的一般矩阵表示

二维空间中,仿射变换可以抽象表示为:

[ 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} xy1 = 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} xyz1 = 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} xy1 = 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} xyz1 = 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} xy1 = 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} xyz1 = 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} xy1 = cosαsinα0sinα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} xyz1 = 10000cosαsinα00sinα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} xyz1 = cosα0sinα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} xyz1 = cosαsinα00sinα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} xy1 = 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} xyz1 = 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} xyz1 = 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} xyz1 = 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} xy1 = cosαsinα0sinαcosα0001 100010txty1 xy1

其中,矩阵乘法的顺序决定了符合变换的顺序,靠前的操作在右边。


http://www.kler.cn/a/565740.html

相关文章:

  • SOME/IP-SD -- 协议英文原文讲解7
  • PH热榜 | 2025-02-28
  • Python核心:Django的日志记录全方位解析
  • C语言入门资料分享源码+PDF速查手册
  • 小程序画带圆角的圆形进度条
  • 辛格迪客户案例 | 北京信立达医药科技有限公司药物警戒管理系统(PVS)项目
  • 帧中继+静态路由实验(大规模网络路由器技术)
  • 论文阅读之基于Syn2Real域的侧扫声纳类水雷目标探测
  • BigDecimal 为什么可以不丢失精度?
  • iOS自归因详细介绍
  • scala基础学习-闭包
  • Qt融合一个服务端连接多个客服端和一个客户端连接多个服务端程序
  • django.core.exceptions.ValidationError
  • 初创公司的域名用什么样的好?
  • 探索 Hutool - JSON:高效的 JSON 处理利器
  • java流程控制(Scanner Random swich 分支语句 循环语句)
  • java后端开发day23--面向对象进阶(四)--抽象类、接口、内部类
  • 超市里的货物价调整
  • 自然语言处理NLP入门 -- 第六节命名实体识别
  • C++20新特性:`[[no_unique_address]]`、`[[likely]]`和`[[unlikely]]`的探索与