调整平移、旋转、缩放、翻转和剪切后,重点观察两个问题:一个点如何被矩阵映射到新位置,以及结果图像为什么必须依赖插值。
⊂ ⊂ ⊂ 。当前层级会随着缩放是否等比例、是否存在剪切和平移而变化。
当我们想把图像平移、旋转、放大或拉斜时,像素原来的坐标不再适用。需要重新计算每个输出位置对应原图的哪个坐标,再把像素值搬过去。
常用办法是用一个 3×3 的变换矩阵描述坐标映射:可以只改 x、y 方向偏移做平移,可以绕中心乘旋转矩阵,也可以沿坐标轴缩放或加上剪切项。映射后如果坐标不是整数,还要用插值补出像素值。
拖动变换参数滑块,对比原图坐标和输出图像:矩阵改变的是坐标映射关系,插值方法决定非整数位置采样的颜色过渡是否平滑。
当前参数对应仿射变换。该层级由是否包含平移、是否保持等比例缩放,以及是否出现剪切共同决定。
为了让旋转方向与角度定义保持一致,程序在画布中心建立笛卡尔坐标系, 再把结果映射回图像像素坐标。
组合顺序固定为 flip → scale → shear → rotate → translate。
核心关系是。 真正生成输出图像时,程序通常不做“正向逐点写回”,而是对每个输出像素做反向映射,再查找原图中的采样位置。
A 点:上方纹理区域的参考点
输出像素固定在(49, 45),先通过逆矩阵回到原图,再根据插值方式取得灰度值。
仿射变换可以由多个原子变换复合而成。下列矩阵与平移、缩放、旋转、翻转、剪切一一对应。