이미지 필터링 (Image Filtering)
이미지에는 항상 어느 정도의 노이즈(noise)가 발생한다.
이로 인해 같은 환경에서 같은 물체를 여러 번 촬영하여도, 매번 다른 이미지가 촬영되게 된다.
필터링은 이러한 이미지의 노이즈를 제거하는데 사용된다.
노이즈 (Noise)
이미지에는 다양한 노이즈가 발생할 수 있는데, 위 이미지에 나타난 대표적인 사례들을 살펴보자.
좌측의 이미지는 원본 이미지이며, 중앙은 가우시안 노이즈, 우측은 소금과 후추(salt and pepper) 노이즈이다.
가우시안 노이즈는 이미지의 픽셀값이 정확히 저장되지 않고 부정확하게 저장되어 얼룩이 생긴 것처럼 보이게 된다.
한편 소금과 후추 노이즈는 마치 사진에 소금과 후추를 뿌린 것처럼, 특정 픽셀들이 0이나 255(즉, 검은색이나 하얀색) 값을 가지게 되는 노이즈로, 센서 불량 등에 의해 발생할 수 있다.
사실 우리가 일반적으로 보는 컬러 이미지에는 HW/SW 기술의 발전으로 이런 노이즈를 관찰하기 어렵지만, 열화상 영상과 같은 특정 이미지들에서는 이러한 노이즈가 중요하게 작용하게 된다.
필터링 (Filter)
이러한 노이즈를 제거하는데 필터를 사용한다. 필터는 $n\times m$ 크기의 어떤 행렬로 구성되는데, 커널(Kernel)이라고도 한다.
필터링을 진행하면, 각 픽셀에 대해 $n\times m$ 크기의 필터를 사용하여 가중치 평균(weighted average) 연산을 수행하는데, 이미지 $I$와 필터 $F$로 구성된 아래 예시를 보자. (편의를 위해, 행렬 대신 벡터를 사용하였다.)
$$ I = [ 1, 1, 7, 1, 1, 2, 1, 2 ], F = [\frac{1}{3}, \frac{1}{3}, \frac{1}{3}] $$
이미지 좌측부터 필터를 한 칸씩 이동시키며, 가중치 합을 구한다.
$$ \text{Result} = [1\times \frac{1}{3} + 1\times \frac{1}{3} + 7\times \frac{1}{3}, \cdots ]\\
\text{Result} = [3, 3, 3, \frac{4}{3}, \frac{4}{3}, \frac{5}{3}] $$
7이라는 이상치(outlier)가 있던 기존 $I$에 비해, 데이터가 전체적으로 비슷한 값들을 갖게 된 것을 알 수 있다.
위에서는 $1\times 3$ 크기의 필터를 사용하였는데, 필터가 커질수록 더 넓은 범위에서 평균을 구하기에 이러한 이상치에 강해진다.
한편, 필터링을 진행하면서 이미지의 크기가 작아진 것을 알 수 있다.
이를 방지하기 위해 이미지 바깥쪽에 패딩(Padding)이라 하는 값들을 붙여주기도 한다.
패딩은 다양한 방법으로 수행되는데, 0값으로 패딩 하는 zero padding, 가장자리의 가장 가까운 픽셀 값을 복사하는 same padding 등이 있다.
상황에 따라 패딩은 각기 다른 영향을 주는데, 특히 zero padding을 할 경우, 가장자리 부분에 의도치 않은 효과가 적용될 수 있다. (이미지 가장자리에 어두운 외곽선이 생길 수 있다.)
다양한 Filters
필터에 어떤 가중치를 넣어주느냐에 따라 필터가 수행하는 변환이 달라진다.
위에서처럼 필터의 가중치를 평균을 구하도록 주면 box filter라 하며, 이미지가 blur해지는 효과가 있다.
필터를 여러 개 적용하여 새로운 효과를 줄 수도 있다.
$$F_1 = \begin{bmatrix} 0&0&0\\ 0&2&0 \\ 0& 0& 0\end{bmatrix} , F_2 = \begin{bmatrix} \frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\ \frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\ \frac{1}{9} & \frac{1}{9} & \frac{1}{9} \end{bmatrix} $$
예를 들어, 위 필터 $F_1, F_2$를 이미지에 각각 적용하여 $I_1, I_2$를 얻고, $I_1 - I_2$ 연산을 수행하면 sharpning 효과를 볼 수 있다.
$I_1$이 모든 픽셀이 2배 강화된 이미지인데, 거기서 흐려진(모서리가 옅어진) $I_2$를 빼면 강화된 모서리가 남기 때문이다.
비슷하게 원본 이미지 $I$에서 흐려진 $I_2$를 빼는 $I - I_2$를 수행하면 이미지의 detail 요소들 $I_d$을 얻을 수 있다.
이를 이용해 $I + \alpha I_d$를 수행하면 역시 sharpning 효과를 얻을 수 있다.
Cross Correlation and Convolution
지금까지 배운 filter 연산을 Cross-correlation이라 하고 $A\otimes B$라 쓴다.
한편, 합성곱(Convolution) 연산도 존재하는데, 이는 $A * B$라 쓴다.
합성곱 연산은 Cross-correlation 연산에서 필터를 수직/수평 반전 시킨 연산인데, 사실 최근에는 cross-correlation, filtering 연산을 모두 convolution이라 부르는 추세이다.
Filter의 디자인
Gaussian Filter는 정규분포를 이용하여 필터의 중앙부에는 큰 가중치를, 필터의 외곽에는 작은 가중치를 준 필터이다.
이 필터를 적용하면 이미지에서 high frequency를 제거하여, 노이즈를 효과적으로 제거할 수 있다.
그러나 gaussian filter는 salt and pepper noise와 같이 outlier를 가진 noise는 제거하기 어렵다.
이런 missing value나 outlier로 인한 noise는 median filter를 사용하여 제거한다.
median filter는 필터 영역 내의 중간값을 취하여 픽셀을 채우기 때문에, 필터 영역 안에 outlier가 있어도 잘 제거한다.
Convolution의 성질
$$ f * g = g * f \\
(f*g)*h = f*(g*h)\\
kf*g = f*kg = k(f*g)\\
f*(g+h) = f*g + f*h$$
합성곱은 선형 연산으로, 위와 같은 성질들이 성립한다.
한편, median filter는 비선형 연산으로 $f(x+y) = f(x) + f(y)$가 성립하지 않는다.
필터의 Linearity
median 필터를 비롯한 어떤 필터들은 선형적이지 않은 연산을 수행한다.
Filter의 선형성은 어떻게 판단할까?
결과를 알려드리자면 어떤 이미지 $A,B$에 대하여, 연산 $F$를 적용할 때, 다음이 성립하면 선형이라 할 수 있다.
$$ F(A) + F(B) = F(A+B) $$
'Deep Learning > 영상처리' 카테고리의 다른 글
코너 검출 (Corner Detection) (0) | 2023.03.08 |
---|---|
Line Fitting (RANSAC, HOUGH transform) (0) | 2023.03.08 |
엣지와 그래디언트 (Edge and Gradient) (0) | 2023.03.07 |
Camera 시스템 (0) | 2023.03.06 |
[Python/OpenCV] 투영을 이용한 이미지 변환 (0) | 2023.02.22 |
댓글
이 글 공유하기
다른 글
-
Line Fitting (RANSAC, HOUGH transform)
Line Fitting (RANSAC, HOUGH transform)
2023.03.08 -
엣지와 그래디언트 (Edge and Gradient)
엣지와 그래디언트 (Edge and Gradient)
2023.03.07 -
Camera 시스템
Camera 시스템
2023.03.06 -
[Python/OpenCV] 투영을 이용한 이미지 변환
[Python/OpenCV] 투영을 이용한 이미지 변환
2023.02.22