• Sonuç bulunamadı

5. DA ˘ GITIK M˙IMAR˙IDE MOZA˙IKLER˙IN B˙IRLE ¸ST˙IR˙ILMES˙I

5.2. Uydu Görüntülerinin Birle¸stirilmesi Yakla¸sımları

5.2.1. Sıralı nokta seti ¸sablonu tabanlı birle¸stirme

Sıralı nokta seti e¸sle¸stirmesi yakla¸sımında (i) kullanıcı etkile¸simli ve (ii) otomatik birle¸stirme ¸seklinde iki algoritma geli¸stirilmi¸stir. ˙Ilk yakla¸sımda kullanıcıdan birbiriyle örtü¸smesi söz konusu her çift mozaik görüntüsü için ba˘glantı bilgileri alınarak bir çakı¸sma matrisi ve öteleme matrisi olu¸sturulur. Bu matrislerden yararlanarak mozaiklerin, birle¸since ortaya çıkacak bütün görüntüde nereye yerle¸stirilmesi gerekti˘gi hesaplanarak çoklu resim birle¸stirme gerçekle¸stirilir.

Algoritmanın ba¸sarılı olabilmesi için kullanıcının do˘gru ve eksiksiz ba˘glantı bilgisi giri¸si yapması gerekmektedir. Sıralı nokta seti e¸sle¸stirmesi yakla¸sımı için geli¸stirilen masaüstü uygulamada ¸Sekil 5.3’te gösterildi˘gi gibi N adet mozaik görüntü için en az (N-1) adet ba˘glantı bilgisi gerekmektedir. Ba˘glantı kurulmasını istedi˘gi çiftler arasında benzerlik/örtü¸sme olabilecek bölgeden seçim yapmalıdır.

¸Sekil 5.3. Mozaik çiftlerinden ba˘glantıları belirleme

Yukarıdaki altı görüntü için kullanıcının seçmi¸s oldu˘gu ikili ba˘glantılar Tablo 5.2’deki gibidir. Ba˘glantıları olu¸stururken kullanıcının özellikle dikkat etmesi gereken nokta, yeterli ba˘glantı bilgisi yapmasıdır. Örne˘gin: Ba˘glantı 3={3,5} ve Ba˘glantı 4={5,2} için ortak eleman 5 oldu˘gundan {3,5,2} nolu resimlerin birle¸stirilmesi için yeterlidir. Aynı ¸sekilde Ba˘glantı 2={4,1} ve Ba˘glantı 5={6,1} için ortak eleman 1 oldu˘gundan {6,1,4} resimleri birle¸stirilir. En son olarak {3,5,2} kümesini ve {6,1,4} kümesini birle¸stirip bir bütüne ula¸smak için iki kümeden birer eleman içeren bir ba˘glantı tanımlamak yeterlidir. Tablo 5.2’deki gibi Ba˘glantı 1={6,5} tanımlanarak {3,5,2} kümesi ile {6,1,4} kümesi birle¸stirilerek {3,5,2,6,1,4} tüm resimleri içeren kümeye ula¸sılır. Kullanıcıdan alınan çakı¸smalar referans alınarak çakı¸sma matrisi olu¸sturulur. Görüntüleri dü˘güm gibi dü¸sünürsek matristeki 1 de˘geri her ikili dü˘güm için ba˘glantının oldu˘gu anlamına gelmektedir. Çakı¸sma matrisi NxN’lik asal kö¸segene göre simetrik bir matristir (aij= aji). Çakı¸sma matrisi Algoritma 5 ile olu¸sturulmaktadır.

Tablo 5.2. Mozaik çiftleri ba˘glantı belirleme Ba˘glantı 1 6–>5 Ba˘glantı 2 4–>1 Ba˘glantı 3 3–>5 Ba˘glantı 4 5–>2 Ba˘glantı 5 6–>1

Algoritma 5: Çakı¸sma matrisinin olu¸sturulması

1 Function CakismaMatrisiOlustur(int GoruntuSayisi(N) ,

ArrayList<GoruntuBilgisi>Goruntuler):

2 cakismaMatrisi[N][N] ← {0} 3 for i = 0 to N do

/* kullanıcının belirledigi ciftlere göre matris

doldurulur */

4 cakismaMatrisi[Goruntuler.get(i)][Goruntuler.get(i+1)]=1 5 cakismaMatrisi[Goruntuler.get(i+1)][Goruntuler.get(i)]=1 6 return cakismaMatrisi

