平移与仿射
众所周知,二维图像的平移是非线性的,仿射变换实现了线性效果。
平移:是将图像的每个像素点在水平和垂直方向上进行移动,只是改变了图像的位置信息,而图像的内容并不会发生改变。二维的图像计算公式如下:很显然不是线性的
在二维矩阵图像的基础上,加一个座标轴。在齐次座标系下进行图像的几何变换,我们把他称之为仿射变换。一个三维的齐次座标轴下的仿射变换,就是线性运算。运算过程如下:
在matlab环境下实现仿射变换
%放射变换实现图像平移
F = imread('cameraman.tif');
fheight = size(F,1);
fwidth = size(F,2);
m = 30;%水平方向的平移量
n=20;%垂直方向的平移量
tform = maketform('affine',[1 0 0 ;0 1 0; m n 1]);
G = imtransform(F,tform,'XData',[1 fwidth+30],'YData',[1 (fheight+20)]);
subplot(121);
imshow(F);
title('原图');
subplot(122);
imshow(G);
title('平移后的图像');
知识补充
(1)齐次座标
齐次座标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”其重要性主要有,其一是区分向量和点,其二是易于进行仿射变换(AffineTransformation)
因为仿射空间的存在,我们认为图形变换就是变换了以图形为原点的仿射座标,那么我们使用齐次座标表示法,同时变换矩阵也扩充一个维度称它为”平移维度“,这时候我们可以利用数学技巧“忽略掉”除了“平移维度”之外的维度,只进行“平移维度”的计算, 根据矩阵乘法的计算规则,就很自然的处理了两个仿射空间的平移。
(2)仿射变换
(3)maketform()函数和imtransform()函数
maketform():仿射变换’affine’包括了
- 平移translation
- 缩放scaling
- 旋转rotation-
- 剪切shearing
- 投影变换projective transformations
- 自定义的变换custom transformations
imtransform():返回值中包含的另两个额外输出参数xdata和ydata,表示输出图像在输出座标空间的位置。xdata包含了输出图像拐角处像素的x座标,ydata包含了这些像素的y座标(这里说的x、y座标是指像素的中点)。