
이번 포스팅에서는 Gaussian Smoothing Filtering과 Median Filtering에 대해 포스팅 해보려고 한다.
에지 디텍션을 진행할 때 2가지의 블러링 기법에 대해 공부했었다.

이러한 가우시안 함수를 기반으로 계수가 정해진다.

3x3 마스크의 계수

2중 반복문과 행렬 연산을 사용한다.

에지 검출을 하기 위해 가우시안 필터링을 진행한 모습이다. (연구 때 했던 작업물)
에지 검출은 결국 영상에서 외곽선을 따는 작업인데, 여기에서 사진이 너무 선명하다면 컴퓨터가 찾아낸 에지들이 너무 많아진다. 그렇기 때문에 가장 큰 부분들만 인식할 수 있도록 필터링을 해주는 것이다.
가우시안 필터링을 하는 방법은 무척 간단하다.
(사실 상하좌우 1씩 패딩 줘야하는데 여기서는 그냥 진행했다...)
패딩 주는 법은 간단하다.
가우시안 이미지를 초기화 할 때 가로 세로 +2씩 해주고, 차후 2개의 반복문에서 인덱스를 변한 것에 맞게 조정해주면 된다. 그러니까
Gauimg = np.zeros((Row+2, Col+2))
row = 1
while row < Row - 1:
col = 1
while col < Col - 1:
value = 0
value += Gaussianmask[0][0] * img[row - 1][col - 1] + Gaussianmask[0][1] * img[row - 1][col] + Gaussianmask[0][2] * img[row - 1][col + 1] + Gaussianmask[1][0] * img[row][col - 1] + Gaussianmask[1][1] * img[row][col] + Gaussianmask[1][2] * img[row][col + 1] + Gaussianmask[2][0] * img[row + 1][col - 1] + Gaussianmask[2][1] * img[row + 1][col] + Gaussianmask[2][2] * img[row + 1][col + 1]
value /= 16
Gauimg[row][col] = value
col += 1
row += 1
이렇게 하면 된다. (어쩌다 보니 코드를 완성했다.)
import cv2
import numpy as np
import math
img = cv2.imread("newroad.jpg", 0)
Row, Col = img.shape
Gaussianmask = [[1, 2, 1], [2, 4, 2], [1, 2, 1]]
Gauimg = np.zeros((Row, Col))
row = 1
while row < Row-1:
col = 0
while col < Col-1:
value = 0
value += Gaussianmask[0][0] * img[row - 1][col - 1] + Gaussianmask[0][1] * img[row - 1][col] + Gaussianmask[0][2] * img[row - 1][col + 1] + Gaussianmask[1][0] * img[row][col - 1] + Gaussianmask[1][1] * img[row][col] + Gaussianmask[1][2] * img[row][col + 1] + Gaussianmask[2][0] * img[row + 1][col - 1] + Gaussianmask[2][1] * img[row + 1][col] + Gaussianmask[2][2] * img[row + 1][col + 1]
value /= 16
Gauimg[row][col] = value
col += 1
row += 1
print("Gaussian complete")
당시 노이즈를 제거하려고 했을 때 이 기법을 사용해보았다. (스테레오 매칭에서 노이즈를 줄이는 방법으로 여러 필터링 방법을 시도해봤었다.)
이 기법은 salt & pepper noise에 가장 효과적이다.

처음 이 필터링을 했을 때는 무척이나 신기했다. 흰색과 검은색의 점들이 말끔하게 사라지고 이질감 또한 들지 않아서.
미디언 필터링의 알고리즘은 아까 살짝 언급했듯, 이미지 내의 특정 픽셀의 값을 주변 픽셀 값들의 중앙값으로 대체하는 것이다. 그렇다면 그 과정을 거치기 위한 자세한 로직은 어떻게 될까?
이 필터링들이 복잡한 내용이 아니어서 이번 포스팅은 짧게 끝났다.