Açıklama: İlgin (affine) dönüşümler: ölçekleme, döndürme ve öteleme. Bu dönüşümlere Öklid veya benzerlik (similarity) dönüşümleri de denir.

İşlemlerde öncelikle maketform‘a tanım kümesinden (girdi uzayı) değer kümesine (çıktı uzayı) dönüşüm yapacak matrisi sağlayarak başlayacağız.

% Her iki yönde de 2 kat ölçekleme yap
A = [2 0 0; 0 2 0; 0 0 1];
tform = maketform('affine', A);

Daha sonra tformfwd ile dönüşüm sonucu oluşacak değerleri bulacağız. (x,y) noktaları tanımlanan noktalar, (u,v) ise hedef noktalar olsun.

xy = [2 3];
uv = tformfwd(tform, xy)
uv =

4     6

Bulunan noktalardan geri dönüşüm yapmak istersek de tforminv fonksiyonunu kullanabiliriz.

xyp = tforminv(tform, uv)
xyp =

2     3

Daha ayrıntılı örnekler kodda mevcut.

Kaynak: Steve on Image Processing, Spatial transformations: maketform, tformfwd, and tforminv

English description: Similarity transformations using MATLAB

Kaynak kod

% affineTransformations.m: Matlab ile İlgin (affine) dönüşümler: Ölçekleme,
% Döndürme ve Öteleme
 
% ANLATIM
 
% İşlemlerde öncelikle maketform'a tanım kümesinden (girdi uzayı) değer
% kümesine (çıktı uzayı) dönüşüm yapacak matrisi sağlayarak başlayacağız.
%    A = [2 0 0; 0 2 0; 0 0 1];  % Her iki yönde de 2 kat ölçekleme yap
%    tform = maketform('affine', A);
% Daha sonra tformfwd ile dönüşüm sonucu oluşacak değerleri bulacağız.
% (x,y) noktaları tanımlanan noktalar, (u,v) ise hedef noktalar olsun.
%    xy = [2 3];
%    uv = tformfwd(tform, xy)
%    uv =
%
%     4     6
%
% Bulunan noktalardan geri dönüşüm yapmak istersek de tforminv fonksiyonunu
% kullanabiliriz.
%    xyp = tforminv(tform, uv)
%    xyp =
%
%      2     3
 
 
% ÖRNEKLER
 
% Önce dönüşüme sokacağımız şekli çizelim: basir bir ev olsun
x = [-0.6 -0.6 0.6  0.6 -0.9  0    0.9  0.6]';
y = [-0.2  0.8 0.8 -0.2 -0.2 -0.8 -0.2 -0.2]';
 
% plot(x,y), axis ij, axis equal, axis([-1 1 -1 1]), grid on
 
 
% Ölçekleme: yatay yönde 1.5 kat, dikey yönde 2 kat
A1 = [1.5 0 0; 0 2 0; 0 0 1];
tform1 = maketform('affine', A1);
uv1 = tformfwd(tform1, [x y]);
 
subplot(2,2,1)
plot(x,y), axis ij, axis equal, axis([-2 2 -2 2]), grid on, title('Ev')
 
subplot(2,2,3)
plot(uv1(:,1), uv1(:,2)), axis ij, axis equal, axis([-2 2 -2 2])
grid on
title('Yatay yönde 1.5 kat, dikey yönde 2 kat ölçeklendikten sonra')
 
 
% Döndürme: 45 derece
% Dikkat: y ekseni yukarı değil aşağı yönde artıyor.
theta = pi/4;
A2 = [cos(theta) sin(theta) 0; -sin(theta) cos(theta) 0; 0 0 1];
tform2 = maketform('affine', A2);
uv2 = tformfwd(tform2, [x y]);
 
subplot(2,2,2)
plot(uv2(:,1), uv2(:,2)), axis ij, axis equal, axis([-2 2 -2 2])
grid on
title('45\circ döndükten sonra')
 
% Öteleme: yatay yönde 1, dikey yönde -1
A3 = [1 0 0; 0 1 0; 1 -1 1];
tform3 = maketform('affine', A3);
uv3 = tformfwd(tform3, [x y]);
 
subplot(2,2,4)
plot(uv3(:,1), uv3(:,2)), axis ij, axis equal, axis([-2 2 -2 2])
grid on
title('Yatay yönde 1, dikey yönde -1 ötelenmiş')