İçeriğe geç

Digital Image Processing – Sayısal Görüntü İşleme

Salt&Pepper Noise, Gausssian Noise, Mean Filter, Median Filter, Threshold

ELE 473 – SAYISAL GÖRÜNTÜ İŞLEME

İNDİRME LİNKİ EN ALTTADIR – DOWNLOADABLE LINK IS AT THE BOTTOM

Yazının bu kısmında fotoğrafı çekilen sayfanın görüntüsü Matlab’a aktarılmıştır ve üzerine Salt&Pepper gürültüsü ve Gaussian gürültüsü eklenmiştir. Gürültü eklenen görseller gerekli smoothing algoritmaları ile geri kurtarılmaya çalışılmıştır. Sonuçlar aşağıda yorumlanmıştır.

Şekil 1 Fotoğraf Görüntüsü

Şekil 1’deki fotoğrafı çekilen görseli Matlab’a aktarmak için aşağıdaki kod bloğu kullanılmıştır. Açıklamalar yorum olarak verilmiştir.

im = imread('C:\Users\fener\OneDrive\Masaüstü\ele473ornek.jpg');    
% Gorsel okundu
im1 = imresize(im,[921, 645]);
% Islemlerin hizini artirmak icin gorselin boyutu degistirildi.

Alınan görüntünün işlenmesi için Gray Scale’e aktarımı aşağıdaki kod bloğu ile yapılmıştır. Açıklamalar yorum olarak verilmiştir. Gray Scale edilen görüntü Şekil 2’de görünmektedir.

im2_gray = im2gray(im1);    
% alinan gorseldeki rgb uzayi siyah-beyaz uzaya cevrildi
Şekil 2 Gray Scale Edilen Görüntü

Salt&Pepper Noise eklemek ve sonucu görüntülemek için aşağıdaki kod bloğu kullanılmıştır. Açıklamalar yorum olarak verilmiştir.

%% Salt Pepper Noise

salt_pepper_density=0.1;    
% salt-pepper yoğunluğu

salt_pepper_white =  floor(rand(size(im2_gray))+(salt_pepper_density/2)); 
% beyaz noktalarin gelecegi konumlar, gorsel ile ayni boyutta uretilen
% rastgele 0-1 arasi sayi iceren matriste belirlenen orana gore ekleme
% yapilarak ve bunun floor islemi ile tam sayi hali alinarak bulunuyor.

salt_pepper_black = floor(rand(size(im2_gray))+(salt_pepper_density/2));
% siyah noktalarin geleceği noktalar da beyaz noktalar ile benzer sekilde
% bulunmustur.

im2_gray(salt_pepper_white==1)= 255; 
% beyaz olarak belirlenen konumlara beyaz (uint formatta 255 beyaza denk gelir)
im2_gray(salt_pepper_black==1)= 0; 
% siyah olarak belirlenen konumlara siyah   (uint formatta 0 siyaha denk gelir)
% pikseller yaziliyor
img_salt_pepper = im2_gray;
figure(3);
imshow(img_salt_pepper);
title('Salt&Pepper Noise Implemented Image');

Gaussian Noise eklemek için aşağıdaki kod bloğu kullanılmıştır ve açıklamalar yorum olarak verilmiştir.

%% Gaussian Noise

st_dev=100;     
% standart sapma degeri

gaussian_noise_img = (sqrt(st_dev)*randn(size(im2_gray_yedek)))+ double(im2_gray_yedek);
% Gaussian gürültüsü standart sapma ve rastgele oluşturulan numaralar ile
% çarpılıp oluşturulur ve orjina görsele eklenir.

figure(4);
%subplot(2,2,4);
imshow(gaussian_noise_img/255);  
% gorseli ekrana dogru formatta yazdırmak icin 255 degerine boluyoruz.
title('Gaussian Noise Implemented Image');

Eklenen iki farklı gürültünün aynı görsele etkileri aşağıdaki Şekil 3’te ve Şekil 4’te gösterilmiştir.

Şekil 3 Salt&Pepper Gürültülü Görsel (%10)
Şekil 4 Gaussian Noise Eklenmiş Görsel (st. sap.: 100)

Eklenen gürültülerin en iyi hangi smoothing algoritması ile giderildiği aşağıdaki örneklerde gözlemlenecektir.

Smoothing için 2 algoritma kullanılmıştır:

  • Mean Filter
  • Median Filter

Mean filtresi için 3 farklı değer (1/9, 1/10, 1/16) kullanılmıştır ve her iki gürültülü görsele de uygulanmıştır. Median filtresi ise tek şekilde her iki gürültülü görsele de uygulanmıştır.

Mean filtresinin nasıl işlediğine dair kod bloğu aşağıda verilmiştir. Benzer kod bloğu sadece matrisin değişmesinden yola çıkarak işleme sokulduğu için 1/10 ve 1/16 değerleri için tekrar verilmemiştir.

Salt-Pepper Gürültülü görsel üzerinde çalışan kod:

%% Smoothing 1.1 - 1/9 - SP

%   1   1   1
%   1   1   1
%   1   1   1
% Filtrelemek icin yukaridaki matris olusturulup, 
% her bir eleman matris icerisindeki sayilarin toplamina bolunur

mean_filt_1 = ones(3);  
mean_filt_1 = double(mean_filt_1/9);
% Filtre olusturuluyor ve sayi formati double yapiliyor ki onceki alinan
% goruntular ile sorun yasanmasin

filtered_img = zeros(size(im2_gray));
% Filtrelenen gorsel icin bos bir dizi ataniyor.

dim = size(im2_gray);   
% for dongulerini calistirmak icin gorselin boyutunu aliyoruz

im2_smooth_yedek_double = im2double(img_salt_pepper);
% Uzerinde calisilacak matris `double` formatina cevriliyor

for i=1:(dim(1)-2)
    for j=1:(dim(2)-2)
        product=im2_smooth_yedek_double(i:i+2,j:j+2).*mean_filt_1;
        % Uzerinde calisilan her 3x3 birimlik alandaki elemanlari filtremiz
        % olan matrisle carpariz ve matrisin tum elemanlarini toplayip
        % merkez noktaya o degeri yazariz
        filtered_img(i,j)=sum(product(:));
        
    end
end

figure(5);
imshow(filtered_img);
title('Mean Filter 1.1 - 1/9 - Salt Pepper Image Implemented');

Gaussian Gürültülü görsel üzerinde çalışan kod

%% Smoothing 1.2 - 1/9 - G

%   1   1   1
%   1   1   1
%   1   1   1
% Filtrelemek icin yukaridaki matris olusturulup, 
% her bir eleman matris icerisindeki sayilarin toplamina bolunur

mean_filt_1 = ones(3);  
mean_filt_1 = double(mean_filt_1/9);
% Filtre olusturuluyor ve sayi formati double yapiliyor ki onceki alinan
% goruntular ile sorun yasanmasin

filtered_img = zeros(size(im2_gray));
% Filtrelenen gorsel icin bos bir dizi ataniyor.

dim = size(im2_gray);   
% for dongulerini calistirmak icin gorselin boyutunu aliyoruz

for i=1:(dim(1)-2)
    for j=1:(dim(2)-2)
        product=gaussian_noise_img(i:i+2,j:j+2).*mean_filt_1;
        % Uzerinde calisilan her 3x3 birimlik alandaki elemanlari filtremiz
        % olan matrisle carpariz ve matrisin tum elemanlarini toplayip
        % merkez noktaya o degeri yazariz
        filtered_img(i,j)=sum(product(:));
        
    end
end

figure(6);
imshow(filtered_img/255);
title('Mean Filter 1.2 - 1/9 - Gaussian Noise Image Implemented');

%10 yoğunluklu Salt-Pepper Gürültülü görsele etki eden 1/9, 1/10 ve 1/16 değerli Mean Filtreleme algoritmalarının çıktıları aşağıda sırasıyla Şekil 5’te, Şekil 6’da ve Şekil 7’de gösterilmiştir.

Şekil 5 1/9 Değerli Mean Filtre
Şekil 6 1/10 Değerli Mean Filtre
Şekil 7 1/16 Değerli Mean Filtre

Salt&Pepper Gürültüsüne Mean Filtresi Uygulanması Sonucu:

Şekil 5’te, Şekil 6’da ve Şekil 7’de görüldüğü üzere Mean Filtre’nin Salt&Pepper Gürültüsü üzerinde çok büyük bir iyileştirmesi bulunamamıştır. Ancak görsellere yakından bakıldığında 1/16 değerli filtrenin siyah ve beyaz geçişlerinde yani “edge” olarak tanımlanan yerlerde diğer 1/9 ve 1/10 değerli filtrelere göre daha keskin bir görüntü ortaya çıkardığı ve yazıları daha koyu yaptığı görülmüştür.

Standart sapma değeri 100 olan Gaussian Gürültülü görsele etki eden 1/9, 1/10 ve 1/16 değerli Mean Filtreleme algoritmalarının çıktıları aşağıda sırasıyla Şekil 8’de, Şekil 9’da ve Şekil 10’da gösterilmiştir.

Şekil 8 1/9 Değerli Mean Filtre
Şekil 9 1/10 Değerli Mean Filtre
Şekil 10 1/16 Değerli Mean Filtre

Gaussian Gürültüsüne Mean Filtresi Uygulanması Sonucu:

Mean Filtresinin görselin içeriği fark etmeksizin tüm alanlarda bir miktar yumuşama yaptığı ve bulanıklığa sebebiyet verdiği gözlenmiştir ancak 1/16 değerli filtrenin yazılarının 1/9 ve 1/10 değerli filtreye göre daha keskin ve koyu olduğu sonucuna varılmıştır. Aynı zamanda  Mean Filtresi; Gaussian Gürültüsüne, Salt&Pepper gürültüsünden daha iyi etki etmektedir.

Median filtresinin nasıl işlediğine dair kod blokları aşağıda verilmiştir.

Salt-Pepper Gürültülü görsel üzerinde çalışan kod:

%% Median Filter 1

%   1   1   1
%   1   1   1
%   1   1   1
% Matrisi olusturuluyor

median_filter_1 = ones(3);
% Filtre olusturuluyor.

output_median_1 = zeros(size(im2_gray)-2);
% Filtrelenen gorsel icin bos bir dizi ataniyor.

dim = size(im2_gray);   
% for dongulerini calistirmak icin gorselin boyutunu aliyoruz

im2_salt = double(im2_gray);
% Uzerinde calisilacak matris `double` formatina cevriliyor

for i=1:(dim(1)-2)
    for j=1:(dim(2)-2)
        filter1 = im2_salt(i:i+2,j:j+2).*median_filter_1;
        % salt-pepper noise iceren gorsel filtreleniyor.
        output_median_1 (i,j) = median(filter1(:)); 
    end
end

figure(11);
imshow(output_median_1./255);
title('Median Filter 1 - Salt&Pepper Noise Implemented');

Gaussian Gürültülü görsel üzerinde çalışan kod:

%% Median Filter 2

%   1   1   1
%   1   1   1
%   1   1   1
% Matrisi olusturuluyor

median_filter_2 = ones(3);
% Filtre olusturuluyor.

output_median_2 = zeros(size(im2_gray)-2);
% Filtrelenen gorsel icin bos bir dizi ataniyor.

dim = size(im2_gray);   
% for dongulerini calistirmak icin gorselin boyutunu aliyoruz

for i=1:(dim(1)-2)
    for j=1:(dim(2)-2)
        filter1 = gaussian_noise_img(i:i+2,j:j+2).*median_filter_2;
        % Gaussian noise iceren gorsel filtreleniyor.
        output_median_2 (i,j) = median(filter1(:)); 
    end
end

figure(12);
imshow(output_median_2./255);
title('Median Filter 2 - Gaussian Noise Implemented');

%10 yoğunluklu Salt-Pepper Gürültülü görsele ve standart sapma değeri 100 olan Gaussian Gürültülü görsele Median Filtreleme algoritmalarının çıktıları aşağıda sırasıyla Şekil 11’de ve Şekil 12’de gösterilmiştir.

