一句话定义
几何变换用矩阵把像素坐标从一个平面映射到另一个平面(平移、旋转、缩放、透视),插值则回答「新坐标落在非整数位置时亮度取多少」。
为什么重要
数据增强的随机裁剪旋转、文档扫描的透视校正、全景拼接的单应 warp、相机标定后的去畸变,底层全是几何变换 + 插值;它是贯穿传统视觉与深度学习数据管线的公共底座。
直观类比
变换矩阵像一张透明坐标网格纸,把原图网格任意拉扯旋转;插值则是问「网格纸上的空白格该填什么颜色」——最近邻是把最近的格子抄过来,双线性是按距离给四个邻居加权平均。
前置知识
kp-001(像素坐标约定);库外线性代数的矩阵乘法与齐次坐标概念。
核心概念
- 平移/刚体/相似/仿射/投影变换:自由度从 2 递增到 8,仿射保持平行性,透视(单应)只保持直线。
- 齐次坐标:给 2D 点加第三个分量 1,使平移也能写成矩阵乘法。
- 前向映射与逆向映射:对每个输出像素找它在原图的位置(逆变换)再取值,可避免空洞与重叠。
- 最近邻/双线性/双三次插值:速度与质量的阶梯。
- 变换矩阵估计:给定至少 3 对点拟合仿射、4 对点拟合单应(最小二乘)。
原理与机制
仿射变换把旋转、缩放、剪切、平移统一为 2×3 矩阵作用于齐次坐标;透视投影变换(单应)把世界平面上一点映射到另一平面,是最一般的 2D 平面到平面变换。实现时对每个输出像素 (x′, y′) 施加逆矩阵 A⁻¹ 得到原图坐标 (x, y),x、y 常为小数,再用插值从四个整数邻点加权求和;权重即到各邻点的距离乘积。变换链可合并:先做三次变换再插值一次,优于逐次变换逐次插值(减少重复模糊)。
公式与模型
[ x′ ] [ a11 a12 tx ] [ x ]
[ y′ ] = [ a21 a22 ty ] [ y ]
[ 1 ] [ 0 0 1 ] [ 1 ] (仿射,6 自由度)[ x′ ] [ h11 h12 h13 ] [ x ]
[ y′ ] ~ [ h21 h22 h23 ] [ y ] (单应,8 自由度,~ 表示齐次缩放)
[ 1 ] [ h31 h32 h33 ] [ 1 ]双线性插值:
I(x, y) ≈ (1−dx)(1−dy)·I(x0, y0) + dx(1−dy)·I(x0+1, y0)
+ (1−dx)dy·I(x0, y0+1) + dx·dy·I(x0+1, y0+1)图示
实例与案例
文档扫描:手机斜拍 A4 纸,检测四个角点后 getPerspectiveTransform 求单应并 warpPerspective 拉正为标准比例。训练增强:cv2.warpAffine 做随机旋转 ±10 度 + 平移,标签框也要按同一矩阵变换(kp-026 展开此坑)。全景拼接:相邻两图的特征匹配(kp-009)估计单应,把第二张图 warp 进第一张的坐标系。
import cv2, numpy as np
M = cv2.getRotationMatrix2D(center=(w/2, h/2), angle=15, scale=1.0)
rot = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_LINEAR)
H, _ = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC)
rectified = cv2.warpPerspective(img, H, (out_w, out_h))常见误区
- 前向映射产生空洞:逐像素「搬过去」会留下没有像素落到的格子;正确做法是逆向映射(对输出找输入)。
- 插值选择不当:缩小图像用最近邻会锯齿化,放大两倍以上用双线性会糊;OpenCV
resize缩小推荐INTER_AREA。 - 以为仿射能校正任意视角:平面到平面才用单应;立体物体表面需要更复杂的变形模型。
- 逐次变换多次插值:重复插值累积模糊,应先合并矩阵再一次插值。
与其他知识点的关系
kp-009 用匹配点估计单应矩阵;kp-010 的相机投影是单应的「三维版」;kp-011 去畸变本质是每像素的非线性几何映射。
自测题
- 仿射变换有几个自由度?需要几对点唯一确定?
答案要点:6 个;每对点给 2 个方程,至少 3 对点。
- 为什么实现时用逆向映射而不是前向映射?
答案要点:前向映射会让多个源像素落到同一目标格且部分目标格无人认领(空洞);逆向映射保证每个输出像素都能找到输入值。
- 放大 4 倍图片,最近邻与双线性的视觉差异是什么?
答案要点:最近邻出现块状锯齿,双线性平滑但偏糊;双三次或超分网络效果更好。
延伸阅读
- Szeliski《Computer Vision: Algorithms and Applications》第 2 章「Image formation」中 2D 变换层级表
- kp-009 看变换矩阵如何从数据中估计