Affine dönüşümü, koordinat dönüşümlerine dayalı 3 temel işlem olan öteleme(translation), döndürme(rotation) ve ölçekleme(scaling) işlemlerinin genel formudur.
Burada A 2x2, B 2x1 boyutlarında iki matristir:
Dönüşümün genel ifadesi budur. İfadedeki A ve B matrislerinin elemanlarına farklı değerler veya ifadeler yerleştirilerek dönüşümün özel formları elde edilir.
Öteleme işlemi basit bir koordinat dönüşüm işlemidir. Affine dönüşüm ifadesindeki A matrisi birim matris olarak alındığında, x ve y koordinatları sırasıyla b1 ve b2 kadar ötelenir. Öteleme işlemi sonucunda taşmalar meydana gelir. Bu problemi gidermek için üç yöntem düşünülebilir. Sınırlardan taşan pixeller gözardı edilebilir. Ancak bu şekilde görüntü kaybı meydana gelir. Yeni görüntünün çizileceği çerçevenin boyutları öteleme miktarı ile doğru orantılı olarak arttırılabilir. Öteleme negatif yönlü yapılırsa bu yöntem işe yaramaz. Ayrıca görüntüde gereksiz boş alanlar oluşur. Son ve en kullanışlı yöntem ise taşan her pixelin, (0,0) noktasından taşma miktarları kadar ileri(veya geri) bir konuma yerleştirilmesidir. Taşan pixellerin yeni koordinatları şöyle bulunabilir:
x'' = x' +- Genişlik (sıfırın altına inilirse +, genişliğin üstüne çıkılırsa - kullanılır) y'' = y' +- Yükseklik (sıfırın altına inilirse +, yüksekliğin üstüne çıkılırsa - kullanılır.)
Yukarıdaki işlemlerin, yalnızca taşan pixellerin koordinatları üzerinde yapılması gerekir. Taşma kontrolüne gerek bırakılması istenmiyorsa yeni koordinatların sınır değerlere bölümlerinden kalanlar, asıl yeni x ve y koordinatları olarak kabul edilir:
x'' = x' % Genişlik y'' = y' % Yükseklik
İfadelerdeki x' ve y', öteleme sonucunda elde edilen yeni koordinatlardır. x'' ve y'', ise taşma kontrolünden geçirilmiş ve tümü x için [0-Genişlik), y için [0-Yükseklik) aralıklarına çekilmiş olan yeni koordinatlardır.
Dödürme işleminde A matrisi, iki boyutlu döndürme matrisidir. Aynı zamanda öteleme yapılması istenmiyorsa B matrisi 0(sıfır matrisi) alınır. Affine dönüşümü şu hale döner:
x' = x*cos(teta) - y*sin(teta) y' = x*sin(teta) + y*cos(teta)
Dödürme işleminde x' ve y' değerleri yine genişlik ve yükseklik alt veya üst sınırlarından taşar. Bunu önlemek için yeni görüntünün boyutlarının, dönen görüntünün tümünü sığacak yeterlilikte olması sağlanmalıdır. Yeni boyutlar, teta=k*pi (k=1,2,3...) iken eski boyutlara eşit olur. teta açısının diğer değerleri için yeni boyutlar eski boyutlardan hep daha büyüktür.
Görüntü, dönüşümün bu hali ile (0,0) noktası etrafında döndürülür. Farklı bir nokta etrafından döndürme yapılması istenirse önce bu noktanın merkezde(0,0) konumlanması için görüntü ötelenir. Daha sonra döndürme yapılır ve görüntü, merkeze ötelenen noktanın eski konumuna geri döndürülmesini sağlayacak şekilde tekrar ötelenir. Bu ardışık 3 işlem tek bir ifade ile gösterilebilir:
x' = (x-MerkezX)*cos(teta) - (y-MerkezY)*sin(teta) + MerkezX y' = (x-MerkezX)*sin(teta) + (y-MerkezY)*cos(teta) + MerkezY
Görüntü, kendi merkezi(Genislik/2,Yukseklik/2) etrafında döndürüldüğünde, sınırlardan taşan en uç noktalar görüntünün köşe noktalarıdır. Köşe noktalarının yeni koordinatlarından yola çıkılarak yeni genişlik ve yükseklik değerleri belirlenebilir. Hangi köşelerden yola çıkılacağı, döndürme açısının bulunduğu aralığa bakılarak saptanır.
teta [0,90] aralığında iken yandaki kenardan en çok taşan, yani görüntüyü sınırlayan çerçeveye en uzak olan nokta 2. köşe üzerindeki noktadır. Bu noktanın yeni x koordinatı ile görüntünün genişliği arasındaki fark, taşma miktarını verir. 2. köşe üzerindeki noktanın taşma miktarı kadar, 4. köşe üzerindeki nokta da soldan taştığı için, bulunan taşma değeri 2 ile çarpılır ve eski genişlik değerine eklenir. Böylece resmin tümünü sığacak yeni bir genişlik değeri elde edilir. Yükseklik değeri de aynı mantıkla hesaplanır. Sürekli aynı şeyleri tekrar etmemek adına hızlıca diğer açı aralıkları için sınırlara en uzak noktaları ve bu noktaların koordinatlarını verelim.
Noktaların koordinatları (x,y):
Ölçekleme işlemi, affine dönüşümünde A matrisinin köşegen elemanlarına 0, diğer elemanlarına ölçek değerleri verilerek yapılır. a11 x koordinatını, a22 y koordinatını ölçekler. Aynı zamanda öteleme yapılması istenmiyorsa B matrisi 0(sıfır matrisi) alınır. Dönüşüm sadeleştirilerek yazıldığında aşağıdaki basit ifadeler elde edilir:
x' = x*a11 y' = y*a22
Dönüşümün genel formunun parametrelerine verilecek farklı değer veya ifadeler, doğal olarak farklı sonuçlar doğuracaktır. Örneğin B, 0 matrisi olsun. a11=1, a22=1, a12=0, a21=Y iken görüntüde köşe1 ve köşe4 sabit durur, köşe2 ve köşe3 Y kadar aşağı kayar. Başta bir dikdörtgen veya kare olan görüntü bir paralelkenara döner. Daha farklı değerler deneyerek değişik sonuçlar elde edebilirsiniz...
Dönüşüm esnasında pixellerin kaynak görüntü üzerindeki koordinatları kullanılarak hedef görüntüde bulunmaları gereken konum hesaplanır. Ancak hedef görüntü üzerinde aralarda hiç boyanmayan pixeller kalabilir. Bu sorun, ondalıklı koordinatların tamsayıya yuvarlanmasından kaynaklanır. Sorunu gidermek için tersten gidilmelidir; hedef üzerindeki pixellerin koordinatları kullanılarak, bu konumlara düşecek kaynak pixellerin koordinatları tespit edilmelidir. Bilgisayara 'Döndürülünce şu konuma yerleşmesi gereken pixelin, döndürülmeden önceki konumu ne olmalı?' sorusu sorulmalıdır. Yani bilinen x' ve y' koordinatlarından bilinmeyen x ve y koordinatlarına ulaşılmalıdır...
Merhaba ben yüksek lisans öğrencisiyim. dönüşümler konusunda bir tezim var bana bu konuda teke tek konuşup soru sorup karşılıklı bir şekilde iletişime geçebilecegimiz bir ortam varmı? teşekkür ederim iyi çalışmalar ...
Merhaba,
İletişim kısmındaki mail adresine mail atabilirsiniz.
İyi çalışmalar...
Hocam öteleme işlemi gerçekleştirdikten sonra dönme işlemi yapılıyor ilk konumu bulmak için ne yapmalıyım