İ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ş')