【计算机视觉(2)】图像几何变换基础篇:从平移旋转到投影变换

文章目录

    • [📚 学习路线图](#📚 学习路线图)
    • 本文内容一览(快速理解)
    • [一、图像变换是什么(Image Transformation):理解两种变换类型](#一、图像变换是什么(Image Transformation):理解两种变换类型)
      • [1.1 图像变换的两种类型(Image Filtering vs Image Warping):滤波改变像素值,变形改变像素位置](#1.1 图像变换的两种类型(Image Filtering vs Image Warping):滤波改变像素值,变形改变像素位置)
    • [二、基本几何变换(2D Geometric Transformations):平移、旋转、缩放的基础操作](#二、基本几何变换(2D Geometric Transformations):平移、旋转、缩放的基础操作)
      • [2.1 什么是几何变换(Parametric (global) warping):坐标变换机器](#2.1 什么是几何变换(Parametric (global) warping):坐标变换机器)
      • [2.2 平移(Translation):改变位置而不改变形状和大小](#2.2 平移(Translation):改变位置而不改变形状和大小)
      • [2.3 旋转(Rotation):改变方向而不改变形状和大小](#2.3 旋转(Rotation):改变方向而不改变形状和大小)
      • [2.4 缩放(Uniform scaling / Non-uniform scaling):改变大小,均匀或非均匀](#2.4 缩放(Uniform scaling / Non-uniform scaling):改变大小,均匀或非均匀)
      • [2.5 相似变换(Similarity Transformation):平移、旋转、均匀缩放的组合](#2.5 相似变换(Similarity Transformation):平移、旋转、均匀缩放的组合)
    • [三、线性变换(Common linear transformations / 2x2 Matrices):用矩阵统一表示变换](#三、线性变换(Common linear transformations / 2x2 Matrices):用矩阵统一表示变换)
      • [3.1 线性变换的矩阵表示(All 2D Linear Transformations):用2×2矩阵表示缩放、旋转、剪切](#3.1 线性变换的矩阵表示(All 2D Linear Transformations):用2×2矩阵表示缩放、旋转、剪切)
      • [3.2 平移不是线性变换(Translation is not a linear operation):平移不能用2×2矩阵表示](#3.2 平移不是线性变换(Translation is not a linear operation):平移不能用2×2矩阵表示)
    • [四、齐次坐标(Homogeneous coordinates):统一表示所有变换的数学工具](#四、齐次坐标(Homogeneous coordinates):统一表示所有变换的数学工具)
      • [4.1 齐次坐标的概念(Homogeneous coordinates):通过添加坐标维度统一表示变换](#4.1 齐次坐标的概念(Homogeneous coordinates):通过添加坐标维度统一表示变换)
      • [4.2 用齐次坐标表示平移(Translation Solution):用3×3矩阵表示平移](#4.2 用齐次坐标表示平移(Translation Solution):用3×3矩阵表示平移)
      • [4.3 用齐次坐标表示旋转和缩放(Rotation and Scaling in Homogeneous Coordinates):统一用3×3矩阵表示](#4.3 用齐次坐标表示旋转和缩放(Rotation and Scaling in Homogeneous Coordinates):统一用3×3矩阵表示)
    • [五、变换的层次(Affine transformations / Projective Transformations):从仿射到投影的递进关系](#五、变换的层次(Affine transformations / Projective Transformations):从仿射到投影的递进关系)
      • [5.1 仿射变换(Affine Transformation / Basic affine transformations):线性变换和平移的组合](#5.1 仿射变换(Affine Transformation / Basic affine transformations):线性变换和平移的组合)
      • [5.2 投影变换(Projective Transformation / Homographies / Planar Perspective Maps):最一般的平面变换](#5.2 投影变换(Projective Transformation / Homographies / Planar Perspective Maps):最一般的平面变换)
      • [5.3 变换的层次关系(These transformations are a nested set of groups):嵌套的变换集合](#5.3 变换的层次关系(These transformations are a nested set of groups):嵌套的变换集合)
    • [📝 本章总结](#📝 本章总结)

📌 适合对象 :计算机视觉初学者、图像处理入门者

⏱️ 预计阅读时间 :40-50分钟

🎯 学习目标:理解图像变换的基本概念、掌握常见的几何变换、了解变换的层次关系


📚 学习路线图

第一步
理解图像变换的两种类型
滤波 vs 变形 第二步
掌握基本几何变换
平移、旋转、缩放(重点) 第三步
理解线性变换
矩阵表示和性质 第四步
学习齐次坐标
统一表示所有变换 第五步
理解变换层次
仿射变换和投影变换


本文内容一览(快速理解)

  1. 图像变换的两种类型:图像滤波改变像素值,图像变形改变像素位置

  2. 基本几何变换:平移、旋转、缩放是图像变换的基础操作

  3. 线性变换:可以用2×2矩阵表示,包括缩放、旋转、剪切、镜像

  4. 齐次坐标:通过添加一个坐标维度,可以统一表示包括平移在内的所有变换

  5. 变换层次:线性变换 → 仿射变换 → 投影变换,层次递进,功能越来越强大


一、图像变换是什么(Image Transformation):理解两种变换类型

这一章要建立的基础:理解图像变换的基本概念,区分两种不同类型的图像变换。

核心问题:当我们说"变换图像"时,到底指的是什么?有哪些不同的变换方式?


!NOTE

📝 关键点总结:图像变换分为两种类型:图像滤波(改变像素值范围)和图像变形(改变像素位置定义域)。几何变换属于图像变形,改变的是像素的空间位置。

1.1 图像变换的两种类型(Image Filtering vs Image Warping):滤波改变像素值,变形改变像素位置

概念的本质

图像变换可以分为两种基本类型:

  1. 图像滤波(Image Filtering) :改变图像的范围(range)

    • 改变像素的值(亮度、颜色)
    • 公式: g ( x ) = h ( f ( x ) ) g(x) = h(f(x)) g(x)=h(f(x))
    • 例如:亮度调整、颜色增强、模糊处理
  2. 图像变形(Image Warping) :改变图像的定义域(domain)

    • 改变像素的位置(坐标)
    • 公式: g ( x ) = f ( h ( x ) ) g(x) = f(h(x)) g(x)=f(h(x))
    • 例如:旋转、缩放、平移

图解说明
图像变形
改变像素位置 图像滤波
改变像素值 应用函数h 像素值改变 坐标变换h 位置改变 新图像
g(x) = f(h(x)) 原图像
f(x) 结果:几何形状改变 新图像
g(x) = h(f(x)) 原图像
f(x) 结果:亮度/颜色改变

💡 说明:图像滤波改变的是"像素值是什么",图像变形改变的是"像素在哪里"

类比理解

  • 图像滤波:就像给照片调色或加滤镜,照片中物体的位置不变,但颜色、亮度改变了
  • 图像变形:就像把照片旋转或拉伸,照片中物体的位置改变了,但颜色、亮度保持不变

实际例子

复制代码
图像滤波示例:
- 亮度调整:让整张照片变亮或变暗
- 模糊处理:让照片变得柔和
- 锐化处理:让照片边缘更清晰

图像变形示例:
- 旋转:把照片顺时针旋转90度
- 缩放:把照片放大2倍
- 平移:把照片向右移动100像素

二、基本几何变换(2D Geometric Transformations):平移、旋转、缩放的基础操作

前面我们知道了:图像变形是改变像素位置的变换,属于几何变换。

但遇到了问题:有哪些基本的几何变换?它们是如何工作的?

这一章要解决:理解三种最基本的几何变换:平移、旋转、缩放。

答案:平移、旋转、缩放是图像几何变换的基础,可以组合使用实现复杂的变换效果。


!NOTE

📝 关键点总结:平移、旋转、缩放是三种最基本的几何变换。平移改变位置,旋转改变方向,缩放改变大小。这些变换可以组合使用。

2.1 什么是几何变换(Parametric (global) warping):坐标变换机器

概念的本质

几何变换可以看作是一个坐标变换机器(coordinate-changing machine):

  • 输入:原图像中的点 p = ( x , y ) p = (x, y) p=(x,y)
  • 输出:变换后图像中的点 p ′ = ( x ′ , y ′ ) p' = (x', y') p′=(x′,y′)
  • 变换函数: p ′ = T ( p ) p' = T(p) p′=T(p)

参数化变形(Parametric Warping)

参数化变形是指:

  • 全局性 :变换 T T T 对所有点都相同
  • 参数少:可以用少数几个参数描述整个变换

图解说明
变换T 输出 原图像点
p = (x, y) 变换机器
T(p) 新图像点
p' = (x', y')

💡 说明:参数化变形是全局的,同一个变换函数对所有点都适用

类比理解:就像用模具压印------同一个模具(变换函数)对所有材料(图像中的点)都产生相同的变形效果。

2.2 平移(Translation):改变位置而不改变形状和大小

概念的本质

平移是将图像中的所有点沿着某个方向移动固定的距离。

平移的特点

  • 只改变位置,不改变形状、大小、方向
  • 可以用向量 ( t x , t y ) (t_x, t_y) (tx,ty) 表示平移量

实际例子

复制代码
向右平移100像素,向上平移50像素:
- 原位置:(100, 100)
- 新位置:(200, 150)
- 平移向量:(100, 50)

2.3 旋转(Rotation):改变方向而不改变形状和大小

概念的本质

旋转是将图像围绕某个点(通常是原点)旋转一定的角度。

旋转的特点

  • 改变方向,不改变形状、大小
  • 可以用角度 θ \theta θ 表示旋转量
  • 逆时针旋转为正方向

图解说明
旋转角度θ 原图像
角度0° 新图像
角度θ

实际例子

复制代码
顺时针旋转90度:
- 原方向:水平向右 →
- 新方向:垂直向下 ↓
- 旋转角度:-90°(或270°)

2.4 缩放(Uniform scaling / Non-uniform scaling):改变大小,均匀或非均匀

概念的本质

缩放是将图像在某个方向上放大或缩小。

缩放的类型

  • 均匀缩放:x和y方向缩放比例相同
  • 非均匀缩放:x和y方向缩放比例不同(改变宽高比)

缩放的特点

  • 改变大小,不改变形状(均匀缩放)或改变形状(非均匀缩放)
  • 可以用缩放因子 s s s 表示

图解说明
缩放因子s 原图像
大小1×1 新图像
大小s×s

实际例子

复制代码
放大2倍(均匀缩放):
- 原大小:100×100像素
- 新大小:200×200像素
- 缩放因子:s = 2

x方向放大2倍,y方向不变(非均匀缩放):
- 原大小:100×100像素
- 新大小:200×100像素
- 缩放因子:sx = 2, sy = 1

2.5 相似变换(Similarity Transformation):平移、旋转、均匀缩放的组合

概念的本质

相似变换是平移、旋转、均匀缩放的组合。

相似变换的特点

  • 保持形状不变(相似)
  • 可以改变位置、方向、大小
  • 保持角度不变

实际应用

复制代码
图像配准:
- 找到两幅图像之间的相似变换
- 可以将一幅图像对齐到另一幅图像
- 用于图像拼接、目标跟踪等

三、线性变换(Common linear transformations / 2x2 Matrices):用矩阵统一表示变换

前面我们知道了:平移、旋转、缩放是基本的几何变换。

但遇到了问题:如何用数学方法统一表示这些变换?能否用矩阵表示?

这一章要解决:理解线性变换的矩阵表示方法。

答案:缩放、旋转、剪切、镜像可以用2×2矩阵表示,但平移不能直接用2×2矩阵表示,需要齐次坐标。


!NOTE

📝 关键点总结:线性变换可以用2×2矩阵表示,包括缩放、旋转、剪切、镜像。线性变换保持原点不变,保持直线和平行关系。平移不是线性变换,需要齐次坐标才能统一表示。

3.1 线性变换的矩阵表示(All 2D Linear Transformations):用2×2矩阵表示缩放、旋转、剪切

概念的本质

线性变换是指可以用矩阵乘法表示的变换:
p ′ = M ⋅ p p' = M \cdot p p′=M⋅p

其中 M M M 是2×2矩阵, p = ( x , y ) p = (x, y) p=(x,y) 是原坐标, p ′ = ( x ′ , y ′ ) p' = (x', y') p′=(x′,y′) 是新坐标。

常见的线性变换

  1. 均匀缩放 :用矩阵 s 0 0 s \begin{bmatrix} s & 0 \\ 0 & s \end{bmatrix} s00s 表示
  2. 非均匀缩放 :用矩阵 s x 0 0 s y \begin{bmatrix} s_x & 0 \\ 0 & s_y \end{bmatrix} sx00sy 表示
  3. 旋转 :用矩阵 cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} cosθsinθ−sinθcosθ 表示

图解说明
矩阵M 输出 原坐标
(x, y) 线性变换
M·p 新坐标
(x', y')

线性变换的性质

  • 原点映射到原点: ( 0 , 0 ) → ( 0 , 0 ) (0, 0) \rightarrow (0, 0) (0,0)→(0,0)
  • 直线映射到直线
  • 平行线保持平行
  • 比例关系保持不变

3.2 平移不是线性变换(Translation is not a linear operation):平移不能用2×2矩阵表示

概念的本质

平移的公式是:
x ′ = x + t x x' = x + t_x x′=x+tx
y ′ = y + t y y' = y + t_y y′=y+ty

这不能写成 p ′ = M ⋅ p p' = M \cdot p p′=M⋅p 的形式,因为平移会改变原点位置。

图解说明
线性变换
可以用2×2矩阵 缩放、旋转、剪切、镜像 非线性变换
不能用2×2矩阵 平移

💡 问题:平移不是线性变换,不能用2×2矩阵表示,这引出了齐次坐标的必要性

解决方案:需要使用齐次坐标来统一表示包括平移在内的所有变换。


四、齐次坐标(Homogeneous coordinates):统一表示所有变换的数学工具

前面我们知道了:线性变换可以用2×2矩阵表示,但平移不能。

但遇到了问题:能否找到一种方法,统一表示包括平移在内的所有变换?

这一章要解决:理解齐次坐标的概念和作用。

答案:齐次坐标通过添加一个坐标维度,可以用3×3矩阵统一表示包括平移在内的所有变换。


!NOTE

📝 关键点总结:齐次坐标通过添加一个坐标维度(w),可以用3×3矩阵统一表示平移、旋转、缩放等所有变换。齐次坐标是计算机图形学和计算机视觉的基础工具。

4.1 齐次坐标的概念(Homogeneous coordinates):通过添加坐标维度统一表示变换

概念的本质

齐次坐标是在原有坐标 ( x , y ) (x, y) (x,y) 的基础上,添加一个坐标维度 w w w,得到 ( x , y , w ) (x, y, w) (x,y,w)。

坐标转换

  • 从普通坐标到齐次坐标 : ( x , y ) → ( x , y , 1 ) (x, y) \rightarrow (x, y, 1) (x,y)→(x,y,1)
  • 从齐次坐标到普通坐标 : ( x , y , w ) → ( x / w , y / w ) (x, y, w) \rightarrow (x/w, y/w) (x,y,w)→(x/w,y/w)(当 w ≠ 0 w \neq 0 w=0)

图解说明
添加w=1 除以w 普通坐标
(x, y) 齐次坐标
(x, y, 1) 普通坐标
(x/w, y/w)

💡 说明:齐次坐标是一个技巧(trick),通过添加一个维度来统一表示所有变换

类比理解:就像给二维地图添加一个高度维度,变成三维地图,可以更方便地表示某些操作。

4.2 用齐次坐标表示平移(Translation Solution):用3×3矩阵表示平移

概念的本质

使用齐次坐标,平移可以用3×3矩阵表示:

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

优势

  • 统一了所有变换的表示方法
  • 可以方便地组合多个变换
  • 矩阵乘法可以表示变换的组合

4.3 用齐次坐标表示旋转和缩放(Rotation and Scaling in Homogeneous Coordinates):统一用3×3矩阵表示

概念的本质

旋转也可以用3×3矩阵表示,形式为:
cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} cosθsinθ0−sinθcosθ0001

缩放的齐次坐标表示

缩放也可以用3×3矩阵表示,形式为:
s x 0 0 0 s y 0 0 0 1 \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix} sx000sy0001

组合变换

多个变换可以通过矩阵乘法组合:
M 组合 = M 3 ⋅ M 2 ⋅ M 1 M_{组合} = M_3 \cdot M_2 \cdot M_1 M组合=M3⋅M2⋅M1


五、变换的层次(Affine transformations / Projective Transformations):从仿射到投影的递进关系

前面我们知道了:齐次坐标可以统一表示平移、旋转、缩放等变换。

但遇到了问题:还有哪些更复杂的变换?它们之间有什么关系?

这一章要解决:理解仿射变换和投影变换,以及变换的层次关系。

答案:变换有层次关系:线性变换 → 仿射变换 → 投影变换,功能越来越强大,但保持的性质越来越少。


!NOTE

📝 关键点总结:变换分为三个层次:线性变换(保持原点)、仿射变换(保持平行线)、投影变换(只保持直线)。投影变换最强大,可以表示透视效果。

5.1 仿射变换(Affine Transformation / Basic affine transformations):线性变换和平移的组合

概念的本质

仿射变换是线性变换和平移的组合,可以用以下形式的3×3矩阵表示:

a b t x c d t y 0 0 1 \begin{bmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{bmatrix} ac0bd0txty1

仿射变换的性质

  • 原点不一定映射到原点
  • 直线映射到直线
  • 平行线保持平行(重要性质)
  • 比例关系保持不变

基本仿射变换

  • 平移
  • 2D平面内旋转
  • 剪切(Shear)
  • 缩放

图解说明
仿射变换 线性变换 + 平移 保持平行线 保持比例

实际应用

复制代码
图像校正:
- 校正扫描文档的倾斜
- 校正相机拍摄的角度
- 保持平行线关系

5.2 投影变换(Projective Transformation / Homographies / Planar Perspective Maps):最一般的平面变换

概念的本质

投影变换(也称为单应性,Homography)是最一般的平面变换,可以用以下形式的3×3矩阵表示:

a b c d e f g h i \begin{bmatrix} a & b & c \\ d & e & f \\ g & h & i \end{bmatrix} adgbehcfi

其中最后一行不一定是 0 , 0 , 1 0, 0, 1 0,0,1

投影变换的性质

  • 原点不一定映射到原点
  • 直线映射到直线
  • 平行线不一定保持平行(可能相交)
  • 比例关系不保持

图解说明
投影变换 最一般的变换 可以表示透视效果 平行线可能相交

实际应用

复制代码
透视校正:
- 校正透视畸变(如拍摄建筑物时的透视效果)
- 图像拼接
- 虚拟现实中的纹理映射

5.3 变换的层次关系(These transformations are a nested set of groups):嵌套的变换集合

概念的本质

变换是一个嵌套的集合(nested set of groups):

复制代码
线性变换
  └─ 仿射变换(线性变换 + 平移)
      └─ 投影变换(最一般)

图解说明
投影变换
最强大
只保持直线 仿射变换
保持平行线 线性变换
保持原点

性质对比

变换类型 保持原点 保持平行线 保持比例 矩阵形式
线性变换 2×2或3×3(最后行0,0,1
仿射变换 3×3(最后行0,0,1
投影变换 3×3(任意)

实际应用选择

复制代码
选择变换类型的原则:
- 只需要旋转、缩放 → 线性变换
- 需要平移 → 仿射变换
- 需要透视效果 → 投影变换

📝 本章总结

核心要点回顾

  1. 图像变换的两种类型:图像滤波改变像素值,图像变形改变像素位置

  2. 基本几何变换:平移、旋转、缩放是图像变换的基础,可以组合使用

  3. 线性变换:可以用2×2矩阵表示,包括缩放、旋转、剪切、镜像

  4. 齐次坐标:通过添加坐标维度,可以用3×3矩阵统一表示包括平移在内的所有变换

  5. 变换层次:线性变换 → 仿射变换 → 投影变换,功能越来越强大,但保持的性质越来越少

知识地图
图像变换 图像滤波
改变像素值 图像变形
改变像素位置 基本变换
平移、旋转、缩放 线性变换
矩阵表示 齐次坐标
统一表示 仿射变换
线性+平移 投影变换
透视效果

关键决策点

  • 需要改变像素值 → 图像滤波
  • 需要改变像素位置 → 图像变形(几何变换)
  • 只需要旋转、缩放 → 线性变换
  • 需要平移 → 仿射变换
  • 需要透视效果 → 投影变换

实际应用场景

  • 图像配准:找到两幅图像之间的变换关系
  • 图像校正:校正倾斜、透视畸变
  • 图像拼接:将多幅图像拼接成全景图
  • 目标跟踪:跟踪目标的几何变换
  • 虚拟现实:纹理映射和场景变换

相关推荐
程序员cxuan5 小时前
为每个任务配一套 harness:Claude Code 里的动态工作流
人工智能
程序员cxuan5 小时前
Claude Fable 5 来了
人工智能·后端·程序员
云边云科技_云网融合6 小时前
云边云科技亮相 2026 WOD 制造业数智化博览会 云网融合赋能制造焕新
人工智能·科技·安全·制造
小欣加油6 小时前
leetcode56 合并区间
c++·算法·leetcode·职场和发展
Σίσυφος19006 小时前
激光三角 光平面标定-多高度误差分析
人工智能·计算机视觉·平面
JS菌6 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
lqqjuly6 小时前
前沿算法深度解析(二)
人工智能·算法·机器学习
Bode_20026 小时前
基于大数据分析的全生命周期质量追溯质量评估体系落地方案
大数据·人工智能
分布式存储与RustFS6 小时前
RustFS S3 Table 开源后,我重新梳理了一下 Iceberg 数据湖的选型思路
人工智能·开源·minio·dpu·rustfs·ai存储·s3 table
DevOpenClub7 小时前
用 Agent 搭建网页内容采集与结构化处理流水线
人工智能