[컴퓨터비전] Filter
이미지는 어떻게 표현되는가
이미지는 다양한 연산을 수행할 수 있도록 행렬 형태로 전환된다. 이 때 행렬의 크기는 (세로 방향 픽셀 수 * 가로 방향 픽셀 수 * 채널의 수) 이다.
흑백 이미지라면 채널의 수는 1이고, 컬러 이미지라면 채널의 수는 3이다. (각각이 RGB 채널을 담당한다.)
noise의 종류
다양한 이유로 이미지에는 noise가 발생할 수 있다. 이러한 noise를 이미지 상에서 효과적으로 제거하기 위한 다양한 기법들이 존재한다. 먼저 noise의 종류를 살펴보자.
Impluse noise : 랜덤한 위치의 픽셀을 하얀 픽셀로 만든다.
Salt and pepper noise : 랜덤한 위치의 픽셀을 하얀 픽셀 또는 검은 픽셀로 만든다.
Gaussian noise : 현재 픽셀값에 정규분포를 따르는 noise값을 더하거나 뺀다.
noise를 제거하기 위한 첫 번째 아이디어로는 픽셀의 값을 근처 픽셀의 값의 평균으로 대체하는 방법이 있다 (moving average). 이 아이디어를 사용하기 위해서는 픽셀의 값이 근처 픽셀의 값과 비슷할 것이다, noise가 생기는 과정은 iid 가정을 만족할 것이다. 의 가정을 만족해야 한다 (iid = independent and identically distributed). 근처 픽셀들에 가중치를 준 뒤, 가중치 평균으로 대체하는 방법도 있다 (weighted moving average). 가중치 평균은 픽셀의 끊김 현상을 방지한다.
사실 위의 방법은 이미지에 filter를 씌우는 것과 같다. 이미지에 filter를 씌우는 것은 이미지와 filter 사이의 요소별 곱하기 (element-wise multiplication) 을 하는 것이다. 이 작업을 통해 특정 픽셀 근처 픽셀들의 정보를 취합할 수 있다.
이와 같은 filtering은 이미지의 noise를 없애거나, 사이즈를 조절하거나, 이미지를 부드럽게 하는 등 이미지를 수정하는 작업에도 쓰이고, 이미지의 texture이나 모서리, 패턴 등을 찾아내는데도 쓰인다.
Correlation filtering
이미지 행렬 F에 필터 H를 씌워 필터링된 이미지 행렬 G를 만드는 과정은 아래와 같은 수식으로 나타낼 수 있다. 이 과정은 cross-correlation이라 부른다. 필터 H는 kernel 또는 mask로 불린다.
앞서 설명한 moving average 방법은 왼쪽의 필터를 이미지에 cross-correlation한 것이다.
왼쪽은 gaussian filter의 한 예이다. 더 가까운 이웃 픽셀에 높은 가중치를 부여한 방식이다.
gaussian filter가 사용됨으로써 값이 큰 픽셀들은 제거되는 특성을 보인다. 따라서 gaussian filter은 low-pass filter의 특징을 보인다.
gaussian filter는 2차원 정규분포를 근사한 것이다. 따라서 정규분포의 σ값에 따라 다양한 gaussian filter가 존재한다.
주로 필터 사이즈 = 6 * σ + 1의 공식을 따른다.
Cross-correlation vs. Convolution
Convolution 연산은 cross-correlation 연산과 별 차이가 없다. 단지 필터를 뒤집느냐 그렇지 않느냐의 차이이다.
그러나 필터를 뒤집음으로써 convolution 연산은 엄청난 강점을 가진다. convolution 연산은 cross-correlation 연산과 달리 교환법칙과 결합법칙이 성립한다 (왜 성립하는지는 직접 그려보면 알 수 있다!). 연산 속도에서 월등하기에 convolution 연산이 더 사용된다.
Filter의 종류
1) original filter : 아무 변화도 없다.
2) blur filter : 부드러워진다.
3) sharpen filter : 날카로워진다. sharpen filter는 original filter + (original filter - blur filter)와 같다. 즉, 원래 이미지에서 blur인 속성을 제거하였으므로, 날카로운 이미지로 변환된다. 픽셀의 관점에서 보자면, 값이 큰 픽셀의 값은 더욱 커지고 그 근처 픽셀의 값은 작아지게 된다.
4) gradient filter : 픽셀의 변화도를 나타내는 필터이다.
5) median filter : 픽셀의 값을 근처 픽셀 값의 median값으로 정한다. 다른 filter와 달리 새로운 픽셀값이 등장하지 않는다.
impulse noise, salt and pepper noise를 제거하는 데에 효과적이다.