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.