Kom¸sulu˘gu olan her çift dü˘gümün ba˘glanabilmesi için her çiftin arasında bir öteleme vardır. Bu öteleme matrisi Tablo 5.3’te gösterilmi¸stir. Bu matris ise NxN’lik asal kö¸segene göre antisimetrik (çarpık simetrik) bir matristir (aij= –aji). Öteleme de˘geri iki görüntünün birle¸stirilmesi için gerekli olan öteleme miktarına kar¸sılık gelmektedir. Tablo 5.3’te görüldü˘gü üzere 0. dü˘güm ile 5. dü˘gümün birle¸stirilmesi için gerekli olan öteleme miktarı (0,94)’dır. Öteleme matrisi Algoritma 6 ile olu¸sturulmaktadır.

Tablo 5.3. Mozaik çiftlerine göre öteleme matrisi

(0,0) (0,0) (0,0) (0,0) (0,0) (0,94) (0,0) (0,0) (0,0) (0,0) (206,137) (0,0) (0,0) (0,0) (0,0) (0,0) (210,-47) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-206,-137) (-210,47) (0,0) (0,0) (1,-90) (0,-94) (0,0) (0,0) (0,0) (-1,90) (0,0)

Algoritma 6: Öteleme matrisinin olusturulması

1 Function ÖtelemeMatrisiOlustur(int GoruntuSayisi(N) ,

ArrayList<GoruntuBilgisi>Goruntuler):

2 otelemeMatrisi elemanları (0, 0) ile doldurulur

/* (Di, Dj), İki resmin birleştirilmesi için gereken referans

noktasının x,y koordinat değeri */

/* (Ai, Aj), Genişletilmiş matristeki konumunun satır,sütun

sayısı */ 3 for i = 0 to N do 4 for j = i + 1 to N do 5 if cakismaMatrisi[i][j] == 1 then 6 otelemeKoori= (Ai– Di) 7 otelemeKoorj= (Aj– Dj)

8 otelemeMatrisi [i][j] = (otelemeKoori, otelemeKoorj)

9 return otelemeMatrisi

Yukarıdaki matrislerden (çakı¸sma ve öteleme) yararlanarak birle¸stirilmi¸s görüntüde mozaiklerin yerle¸stirilmesi ¸su ¸sekilde yapılmaktadır: Öncelikle hangi mozaik görüntüden birle¸smi¸s görüntünün olu¸sturulmasına ba¸slanaca˘gına karar verilir. Bunun için kom¸sulu˘gu 1 olan ilk dü˘güm ba¸slangıç dü˘gümü olarak seçilir. Dü˘gümlerin de˘geri birle¸smis görüntüde konumlandırılması için gerekli olan koordinat bilgisini tutmaktadır. Dü˘gümler arasındaki ba˘glantılar Algoritma 7 ile güncellenir. Güncelleme bitti˘ginde her dü˘güm (görüntü) koordinat düzlemine bulunan koordinat de˘gerlerinde konumlandırılır.

¸

Sekil 5.4’te her dü˘güm birle¸stirilecek olan dü˘gümler ili¸skisini temsil etmektedir. Örne˘gin dü˘güm 0’ın hem 3 ile hem de 5 ile çakı¸sması söz konusudur.

¸

Sekil 5.4. Mozaik çiftlerinden ba˘glantıları belirleme

Algoritma 7: Cakisma cizgesi dügüm güncellemesi

1 Function DugumGuncelle(ArrayList<int[]> otelemeMatrisi, ArrayList<int[]>

dugumdegerleri, int cakismaMatrisi[][], int goruntuSayisi):

/* (Di, Dj), Genişletilmiş matristeki konumunun satır-sütun

sayısı */

/* (Ai, Aj), İki resmin birleştirilmesi için gereken referans

noktasının x,y koordinat değeri */

2 for i = 0 to N do

3 for j = 0 to N do

4 if cakismaMatrisi[i][j] == 1 then

5 degerx← null

6 degery← null

/* Cakisma matrisindeki ilk 1 olan dügümden birlestirme baslatilir.

dugumdegerleri.set(birOlanYerindex, (0, 0)) */

7 if dugumdegerleri[i]! = null && dugumdegerleri[j] == null then 8 degerx= dugumdegerleri[i][0] + otelemeMatrisi[i][j]x – degeri

9 degery= dugumdegerleri[i][1] + otelemeMatrisi[i][j]y – degeri

10 dugumdegerleri.set(j, (degerx, degery))

11 else if dugumdegerleri[j]! = null && dugumdegerleri[i] == null

then

12 degerx= dugumdegerleri[j][0] + otelemeMatrisi[i][j]x – degeri 13 degery= dugumdegerleri[j][1] + otelemeMatrisi[i][j]y – degeri

14 dugumdegerleri.set(i, (degerx, degery))

