İlgin (affine) dönüşümler: Ölçekleme, Döndürme ve Öteleme
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ş')

