Görüntü Filtreleme

Bu yazımda görüntüdeki pürüzler nasıl giderilir yani smoothing uygulamasını görüntü filtreleme yadımıyla nasıl yapılır anlatacağım. Genellikle blur işlemi ile yapılır ve birçok kernel türü vardır.

2D Convolution (Görüntü Filtreleme)

Sinyallerde olduğu gibi görüntülerde de filtreler kullanılabilir, mesela LPF gürültü giderme ve blurring işleminde, HPF ise kenar bulma işleminde kullanılır.

cv2.filter2D() fonksiyonu belirlediğimiz kerneli görüntüye uygulanmasını sağlar.

İlk olarak bulandırma işlemini (blurring) işlemini görelim. Genellikle görüntü içerisindeki pürüzleri gidermek için bu işlemi uygularız. Opencv kütüphanesinde genel olarak 4 temel bulandıklaştırma işlemi vardır.

Ortalama alma (Averaging): Merkezin etrafındaki pixellerin ortalama değerini alarak merkeze atar. Bunu cv2.blur() ve cv2.boxFilter() fonksiyonları yardımıyla kolaylıkla yapabiliriz. Kernel‘da hesaplamaya katılacak boyu ve yüksekliğini bizim atamamız gereklidir.

Aşağıdaki koda bakarak örnek kullanımı görebilir ve sonucu inceleyebilirsiniz.

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('opencv_logo.png')

blur = cv2.blur(img,(5,5))

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()

Gauss Filtresi

Önceki filtre eşit katsayılardan oluşuyordu, bu filtrede ise Gauss kerneli kullanılmaktadır ve cv2.GaussianBlur() fonksiyonu işleme sokulur. Yine bunda da kernelimizin genişlik ve yüksekliğini kendiniz ayarlayabilirsiniz fakat girdiğiniz değerler pozitif ve tek sayı olmak zorunda. Ayrıca X ve Y yönü boyunca olan standart sapmayı da kendiniz girmek zorundasınız. Üstteki örnek koddaki belirli alanı blur = cv2.GaussianBlur(img,(5,5),0) koduyla değiştirirseniz çıkışı da kendiniz koaly bir şekilde elde edebilirsiniz.

Medyan Filtresi

Merkezdeki pixelin değerini kernel alanı içerisindeki değerlerin medyanını alarak değiştirir. Yine kernel büyüklüğü pozitif ve tek değerlikli olmak zorundadır. cv2.medianBlur() fonksiyonu kullanılarak gerçekleştirilir.

Daha birçok kernel filtresi vardır. İnternetten rahatlıkla bunun gibi Türkçe yazılar bulabilirsiniz.