Bir bilgisayar mühendisi için programlama dili, öğrendiklerini sınadığı, deneyler yaptığı bir laboratuardır ve mühendisler deneylerini, kestiremedikleri sonuçları gözlemlemek için değil, öngördükleri sonuçları doğrulamak için yapar...

Affine Dönüşümü İle Öteleme, Döndürme Ve Ölçekleme

İki boyutlu affine dönüşümü, bu dönüşümün özel formları olan öteleme (translation), döndürme (rotation) ve ölçekleme (scaling) işlemleri.
Affine Dönüşüm, Program Örneği

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.

İki Boyutlu Affine Dönüşümü

Affine Dönüşüm İşlemi

Burada A 2x2, B 2x1 boyutlarında iki matristir:

Affine Dönüşüm İşlemi Açık İfade

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.

Affine transform, ötelenmiş görüntü1) Öteleme (Translation)

Ö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.

Affine transform, döndürülmüş görüntü2) Döndürme (Rotation)

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:
İki Boyutlu Döndürme Matrisi

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

2.1) Yeni Genişlik Ve Yükseklik Değerlerinin Hesaplanması

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.

Köşelerteta [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):

Affine transform, ölçeklenmiş görüntü3) Ölçekleme (Scaling)

Ö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

Affine transform, köşeleri kaydırılmış görüntüFarklı Değerler, Farklı Sonuçlar

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...

Koordinatların Tamsayıya Yuvarlanması Sorunu

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...

Harici Bağlantılar

Sayfayı
Yayın tarihi: 19 Mart 2011 Cumartesi, 21:35
Anahtar kelimeler: affine dönüşümü, affine transform, döndürme, öteleme, ölçekleme

Yorum Gönder

 
Yorumunuzu -1. yoruma yanıt olarak gönderiyorsunuz. Yanıtlamayı iptal etmek için buraya tıklayabilirsiniz.

 

Yorumlar

Onaylanmış yorum bulunmuyor.
 
 
Sayfa 38 sorgu ile 0.005 saniyede oluşturuldu.
Atasoy Blog v4 © 2008-2017 Hüseyin Atasoy