comag

Konvolusyon islemi

Daha önceki konular:


Morfolojik Görüntü İşleme 
C++ ile Gabor Filtre Uygulaması 



Konvolüsyon, birim dürtü yanıtı( h(t) ) bilinen bir sistemin x(t) giriş işaretine karşılık üreteceği y(t) çıkış işaretini zaman domeninde bulmaya yarayan bir işlemdir. Konvolüsyon işlemi * sembolü ile gösterilir ve bir boyutlu sürekli zamanlı konvolüsyon işlemi aşağıdaki formül ile hesaplanır.



Benzer şekilde ayrık konvolüsyon işlemi ise aşağıdaki gibidir.



Konvolüsyon işleminin uygulanabilmesi için sistemin lineer ve zamanla değişmeyen olması gerekmektedir. 

Konvolüsyon işleminin daha iyi anlaşılması için aşağıdaki hareketli resim incelenebilir.



Burada kırmızı renkli işaret sistemin birim dürtü yanıtının ters çevrilmiş şeklini simgelemektedir. Bu işaret -∞ dan başlayarak +∞ a doğru adım adım kaydırılır ve her kaydırma sonrası x işareti ile örtüşen kısımın altında kalan alanı hesaplanır. Hesaplanan bu sonuç lineer zamanla değişmeyen sistemin x giriş işaretine karşı ürettiği çıkış işaretidir.

İki boyutlu konvolüsyon işlemide benzer olarak aşağıdaki formül ile ifade edilir.



Burada h(x,y) konvolüsyon çekirdek matrisi(kernel) olarak adlandırılır ve genellikle 3x3,5x5,7x7 gibi büyüklükte seçilir. Seçilen çekirdek matrisinde yer alan değerler komşu piksellerin merkez piksele yapacağı etkinin ağırlığını gösterir.



A*h=h matrisi ters çevrilerek hesaplanmak istenen (2,4) pikselin üzerine koyuldu. (2,4) pikselinin yeni değeri=24*2+5*8+15*4+7*7+14*5+16*3+13*6+20*1+22*8=575 bulunur.

Hesaplamada yaşanacak sorunlar:

Konvolüsyon işlemi sırsaında problem oluşturacak bazı noktalar vardır. 

▲Bunlardan ilki şüphesiz ki kenar noktalardır. Çekirdek matrisin merkez elemanı görüntü üzerindeki ilk pikselin üzerine gelecek şekilde konulduğunda çekirdek matrisin bazı elamanlarına karşılık çarpılacak eleman bulunmaz. Bu durumda programın hata vermemesi için yazılan kodlarda giriş matrisine çekirdek matrisin boyunun bir eksiği kadar satır ve sütun eklenmiş ve bu satırlar 0 alınarak programın hata vermesi engellenmiştir.

▲Bir diğer sorun ise işlem sonrası hesaplanan yeni piksel değerinin seçilen çekirdek matris ağırlıklarına bağlı olarak 0-255 aralığı dışında kalmasıdır. Bu durumda programda kontrol edilmiş ve sınırlar dışında kalan değerler sınır değerlerine çekilmiştir.

▲Hesaplama yapılırken hesaplanan yeni değerler yeni bir matris üzerinde tutularak yeni değerler ile işlem yapılan matrisin değerlerinin karışması ve hatalı sonuç üretmesi engellenmiştir.



Basit bir de kenar bulma algoritması ile fonksiyonun nasıl kullanacağını görelim.






C++ Menüye Dön


comag.tr.gg
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol