Gürültü Oluşturma(Noise Generation)
Gerçek hayatta resimler tam istenildiği şekilde elde edilemezler. Resim bilgisi yanında bir takım çevresel faktörlerden dolayı gürültü de içerirler. Bu gürültüler bazen modellenebilir bazen de modellenemez. Resim üzerinde yapılacak işlemler için gerçek hayattaki resimlerin modellenebilmesi, çalışmanın başarısını arttıracaktır. Bu nedenle var olan resim üzerinde gürültü oluşturma, resim işlemede yerini almıştır.
d(r,c)=I(r,c)+n(r,c)
Denklem 1 Gürültü Formülü
Gürültünün, resme etkisini bulabilmek için Sinyal Gürültü Oranı(Signal Noise Ratio, SNR) hesaplanır. Bu değerin yüksek olması, gürültülü resmin orijinaline yakınlığını belirtir. Bir diğer ifadeyle SNR değeri ne kadar yüksek ise resim, o kadar az bozulmuş olarak algılanır.
Denklem 2 SNR Formülü
.
Gauss Gürültüsü(Gauss Noise)
Bir Gauss dağılımı(normal dağılım, gauss distribution) yardımıyla gürültü oluşturulur. Dağılımdaki her bir değer(olasılık) kadar rastgele pikseller değiştirilir. Örneğin standart sapması 14 olan bir dağılımda g(5) = 0,027'dir. Resmin de 10.000 pikselden oluştuğu varsayılırsa, 0,027* 10.000 = 270 piksel değerine +5'in eklenmesi gerekir. Uç değerler için 0 ve 255'e göre yuvarlama yapılır.
Aşağıda farklı standart sapma değerlerine göre dağılımlar verilmiştir:
Grafik 1 Gauss Dağılım(Standart Sapma = 14)
Grafik 2 Gauss Dağılım(Standart Sapma = 27)
Gauss gürültüsü bir resme uygulanırken, asıl görüntü bilgisi, gürültüden etkilenmemektedir. Asıl görüntü üzerinden rastgele alınan her bir piksele gürültü uygulanıp, gürültülü eklemiştir. Bu işlemler rastgele yapıldığı için asıl görüntü üzerindeki bir piksel birçok defa gürültüden etkilenebilmektedir. Gürültülü resmin her bir piksel değeri, o piksele uygulanan en son gürültülü ile oluşmaktadır.
Algoritma ve Kodlama
Kodlamanın göze çarpan kısımları aşağıda belirtilmiştir:
for (int GrayLevel = -255; GrayLevel <= 255; GrayLevel++)
{
Probability = GaussFunction.GetGaussValue(GrayLevel);
EffectedPixelCount = (int)(Probability * PixelCount);
for (int i = 0; i < EffectedPixelCount; i++)
{
RandomIndex = Randomizer.Next(0,PixelCount-1);
NoisyData[RandomIndex] = GetPixel(ImageData[RandomIndex] + GrayLevel);
}
}
Analiz ve Yorumlar
Peppersgary PGM formatlı resim üzerinde gürültü oluşturulmuştur. Çıkan sonuçlar aşağıda belirtilmiştir:
Şekil 3 peppergray.pgm(noisy,gauss,σ =14)
Şekil 4 peppergray.pgm(noisy,gauss,σ =27)
| | σ =27 | σ =14 |
Piksel Sayısı | 263169 |
Signal Noise Ratio (SNR) | 39.196 | 136.058 |
Tablo 1 Gauss Gürültü Analizi
Yukarıdaki tablo ışığında peppersgray resmi için yapılabilecek yorumlar aşağıda belirtilmiştir:
- Standart sapma değerlerine göre oluşan SNR değerleri farklılık göstermektedir.
- Düşük SNR değerleri için resim, daha fazla bozulmuş olarak algılanır.
Tekdüze Gürültü(Uniform Noise)
Bu gürültü şeklinde, gürültü sabit bir şekilde görüntü üzerinde dağılmıştır. -47 ile +47 arasındaki bir sınır için
1 / (47-(-47)) = 1/94
Olasılığında gürültü uygulanmıştır. Bir başka ifadeyle -47'den +47'e kadar her bir değer 1/94 olasılığında gürültüye etkimiştir.
Aşağıda farklı sınır değerlerine ait tekdüze grafikler verilmiştir.
Grafik 3 Tekdüze Gürültü(-47,+47)
Grafik 4 Tekdüze Gürültü(-7,+7)
Algoritma ve Kodlama
Kodlamanın göze çarpan kısımları aşağıda belirtilmiştir:
Probability = 1.0 / (_end - _start);
EffectedPixelCount = (int)(Probability * PixelCount);
for (int GrayLevel = _start; GrayLevel <= _end; GrayLevel++)
{
for (int i = 0; i < EffectedPixelCount; i++)
{
RandomIndex = Randomizer.Next(0, PixelCount - 1);
NoisyData[RandomIndex] = GetPixel(ImageData[RandomIndex] + GrayLevel);
}
}
Analiz ve Yorumlar
Peppersgary PGM formatlı resim üzerinde gürültü oluşturulmuştur. Çıkan sonuçlar aşağıda belirtilmiştir:
Şekil 5 peppersgray.pgm(noisy,uniform,-47:47)
Şekil 6 peppersgray.pgm(noisy,uniform,-7:7)
| | [-7,7] | [-47,47] |
Piksel Sayısı | 263169 |
Signal Noise Ratio (SNR) | 1335,138 | 37,994 |
Tablo 2 Uniform Gürültü Analizi
Yukarıdaki tablo ışığında peppersgray resmi için yapılabilecek yorumlar aşağıda belirtilmiştir:
- Sınır değerlerine göre oluşan SNR değerleri farklılık göstermektedir. Birbirine yakın değerler için resim daha az gürültülü olarak oluşmaktadır.
- Düşük SNR değerleri için resim, daha fazla bozulmuş olarak algılanır.
Tuz-Biber Gürültüsü(Salt-Pepper Noise)
Bu gürültü şeklinde, gürültü tuz ve biber olacak şekilde uygulanmıştır. Tuz gürültüsü pikseli beyaz, biber gürültüsü ise pikseli siyah yapmaktadır.
Algoritma ve Kodlama
Kodlamanın göze çarpan kısımları aşağıda belirtilmiştir:
EffectedPixelCount = (int)(_saltRatio * PixelCount);
for (int i = 0; i < EffectedPixelCount; i++)
{
RandomIndex = Randomizer.Next(0, PixelCount - 1);
NoisyData[RandomIndex] = 255;
}
EffectedPixelCount = (int)(_pepperRatio * PixelCount);
for (int i = 0; i < EffectedPixelCount; i++)
{
RandomIndex = Randomizer.Next(0, PixelCount - 1);
NoisyData[RandomIndex] = 0;
}
Analiz ve Yorumlar
Peppersgary PGM formatlı resim üzerinde gürültü oluşturulmuştur. Çıkan sonuçlar aşağıda belirtilmiştir:
Şekil 7 peppersgray.pgm(noisy,salt:%5,pepper:%5)
Şekil 8 peppersgray.pgm(noisy,salt:%1,pepper:%1)
| | Salt:%5; Pepper:%5 | Salt:%1; Pepper:%1 |
Piksel Sayısı | 263169 |
Signal Noise Ratio (SNR) | 9,915 | 43,707 |
Tablo 3 Salt-Pepper Gürültü Analizi
Yukarıdaki tablo ışığında peppersgray resmi için yapılabilecek yorumlar aşağıda belirtilmiştir:
- Salt ve Pepper oranlarına göre oluşan SNR değerleri farklılık göstermektedir. Düşük oranlar için resim daha az gürültülü olarak oluşmaktadır.
- Düşük SNR değerleri için resim, daha fazla bozulmuş olarak algılanır.
Sinyal Gürültü Oranı(Signal Noise Ratio, SNR)
Oluşturulan her bir gürültülü resim için SNR değeri de hesaplanmıştır. Analiz kısmındaki tablodan bu değerler incelenebilir.
SNR değerinin hesaplanmasında kullnılan algoritma aşağıda belirtilmiştir:
double t1 = 0;
double t2 = 0;
for (int i = 0; i < OriginalImageData.Length; i++)
{
t1 += NoisyImageData[i] * NoisyImageData[i];
t2 +=(OriginalImageData[i]-NoisyImageData[i])*(OriginalImageData[i]-NoisyImageData[i]);
}
SNR = t1 / t2;
Uygulama
Uygulama ComputerVision.exe adlı dosyadan oluşmaktadır. İşlenecek resimler, bu dosyanın bulunduğu dizine bırakılmalıdır. İşlem sonucunda oluşan rapor dosyaları ve görüntüler, bu dizin altında oluşacaktır. Aşağıda uygulamanın ne şekilde kullanılacağı belirtilmiştir:
C:\ComputerVision\>ComputerVision.exe
Computer Vision v1.0.0
Mennan Tekbir
Usage:
ComputerVision <operation> <image> [<options>*]
Examples:
ComputerVision 3 peppersgray.pgm
ComputerVision 5 peppersgray.pgm gauss 2
ComputerVision 5 peppersgray.pgm uniform -49 49
ComputerVision 5 peppersgray.pgm salt-pepper 0.05 0.05
ComputerVision 6 peppersgray.pgm median noisy_peppersgray.pgm 3
ComputerVision 6 peppersgray.pgm gauss noisy_peppersgray.pgm 1.4
ComputerVision 7 peppersgray.pgm 2
ComputerVision 8 peppersgray.pgm 1.6 1 7
ComputerVision 9 peppersgray.pgm 0.67 25 100
Operations :
1 : Connected Components
2 : Erosion(Morphology)
3 : Otsu Thresholding
4 : Region Properties
5 : Noise
6 : Filter
7 : LaplacianOfGaussian(LoG)
8 : DifferenceOfGaussian(DoG)
9 : Canny Edge detector
Options :
<noise type> = [gauss, uniform, salt-pepper]
<Standart Deviation> = (for gauss noise )
<a> = (for uniform noise )
<b> = (for uniform noise )
<salt ration> = (for salt-pepper noise )
<pepper ration> = (for salt-pepper noise )
<filter type> = [median, gauss]
<original file name>
<filter mask size> = (for filter operation)
<threshold> = (for edge operation)
Please enter command(quit to exit)
>
Uygulamayı indirmek için tıklayınız...