[latexpage]
2D Convolution atau Image filtering dapat dilakukan dengan cara low pass filter, dimana berfungsi untuk mengurangi noise, image blurring.
Image convolution menggunakan kernel yang berupa matrix untuk melakukan filtering. Fungsi yang digunakan adalah cv2.filter2D().
cv2.filter2D(image_source, depth, kernel)
Berikut contoh kernel matrix 5×5 untuk melakukan fiter averaging.
$K= \frac{1}{25} \begin{bmatrix}1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \ \end{bmatrix}$
Berikut contoh code filter averaging (blurring).
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
img = cv2.imread('japan-pagoda.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(14,7))
ax1.set_title('Original')
ax1.imshow(img)
ax2.set_title('Averaging')
ax2.imshow(dst)

OpenCV sendiri menyediakan 4 teknik untuk melakukan blurring yaitu averaging, gaussian, median dan bilateral
Averaging
Method ini akan menghitung rata-rata pixel dibawah kernel dan mengganti nilai dari central pixel. Fungsi yang digunakan adalah cv2.blur() atau cv2.boxFilter().
blur = cv2.blur(img,(5,5))

Gaussian Blur
Gaussian blurring sangat efektif untuk menghilangkan Gaussian noise pada sebuah image. Fungsi yang digunakan, cv2.GaussianBlur().
cv2.GaussianBlurr(image, kernel_size, sigmaX, sigmaY)
- Kernel_size: width dan height daripada kernel (bilangan ganjil positif).
- SigmaX: Gaussian kernel standard deviation untuk X.
- SigmaY: Gaussian kernel standard deviation untuk Y; JIka sigmaY = nol, maka akan diset sama dengan sigmaX, jika kedua sigma = nol, sigma akan dihitung dari kernel_size width dan height.
modifikasi kode diatas dengan mengganti fungsi blur dengan fungsi GaussianBlur()
blur = cv2.GaussianBlur(img,(5,5),0)

Median Blurring
Median Blur menggunakan nilai median pada pixel yang berada dibawah kernel area. Sangat efektif untuk menghilangkan noise pada sebuah image. Ukuran kernel harus bilangan ganjil positif.
median = cv2.medianBlur(img,5)

Bilateral Blurring
Bilateral Blurring efektif menghilangkan noise dan tetap menjaga edges tetap tajam. Namun proses memakan waktu lebih banyak dibandingkan dengan filter lainnya.
bilateralblur = cv2.bilateralFilter(img,9,75,75)

File google colab bisa dibuka di https://colab.research.google.com/drive/1BIsaxGgmx8uC3msQhhLCMZDh8zhqlJK3?usp=sharing