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

Görüntü Filtreleri

Görüntü filtreleri nasıl uygulanır? 3x3 matris filtreler, kenar tespit, kabartma, yumuşatma, detaylandırma filtreleri

Görüntü filtreleri, çeşitli amaçlarlar kullanılırlar. Görüntüleri yumuşatabilir, keskinleştirebilirler. Ayrıntıları belirginleştirip, yok edebilirler...

Filtreler genelde 3x3 matrislerdir. Bunlara çekirdek matris (kernel matrix) denir. Filtreleme işlemi ise kısaca bu matrislerin görüntü üzerinde gezdirilip, üst üste gelen değerlerin çarpımları ve oluşan tüm çarpımların toplamlarının filtre elemanlarının toplamına bölünmesi ile gerçekleştirilmiş olur. Her seferinde sadece merkez pixelin, yani ortadaki pixelin değeri değiştirilir. Bu işlemler sırayla tüm pixeller için yapılır ve görüntü güncellenir.

Filtreleme sırasında oluşabilecek iki problem vardır. Birincisi filtrenin görüntü dışına taşmasıdır. Bunu önlemek oldukça kolaydır. Resim üzerinde gezdirilen matrisin, sınırlara gelmemesi için kenar pixellerden uzak durulur. Eğer mutlaka tüm pixeller işlenmek isteniyorsa, o zaman, kenar pixel merkez olduğunda, görüntü üzerinde işlenen 3x3lük pixel matrisin 3. sütunu bulunmadığı için, tekrar ikinci sütunu üçüncü sütun yerine yerleştirilerek işlemlere devam edilir. Filtrelemede karşılaşılabilecek ikinci problem pixellerin çarpma ve bölme işlemleri sonucunda maximum veya minimum değerlerden taşmasıdır. Bu durumda pixel maximum veya minimum renk değerine geri çekilir.

Filtreleme yapılırken renkli bir görüntü kullanılıyorsa, tüm renklerin (kırmızı, yeşil, mavi) ayrı ayrı, filtre matrisi (çekirdek matris/kernel matrix) ile işleme girmesi sağlanmalıdır.

Görüntü Filtreleri
Resim: Görüntü Filtreleri Örnek Uygulama (indirmek için tıklayın)

Yukardaki programı yazarken gözardı ettiğim için beni oldukça uğraştıran ve "Hata nerede?" diye düşündüren ufak ama önemli bir noktayı da yazayım. Filtre gezdirilirken elde edilen değerler görüntüye hemen aktarılmamalıdır. Başka bir değişle, işlenen değerler ile işlenecek değerler aynı dizi içerisinde bulunmamalıdır. Yoksa her seferinde, işlenen pixel, işlenmiş başka pixellerle tekrar işleme girer ve filtreleme yanlış sonuç verir. Programa en çok kullanılan filtrelerden 19 tanesini ekledim. Başka filtreleri, matris elemanlarını doldurarak deneyebilirsiniz...

Leave Comment

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

 

Comments (6)

ümit
Reply
05/04/2010 15:08
#1

selamlar;
siteyi az önce netten tanıdım ve bir hazine bulmuş gibi sevindim bu duyguyu yaşattığınız için ilk mesajımda öncelikle çok teşekkür ederim... programlama olarak sadece resim işleme ile ilgileniyorum örneğinizdeki matrisi resme nasıl uyguluyoruz bunun mantığını anlatabilirmisiniz acaba ?

Hüseyin Atasoy
Reply
05/04/2010 22:14
#2

Yazıda kısaca filtrenin nasıl gezdirileceğinden bahsetmişim ama sanırım çok kısa olmuş. Biraz daha açalım; filtreler 3x3 matrislerdir ve bu matrisler görüntü üzerinde gezdirilir. Gezdirilen matrisin altında resme ait pixellerin oluşturduğu bir başka matris vardır. İşte bu iki matrisin üstüste gelen elemanları birbirleri ile çarpılır ve bu çarpımlar toplanır. Elde edilen toplam, filtre matrisindeki elemanların tümünün toplamına bölünür. Sonuçta elde edilen değer filtre matrisinin tam ortasındaki elemanın altında kalan pixele yazılmak üzere saklanır. Pixellerin güncellenmesi ancak filtre tüm pixelleri gezdikten sonra yapılmalıdır...

munir
Reply
11/11/2010 16:41
#3

ellerinize  sağlık, sizin yaptığınız hatayı bende yaptım  okuyunca şimdi anladım  ellerinize sağlık...

Çağrı
Reply
12/05/2011 18:22
#4

Anlayamadığım bir şey var. Matris elemanlarını pikselin her bir bandının değeriyle ayrı ayrı mı çarpıyoruz? Yani R, G ve B batlarının değerleriyle.

Hüseyin Atasoy
Reply
13/05/2011 08:28
#5

Evet aynen öyle. Her renk bileşeni ayrı ayrı işlenir.

aslan
Reply
01/10/2011 17:29
#6

Sanırım bunu Visual Basic'te yapmışsınız kodlarını paylaşsanız gerçekten işime çok yarayacak bu gezdirme işlemi nasıl oluyor anlamam açısından faydalanacağım.

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