Di˘ger yakla¸sım ise sıralı otomatik nokta seti ¸sablonu e¸sle¸stirmesidir. Herhangi bir kullanıcı müdahalesi olmadan bir görüntünün di˘ger görüntülerle arasındaki ortak kısımlar/benzer yerlerin bulunması vasıtası ile birle¸stirilerek bütün bir görüntü olu¸sturulması hedeflenmektedir. Tüm görüntülerin ikili kombinasyonları denenir ve her çift için bulunan referans noktasının uygunlu˘gu çakı¸sma oranına göre karar verilmektedir. Çakı¸sma oranı belli bir de˘gerin altında kalan çiftlerin benzer alanlar içermedi˘gi, oranın üzerine çıkanların ise çakı¸sma içerdi˘gi kabul edilmektedir. Çakı¸sma matrisi ve öteleme matrisi üzerinden yapılan hesaplamalar ile her görüntünün genel bütün görüntü koordinat düzleminde nereye konumlandırılaca˘gı hesaplanmaktadır.

Çakı¸sma oranı bulunurken vektör formdaki görüntüler kullanılmaktadır. ˙Iki görüntü için maksimum çakı¸sma sayısınına göre görüntülerin birle¸stirilmesi için gerekli olan

referans noktası bulunmaktadır. Bulunan referans noktasına göre birle¸stirilme sa˘glanır. Örne˘gin ( ¸Sekil 5.5’te siyah noktalarla ve mavi üçgenlerle gösterilen iki resim vektörle¸sme sonrası görüntüler olup aynı ¸sekilde en sa˘gda daire içinde kalan kısımlar ise iki görüntü için örtü¸sen yerleri göstermektedir.

¸Sekil 5.5. Kesi¸sim alanı gösterimi

Çakı¸sma oranı Algoritma 8 ile bulunmaktadır.

Algoritma 8: Cakisma oranının belirlenmesi

1 Function KesisimAlani(görüntü1, görüntü2, cakismaNoktasi):

/* AIij, ASij, Birlestirilmis goruntude ilk goruntunun

baslangic ve bitis konumları */

/* DIij, DSij, Birlestirilmis goruntude 2. goruntunun

baslangic ve bitis konumları */

2 AIij, ASij, DIij, DSijmatrislerini ata

/* KIij, KSij, Birlestirilmis goruntude cakisma alanının

baslangic ve bitis konumları */

3 KIij= (AIij<= DIij)?DIij: AIij 4 KSij= (ASij<= DSij)?DSij: ASij 5 sayac ← 0 6 ilkBirler ← 0 7 ikinciBirler ← 0 8 for i = 0 to KSi– KIido 9 for j = 0 to KSj– KIjdo

10 if cakisma alanı icinde her iki görüntüde 1 varsa then

11 sayac++

12 if ilk goruntuden kesisim alanında 1 varsa then

13 ilkBirler++

14 if 2. goruntuden kesisim alanında 1 varsa then

15 ikinciBirler++

16 azBirler = ilkBirler <= ikinciBirler?ilkBirler : ikinciBirler 17 oran = (100 ∗ sayac)/azBirler

Belirlenen kesi¸sim alanı ( ¸Sekil 5.5’teki mavi çerçeve) içerisindeki çakı¸san birlerin sayısının yüzdelik oranı, çakı¸sma oranını vermektedir. Örne˘gin burada çakı¸sma alanı içinde ilk görüntü 1 sayısı = 13, çakı¸sma alanı içinde ilk görüntü 1 sayısı = 11 ve çakı¸sma alanı içinde ortak 1 sayısı = 6’dır. Dolayısıyla çakı¸sma oranı 54,54 (100x(6/11)) olmaktadır. Belirli bir çakı¸sma oranının üstündeki görüntülerin birle¸stirmeye uygun oldu˘gu, altındakilerin ise uygun olmadı˘gı ortaya çıkar. Bu oran kullanılarak sözde kodu verilen Algoritma 9 ile bir önceki kullanıcı etkile¸simli yöntemdeki gibi çakı¸sma matrisi olu¸sturulur.

Algoritma 9: Çakı¸sma matrisinin olu¸sturulması

1 Function CakismaMatrisiOlustur(int GoruntuSayisi(N), cakismaMatrisi): 2 cakismaMatrisi[N][N] ← {0}

3 for i = 0 to N do 4 for j = i + 1 to N do

5 oran = KesisimAlani(i, j)

6 if oran >= esikDegeri then

7 cakismaMatrisi[i][j]=1

8 return cakismaMatrisi

Bu a¸samadan sonra di˘ger algoritmada oldu˘gu gibi öteleme matrisinin hesaplanması, dü˘gümlerin güncellenmesi, çakı¸sma çizgesinin olu¸sturulması i¸slemleri yapılır.