空间几何变换

将(w,z)坐标系上的图像变换为(x,y)坐标系上的图像,可以表示为:

比如:

figure51.png

1. 仿射变换

仿射变换是一种常用矩阵变换,它可以表示成矩阵的形式:

$[\begin{matrix}x & y & 1\end{matrix}] = [\begin{matrix}w & z & 1\end{matrix}]T = [\begin{matrix}w & z & 1\end{matrix}] \begin{pmatrix} 
t_{11} & t_{12} & 0 \\ 
t_{21} & t_{22} & 0 \\ 
t_{31} & t_{32} & 1 \\ 
\end{pmatrix}$

figure52.png

在matlab里面实现

wz = [3 4 1];
T = [2 0 0; 0 3 0; 0 0 1];
xy = wz * T;
wz = xy * inv(T);

为了避免归一化参数,我们可以借助maketform函数:

T = [2 0 0; 0 3 0; 0 0 1];
tform = maketform('affine', T);
wz = [1 2; 3 4];
xy = tformfwd(wz, tform);
wz = tforminv(xy, tform);

我们可以用一个栅格图像来形象的表示这些变换的效果: figure53.png

这些变换使用的变换矩阵分别是:

$\begin{pmatrix} 
2 & 0 & 0 \\ 
0 & 3 & 0 \\ 
0 & 0 & 1 \\ 
\end{pmatrix}$

$\begin{pmatrix} 
1 & 0 & 0 \\ 
0.2 & 1 & 0 \\ 
0 & 0 & 1 \\ 
\end{pmatrix}$

$\begin{pmatrix} 
1.5 & 0 & 0 \\ 
0 & 2 & 0 \\ 
0 & 0 & 1 \\ 
\end{pmatrix}*
\begin{pmatrix} 
cos(\pi /4) & sin(\pi /4) & 0 \\ 
-sin(\pi /4) & cos(\pi /4) & 0 \\ 
0 & 0 & 1 \\ 
\end{pmatrix}*
\begin{pmatrix} 
1 & 0 & 0 \\ 
0.2 & 1 & 0 \\ 
0 & 0 & 1 \\ 
\end{pmatrix}$

2. 对图像应用空间变换

有两种方法:正向映射和反向映射

反向映射的过程是:对每一个输出像素,计算它在输入图像上的位置,根据输入图像上该位置附近的像素值决定输出像素的值。

在matlab中,简单的变换可以直接用单个函数实现。图像缩放使用:

g = imresize(f, scale);
g = imresize(f, [ROW COL]);

图像旋转使用:

g = imrotate(f, angle);

图像剪切使用:

g = imcrop(f, [X, Y, WIDTH, HEIGHT]);

在matlab中使用imtransform实现图像的空间变换。语法是

g = imtransform(f, tform, interp);

其中,interp可以是'nearest','bilinear'或者'bicubic'。

比如:

f = chekerboard(50);
s = 0.8;
theta = pi/6;
T = [s*cos(theta) s*sin(theta) 0;
-s*sin(theta) s*cos(theta) 0;
0 0 1];
tform = maketform('affine', T);
g = imtransform(f, tform);

双线性滤波: Bilinear_interpolation.png

3. 图像配准

根据两幅图像,算出一个变换参数,使得一幅图像经过这样的变换后和另一图像接近 figure54.png

图像的空间变换 (last edited 2008-04-20 22:42:58 by czk)

ch3n2k.com | Copyright (c) 2004-2022 czk.