Şekil 11 Salt&Pepper Gürültüsüne Median Filtre Uygulanması
Şekil 12 Gaussian Gürültüsüne Median Filtre Uygulanması

Salt&Pepper Gürültüsüne ve Gaussian Gürültüsüne Median Filtresi Uygulanması Sonucu:

Median Filtresi bilindiği üzere seçili bölgedeki medyan değerdeki pikseli alır ve orta noktaya koyar. Bu, bölgedeki maksimum ve minimum değerlerin gidip ortanca bir değerin gelmesi demektir. Salt&Pepper Gürültüsünde çok fazla uç değerler olduğu için bu gürültüleri gidermekte Median Filtresi oldukça başarılı olmuştur.

Bir diğer öncül olarak “Thresholding” işlemleri ve çıktıları aşağıda bahsedilmiştir ve yorumlanmıştır.

Thresholding aşağıdaki görsellere uygulanmıştır:

  • İlk elde edilen ve filtre uygulanmamış siyah beyaz görsel (Şekil 13)
  • Salt&Pepper Gürültüsü uygulanmış görsel (Şekil 14)
  • Gaussian Gürültüsü uygulanmış görsel (Şekil 15)
  • Gaussian Gürültülü görsele 1/9 parametreli Mean Filtresi uygulanmış görsel (Şekil 16)
  • Gaussian Gürültülü görsele 1/16 parametreli Mean Filtresi uygulanmış görsel (Şekil 17)
  • Salt&Pepper Gürültülü Median Filtresi uygulanmış görsel (Şekil 18)
  • Gaussian Gürültülü Median Filtresi uygulanmış görsel (Şekil 19)

Mean filtrelerinde Gaussian Gürültülü fotoğrafın kullanılma nedeni; threshold işleminin Gauss gürültülü görselleri, Slat&Pepper gürülütülü görsellere göre daha iyi geri getirdiği içindir. Buna aşağıda da değinilecektir. Şekil 13’te sadece siyah beyaz hale getirilmiş görsele thresholding işlemi uygulanmıştır. T değerini belirlerken yazıların okunaklığının korunması ve sayfanın da kalitesi bozmaması dikkate alınmıştır. Bu neticeler doğrultusunda “80” değeri bulunmuştur. Bu işlemin kod bloğu ve çıktısı aşağıdadır.

%% Thresholding 1 Normal Image

th = uint8(im_th<80);
th_rev=~th;
% deneme yanilma sonucunda 80 degerinde hem okuma kaybi yasanmamistir hem
% de beyazlik saglanip gurultu gozlenmemistir.
figure(13);
imshow(th_rev);
title('Threshold - Normal Image');
Şekil 13 Threshold – Normal Görsel

Diğer tüm threshold kodları aynı mantıkta yazıldığında ve sadece değişken değiştiğinden daha fazlası burada yer almayacaktır.

Şekil 14 Salt&Pepper Gürültüsü Eklenmiş
Şekil 15 Gaussian Gürültüsü Eklenmiş
Şekil 16 Mean Filtreli 1/9 Parametreli
Şekil 17 Mean Filtreli 1/16 Parametreli
Şekil 18 Median Filtreli SP Gürültülü
Şekil 19 Median Filtreli Gaussian Gürültülü

Thresholding İşlemi Sonucu:

Yukarıdaki görsellerde görüldüğü üzere thresholding algoritmasının en iyi sonucu sadece 2 görüntüde çıkmaktadır: Normal Görsel ve Gaussian Gürültülü Görsel. Salt&Pepper Gürültüsü, Mean filtresi ve Median filtresi uygulanmış görsellerde yazılar eski haline getirilememiştir ve bozuk olarak kalmıştır. Ancak iyi sonuç alınan 2 görselde de küçük sayılabilecek 14 font değerli yazılar dahi okunabilmektedir ve sayfa kalitesinden de ödün verilmemiştir.

Tüm bu işlemlerin Matlab kodunu ve raporun PDF halini BURADAN indirebilirsiniz.

Okuduğunuz için teşekkürler.