AtasoyWeb - Hüseyin Atasoy
AtasoyWeb
Hüseyin Atasoy'un Programlama Günlüğü

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.

  • [0,90]: Genişlik için köşe2, yükseklik için köşe3
  • (90,180]: Genişlik için köşe1, yükseklik için köşe2
  • (180,270]: Genişlik için köşe4, yükseklik için köşe1
  • (270,360]: Genişlik için köşe3, yükseklik için köşe4

Noktaların koordinatları (x,y):

  • Köşe 1: (0,0)
  • Köşe 2: (Genişlik,0)
  • Köşe 3: (Genişlik,Yükseklik)
  • Köşe 4: (0,Yükseklik)

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

Yazar: Hüseyin Atasoy
Posted: 19/03/2011 22:35
Keywords: affine dönüşümü, affine transform, döndürme, öteleme, ölçekleme

Leave Comment

 
You are replying to comment #-1. Click here if you want to cancel replying.

 

Comments (4)

Burhan
Reply
21/04/2019 17:15
#1

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

Hüseyin Atasoy
Reply
24/04/2019 08:21
#2

Merhaba,
İletişim kısmındaki mail adresine mail atabilirsiniz.
İyi çalışmalar...

İsmail
Reply
07/05/2020 01:39
#3

Hocam öteleme işlemi gerçekleştirdikten sonra dönme işlemi yapılıyor ilk konumu bulmak için ne yapmalıyım

Hüseyin Atasoy
Reply
07/05/2020 22:57
#4

İlk konumdan kastınızı anlayamadım.

 
Şu an bu sayfada 1, blog genelinde 3 çevrimiçi ziyaretçi bulunuyor. Ziyaretçiler bugün toplam 699 sayfa görüntüledi.
 
Sayfa 48 sorgu ile 0.024 saniyede oluşturuldu.
Atasoy Blog v4 © 2008-2024 Hüseyin Atasoy