返回

几何变换

Geometric Transform - 位置关系与插值采样
第二章 / 图像校正
参数面板

调整平移、旋转、缩放、翻转和剪切后,重点观察两个问题:一个点如何被矩阵映射到新位置,以及结果图像为什么必须依赖插值。

当前参数层级
仿射变换

。当前层级会随着缩放是否等比例、是否存在剪切和平移而变化。

0
0
18°
1
1
0.2
0
当前处理流程固定为:源点正向映射到目标点,输出像素再通过找采样来源。点击原图会选中一个教学点;点击结果图则查看当前输出像素从原图哪里采样。
当前教学点
(49, 45)
A 点:上方纹理区域的参考点
窗口定位辅助操作
用方向键或下方 4 个按钮移动当前窗口;也可以直接点击原图或结果图跳转。
当前像素 (49, 45)4370 / 9216
方向
概念说明

几何变换改变什么

几何变换通过坐标映射改变图像位置关系,插值负责补齐映射后的采样值。图源:scikit-image geometric transform 示例
任务

当我们想把图像平移、旋转、放大或拉斜时,像素原来的坐标不再适用。需要重新计算每个输出位置对应原图的哪个坐标,再把像素值搬过去。

思路

常用办法是用一个 3×3 的变换矩阵描述坐标映射:可以只改 x、y 方向偏移做平移,可以绕中心乘旋转矩阵,也可以沿坐标轴缩放或加上剪切项。映射后如果坐标不是整数,还要用插值补出像素值。

观察

拖动变换参数滑块,对比原图坐标和输出图像:矩阵改变的是坐标映射关系,插值方法决定非整数位置采样的颜色过渡是否平滑。

变换层级
正交 刚体 相似 仿射

当前参数对应仿射变换。该层级由是否包含平移、是否保持等比例缩放,以及是否出现剪切共同决定。

坐标约定

为了让旋转方向与角度定义保持一致,程序在画布中心建立笛卡尔坐标系, 再把结果映射回图像像素坐标。

组合顺序固定为 flip → scale → shear → rotate → translate

方向键移动输出像素 / 点击原图看正向映射 / 点击结果图看反向采样当前结果像素 (49, 45)
4370 / 9216
原图96×96
红框表示当前输出像素在原图中的2×2采样邻域;点击原图可选教学点
几何映射
4370 / 9216
结果96×96
绿框表示当前输出像素;点击结果图可查看该像素的反向映射来源
原图采样邻域2×2
反向映射先找到原图中的采样位置,再根据插值方式决定取单点还是取 2×2 邻域。
原图坐标约为 (49.32, 45.59), 对应中心坐标为 (1.82, 1.91)。
齐次矩阵仿射变换
M = [ m11m12m13 m21m22m23 m31m32m33 ] = [0.95-0.1200.311.010001]
矩阵把平移、缩放、旋转、翻转和剪切统一写成一次乘法。
教学点正向映射
当前教学点(49, 45)对应 A 点
正向变换后得到的目标图像坐标约为(48.63, 44.5),最近的像素位置为(49, 45)
输出像素写回(49, 45)
当前插值方式
双线性
0.105
双线性插值综合 2×2 邻域加权平均,结果更平滑,但会引入轻微模糊。
几何变换的统一表达

核心关系是 I (x,y) = I(x,y) 。 真正生成输出图像时,程序通常不做“正向逐点写回”,而是对每个输出像素做反向映射,再查找原图中的采样位置。

I (x,y) = I(x,y)
图像内容本身不变,改变的是像素之间的位置关系。
齐次坐标矩阵
[ x y 1 ] = [ a11a12tx a21a22ty 001 ] [ x y 1 ]
平移项写入第三列后,平移、旋转、缩放和剪切就都能并入一次矩阵乘法。
当前组合矩阵
M = [ m11m12m13 m21m22m23 m31m32m33 ] = [0.95-0.1200.311.010001]
按 flip → scale → shear → rotate → translate 的顺序依次复合。
当前反向映射矩阵
M-1 = [ m11m12m13 m21m22m23 m31m32m33 ] = [1.010.120-0.310.950001]
输出图像中的每一个像素,都先乘逆矩阵,再回到原图寻找采样位置。
正交
RRT=I
长度和夹角保持不变,常见代表是纯旋转或翻转。
刚体
Mrigid = [ Rt 0T1 ]
在线性部分保持正交的前提下,再加入平移项。
相似
AAT=kI
允许整体等比例缩放,因此角度不变、长度按同一比例变化。这里的 A 表示线性部分,与纯旋转矩阵 R 区分。
仿射
Maffine = [ At 0T1 ]
最一般的二维线性位置变换,可由平移、缩放、旋转、翻转、剪切复合得到。
教学点的正向坐标变换

A 点:上方纹理区域的参考点

源点 (49, 45)
pdst = Mpsrc = [0.95-0.1200.311.010001] [1.52.51] = [1.1331]
使用的是中心化后的笛卡尔坐标,因此正角度仍表示逆时针旋转。
当前点映射结果
原图坐标:(49, 45)
中心坐标:(1.5, 2.5)
目标中心坐标:(1.13, 3)
目标图像坐标:(48.63, 44.5)
该点仍然落在结果图内部,可以在结果图上继续观察它附近的采样效果。
当前输出像素的反向映射与插值

输出像素固定在(49, 45),先通过逆矩阵回到原图,再根据插值方式取得灰度值。

当前方式:双线性
psrc = M-1 pdst = [1.010.120-0.310.950001] [1.52.51] = [1.821.911]
给出的坐标仍然是中心化后的笛卡尔坐标,便于直接对应齐次矩阵公式。
双线性插值
I(49,45) = 0.280.1+0.130.11+0.40.1+0.190.11 = 0.11
同时利用 2×2 邻域的四个像素做加权平均,边缘更平滑,但会略微模糊。
双线性邻域权重
Q11
坐标:(49, 45)
灰度:0.104
权重:0.283
Q21
坐标:(50, 45)
灰度:0.107
权重:0.131
Q12
坐标:(49, 46)
灰度:0.104
权重:0.401
Q22
坐标:(50, 46)
灰度:0.107
权重:0.185
原子变换矩阵

仿射变换可以由多个原子变换复合而成。下列矩阵与平移、缩放、旋转、翻转、剪切一一对应。

当前层级:仿射变换
平移
T(tx,ty) = [ 10tx 01ty 001 ]
控制整体位置,不改变形状和朝向。
缩放
S(sx,sy) = [ sx00 0sy0 001 ]
等比例缩放对应相似变换的一部分。
旋转 / 翻转
R(θ) = [ cosθ-sinθ0 sinθcosθ0 001 ]
旋转矩阵保持角度关系;翻转可看作某个坐标轴方向的符号取反,仍属于正交变换。
剪切
H(α,β) = [ 1α0 β10 001 ]
剪切会改变角度关系,因此会把相似变换推进到更一般的仿射变换。