17 Ekim 2014 Cuma

PGM Formatlı Resim İşleme - Sobel Filtresi ve Histogram Eşleme

YÖNTEM

Sobel Filtresi:

     Görüntü işleme adımları esnasında kullanılan yöntemlerden biride Kenar Belirlemedir.
Kenar belirlemek için kullanılan farklı filtreler vardır, Sobel filtreside bunlardan biridir. Sobel
filtresinde kullanacağımız filtre iki ayrı parçadan oluşuyor.

     Yatayda Gx bulmak için ilk filtre uygulanır, dikeyde Gy bulmak için ikinci filtre uygulanır.
Bu adımlar sonrasında elde edilen pixel değerinin Gradyan toplamı alınır.

     Burada kareler toplamının karekökönü fazla işlem yapmadan daha az maliyetli bir işlem olan
|G| = |Gx| + |Gy| işlemi ile de gerçekleştirebiliriz. Buradan elde edeceğimiz pixel değerini orijinal
resimde yer alan üçlü matristeki orta eleman yerine yazmamız gerekiyor. Burada ki bir önemli
nokta: Elde edilen yeni pixel değeri orjinal pixel matrisine yazılmaz. Başka bir pixel matrisine
yazarız. Bunun nedeni değişen pixel değerlerinin kendinden sonraki işlemlere etkisidir. Pixel
değerlerini değiştirdiğimiz takdirde yeni değerler çok farklı sonuçlar üretebileceklerdir.


Histogram Eşleme:

     Elimizde bulunan bir resmin renk dağılımı dengeli olmayabilir. Historam eşleme ile resmin
sahip olduğu renkleri genele yayabilme şansına sahibiz. Burada öncelikle resmin histogramının
çıkarılması gerekmektedir. Histogram çıkarmak için resimdeki renk sayısı kadarlık göze sahip bir
dizi kullanılır. Dizinin elemanları 0 (sıfır) sayısıyla ilklendirilir. Histogram dizisinin her bir gözüne
resimdeki pixeller sırasıyla yerleştirilip o pixel değerine sahip elemanın değeri bir arttırılır. Bu
şekilde resimdeki histogram (renk dağılımı) bulunmuş olur. Sonrasında histogram dizisindeki
elemanlar kümülatif bir şekilde toplanıp bir diziye histogram dizisinin önceki elemanlarının toplamı
olacak şekilde yerleştirilir. Kümülatif toplamlar resimdeki toplam pixel sayısına bölünüp olasılıkları
hesaplanır. Elde edilen olasılıklar 0 ile 1 arasında float değerlere sahiptir. Burada C dilinin roundf
fonksiyonu kullanılarak aşağı veya yukarı yuvarlanması sağlanmıştır. Elde edilen değer yeni gri
seviyesi ile çarpılır ve sonuçlar diziye kaydedilir. Son adımımız da ise resimde sırasıyla var olan
pixel değerinin yukarıdaki işlemler sonucunda eşi olan 0 veya 255 pixel değerlerinden biriyle
değiştirilir.

UYGULAMA

     .pgm formatında ki resimler herhangi bir editör ile açıldığında nasıl bir şekilde formatlandığı ve okunacağı anlaşılabilir. Bunları açıklamak gerekirse;
  • İlk satır pgm'in versiyonunu belirtir. Her versiyon farklı formatta yazılır (Bizim kullanacağımız P5 formatı olacak).
  • İkinci satırda satır sütun sayısı şeklinde formatlanıyor. (256 256 veya 1024 1024 gibisinden)
  • Üçüncü satırda resmin gri seviyesi integer bir değer olarak saklanıyor.
  • Sonra satırda resmin pixel değerleri akıyor.
Yazdığım program github hesabımda yer alıyor. Programın linki için https://github.com/th3gundy/pgm-image-processing adresi ziyaret edilebilir.

Programa verilen resimler ve alınan çıktılar;


 




 
Histogram Eşleme sonunda çıkan resmin parazitli olmasının nedeni herhangi bir smoothing işleminden geçmemesidir. Bunun için Gaussian veya Medyan filter ile resim işlemden geçirilip Sobel'e ve ardından Histogram Eşleme işlemlerine tâbi tutulabilir.

Örnek resimler için mega.co.nz upload ettiğim link,

Hiç yorum yok:

Yorum Gönder