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.
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...
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 ?
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...
ellerinize sağlık, sizin yaptığınız hatayı bende yaptım okuyunca şimdi anladım ellerinize sağlık...
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.
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.