Matlab 图像变换场景下变换矩阵各参数具体含义咨询
Matlab图像变换矩阵参数详解
Matlab中2D图像变换默认采用齐次坐标实现,最常用的两类变换矩阵参数含义如下:
1. 2D仿射变换矩阵
仿射变换支持缩放、旋转、平移、错切四种基础变换,对应的3×3矩阵最后一行固定为[0 0 1],结构为:
[a b 0] [c d 0] [e f 1]
各参数含义:
- 左上2×2子矩阵
[a b; c d]:负责所有线性变换逻辑a:水平方向缩放因子,取值为1时无缩放,大于1放大、小于1缩小,取负值时同步完成水平翻转d:垂直方向缩放因子,规则同上,取负值时同步完成垂直翻转b:水平错切系数,非0时图像会沿水平方向产生斜切变形c:垂直错切系数,非0时图像会沿垂直方向产生斜切变形
纯旋转场景下该子矩阵对应[cosθ -sinθ; sinθ cosθ],θ为逆时针旋转的弧度值,此时a=cosθ,b=-sinθ,c=sinθ,d=cosθ
- 第三行前两个参数
e、f:负责平移变换e:水平方向平移像素数,正值向右平移,负值向左平移f:垂直方向平移像素数,正值向下平移,负值向上平移
注:Matlab采用行向量右乘变换矩阵的计算逻辑,和部分教材中列向量左乘的变换矩阵结构互为转置,不要混淆
代码示例
以下是生成“水平缩放2倍、逆时针旋转30度、向右平移10像素”仿射变换并应用的示例代码:
% 读取原图 original_img = imread("test.png"); % 定义变换参数 scale_x = 2; theta = deg2rad(30); offset_x = 10; offset_y = 0; % 构造仿射变换矩阵 tform = affine2d([scale_x*cos(theta) -sin(theta) 0; sin(theta) cos(theta) 0; offset_x offset_y 1]); % 应用变换得到结果图 img_transformed = imwarp(original_img, tform);
2. 投影变换矩阵(透视变换)
如果需要做视角校正类的透视变形,使用的3×3矩阵最后一行不再固定为[0 0 1],结构为:
[a b p] [c d q] [e f s]
新增参数含义:
p、q:透视变形控制系数,取值不同可让图像呈现近大远小的透视效果s:全局缩放归一化因子,通常取值为1
内容的提问来源于stack exchange,提问作者user123
相关产品推荐
相关产品推荐

