Gaussian Blur

Kategori: Computer Vision , 05 Şubat 2020 , JanFranco


Resimlerdeki bozulmaları engellemek veya blur etkisini daha iyi görebilmek için resimleri yeni sekmede açabilirsiniz.

Bu yazımda Gaussian Blur tekniğini daha detaylı anlatacağım. Gaussian blur, diğer blur tekniklerinde olduğu gibi bir convolution işlemi barındırır. Ancak simple blur algoritmasındaki gibi sabit bir kernel yoktur. Her bir piksel için ayrı ayrı kernel oluşturulur. Bu kernellerin boyutunu ksize parametresi belirler. OpenCV methodunu görelim:


cv2.GaussianBlur(img, ksize=(5, 5), sigmaX=10)
Burada ksize dediğim gibi kernel boyutudur. Örneğin resmin (a, b) pikselindeyiz. ksize 5 ise (a, b) pikselinin etrafındaki 24 pikseli baz alarak bir kernel oluşturacağız. Bu değerleri de Gauss fonksiyonu ile hesaplayacağız. Fonksiyon:

Gaussian Blur

Burada u ve v değerleri yukarıda bahsettiğim a, değerleri. Yani resmin pikselleri. Gauss dağılımı aynı zamanda normal distribution olarak da bilinir. İstatistik bilgilerimizden biliyoruz ki standart sapma değeri arttıkça fonksiyonun altında kalan alanı daha çok almış olacağız:

Gaussian Blur

ksize parametresini (5, 5) verdiğimizde, verdiğimiz sigma değerine göre bir fonksiyon açığa çıkacak ve pikselin 5x5 matrisi içerisindeki komşularına göre fonksiyon bir değer döndürecek. Bu değerler 5x5 lik bir matriste saklanacak. Yani kernelde. Daha sonra bu kernel o pikselin üzerinde convolution işlemi yapacak. Convolution işleminde pikseller üst üste geldiğinde çarpılıp toplanır ve hangi piksel baz alındıysa o pikselin değeri güncellenir. Konsepti anladığımıza göre Python üzerinden uygulamaya geçebiliriz. Daha önce yapmıştık ancak bu sefer arkaplandaki işlemleri bilerek yapalım:


import cv2

img = cv2.imread('../data/rabbit.jpg')
cv2.imshow('img', img)
cv2.waitKey(0)
>>

Gaussian Blur


gauss = cv2.GaussianBlur(img, ksize=(3, 3), sigmaX=3)
cv2.imshow('3,3,3', gauss)
cv2.waitKey(0)
>>

Gaussian Blur


gauss = cv2.GaussianBlur(img, ksize=(5, 5), sigmaX=3)
cv2.imshow('5,5,3', gauss)
cv2.waitKey(0)
>>

Gaussian Blur


gauss = cv2.GaussianBlur(img, ksize=(7, 7), sigmaX=3)
cv2.imshow('7,7,3', gauss)
cv2.waitKey(0)
>>

Gaussian Blur


gauss = cv2.GaussianBlur(img, ksize=(9, 9), sigmaX=3)
cv2.imshow('9,9,3', gauss)
cv2.waitKey(0)
>>

Gaussian Blur


gauss = cv2.GaussianBlur(img, ksize=(5, 5), sigmaX=1)
cv2.imshow('5,5,1', gauss)
cv2.waitKey(0)
>>

Gaussian Blur


gauss = cv2.GaussianBlur(img, ksize=(5, 5), sigmaX=3)
cv2.imshow('5,5,3', gauss)
cv2.waitKey(0)
>>

Gaussian Blur


gauss = cv2.GaussianBlur(img, ksize=(5, 5), sigmaX=10)
cv2.imshow('5,5,10', gauss)
cv2.waitKey(0)
>>

Gaussian Blur

Gördüğünüz gibi ksize parametresini artırdıkça, kernel boyutu büyüyor ve daha çok pikseli baz alarak, hedef pikseli güncelliyoruz. Bu nedenle bozulmalar artıyor. Aynı şekilde baz aldığımız piksellerin değerleri de sigma değerini artırdıkça artacağından, bozulma yine daha fazla oluyor. Gaussian blur algoritmasınu gördük. Kullanım alanları arasında bizi ilgilendiren kısım edge detection tabi ki. Photoshop programlarında da oldukça sık kullanılmakta. Özellikle cilt güzelleştirmelerinde iyi sonuç veriyor.


Sonraki Yazı: Median Blur
Yorumlar

Hatice
Pek anlmdm hocam.

05 Şubat 2020 22:32

Yorum bırakın