개요
이미지 필터링은 주어진 이미지에 일련의 연산을 거쳐 새 이미지를 얻어내는 것을 말한다. 컴퓨터 비전에서는 주로 이미지로부터 정보를 얻기전 전처리를 위해 이미지 필터링을 사용한다. 참고로 머신러닝에서도 이미지 학습전 전처리용도로 사용된다.
이미지를 바라보는 관점
컴퓨터 과학에서는 이미지를 다음 두가지 관점으로 볼 수 있다.
1. 비트 행렬
2. x,y좌표 입력시 컬러값을 주는 함수
2의 관점은 각 픽셀값이 연속적이라고 생각한다면(선형적으로든 어떤 방식으로든) 기울기같은 여러 유용한 관점도 활용 할 수 있게 된다.
2의 관점은 f(x,y),g(x,y)등으로 표현할 수 있다. 이에 대한 여러 활용은 다음과 같다.
g(x,y) = f(x,y) + 20 =>g는 f보다 20 밝은 이미지
g(x,y) = f(-x,y) => g는 f의 x축 뒤집힌 이미지
g(x,y) = f(x+20,y) => g는 f의 x축으로 20밀린 이미지
선형 필터링
선형 필터링은 새 이미지의 각 픽셀을 원본 이미지의 해당 픽셀의 특정 사각형 범위의 이웃들의 선형결합, 즉 가중합으로 구하는 필터링이다. 이러한 선형 필터링은 커널이라는 행렬로 표현할 수 있다.
커널
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
다음 커널을 이용하여 특정 이미지를 선형 필터링한다는 것은 다음을 의미한다.새 이미지의 각 픽셀은 원본 이미지의 해당 픽셀을 Px,y라 했을때 다음과 같이 계산된다.여기서 x축은 오른쪽이 양의 방향, y축은 위가 양의 방향이다. 이는 시스템마다 다를 수 있다.
1 * Px-1,y+1 + 2 * Px,y+1 + 3 * Px+1,y+1 + 4 * Px-1,y + 5 * Px,y + ... + 9 * Px+1,y-1
즉 커널의 각 원소는 특정 픽셀이 가운데 있다고 할때 각 이웃에 주어지는 가중치이다.
사실 커널을 적용해서 선형 필터링을 하는 방법은 두가지가 있는데 이는 두가지중 Cross-correlation방식이다.
Cross-correlation
위 방식대로 적용한다.
f가 이미지이고 k가 커널 행렬일때
f Ⓧ k 또는 k Ⓧ f로 표현한다,
Convolution
커널을 x축,y축으로 한번씩 뒤집고 적용시킨다.
f * k 또는 k * f로 표현한다.
커널 연산들은 선형성을 뛴다
그냥 Cross-correlation를 쓰면 될텐데 왜 굳이 Convolution를 쓰는 것일까. 실제로 예시등에도 Convolution를 기본적으로 쓴다. 아직 그 이유는 모르겠다. 하지만 컴퓨터비전을 배우다보면 저 연산이 더 편하고 유용한 부분이 있기에 정의하고 쓰지 않을까 추측한다.
커널 예시
다음은 몇가지 커널이다. Convolution으로 설명한다.
0 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
그냥 이미지를 유지한다. 이후 커널들을 합치는 등의 연산에 연산도구로 활용된다.
0 | 0 | 0 |
0 | 0 | 1 |
0 | 0 | 0 |
왼쪽에 있는(커널을 뒤집으므로) 픽셀의 값을 중앙 픽셀이 가지게 되는 셈이다. 이미지가 오른쪽으로 한칸 밀린다.
테두리 처리
선형 필터링에서 생각할만한 문제는 이미지의 테두리에 있는 픽셀은 특정 방향 이웃이 없는데 어떻할 것이냐 이다.
기본적인 방법은 이웃이 부족한 픽셀은 처리를 안하는 것이다. 즉 이미지 크기가 준다.
두번째 방법은 제로 채우기다. 이미지에 충분하게 0을 가진 픽셀을 테두리 쳐준다. 흐리기의 경우 이미지 테두리 부분은 밝아질 것이다. 아니면 0대신 적절한 값을 넣어도 된다.
노이즈 제거 필터링
가장 기본적인 필터링이자 노이즈 제거 방법중 하나인 흐리기 필터링을 보자.그중에서도 기본적인 방법은 box필터링이다. nxn커널의 각 원소에 1/n^2의 가중치를 넣는다. 즉 그냥 이웃들의 평균이다.더 좋은 방법은 가우시안 필터링이다. 가우시안 분포로 커널의 가중치를 구하고 합이 1이 되도록 수정한다. 좀 더 부드러우며 시그마 값으로 정도를 조절할 수 있다.이렇게 전체를 흐려 이미지의 전체적인 주파수, 즉 이웃간의 차이를 줄이는 필터를 low-pass라 하며 이미지가 low frequency가 됬다고 말한다.
샤프닝 필터링
흐리기와 반대로 이미지를 뚜렷하게 만들어보자. 우선 흐리기 필터를 이용하여 이미지를 흐린다. 그리고 그 이미지를 원본에 뺀다. 해당 이미지의 -255~255의 값을 적절하게 정규화하여 이미지로 만들면 테두리를 나타낸듯한 이미지가 나온다. 이러한 필터링(정규화는 포함안함, 정규화는 이미지를 확인해보기 위한 것)을 이웃간의 차이를 추출하는 high-pass라고 하며 이미지가 high frequency가 됬다고 한다.
여기서 이러한 high frequency이미지(정규화x)를 원본에 특정 가중치로 더하면 뚜렷한 샤프닝 이미지가 나온다.
이때 블러링 필터를 적용한 이미지를 원본에 뺀 이미지를 원본에 a가중치로 더하는 처리는 커널들을 조합하여 하나의 커널로 만들 수 있다. 다음 식을 보자.
s = 샤프닝 이미지, f = 원본이미지, b= 블러링 이미지, w= 단위커널, v= 블러링 커널
s= f + a(f-b)
= (1+a)f - ab
= (1+a)(w * f) - a(v * f)
= ((1+a)w - av) * f
즉 ((1+a)w - av)가 샤프닝 커널이된다.
비선형 필터링
비선형 필터링의 몇가지 예시는 다음과 같다.
Thresholding
원본 이미지의 픽셀이 특정 구간이면 특정값으로 변경시킨다.
Rectification
픽셀의 값 범위를 줄인다. (음수는 0으로 만들기 등)
Median filter
원본 이미지의 픽셀의 특정 범위의 이웃들의 중앙값을 새 이미지의 해당 픽셀값으로 한다. 심하게 색이 크게 튀는 이미지의 노이즈를 제거할 때 평균 블러링보다 효과적이다.
참고 강의
부산대학교 정보컴퓨터공학부 컴퓨터비전개론(감진규 교수님)
'인공지능 > 컴퓨터비전' 카테고리의 다른 글
[컴퓨터비전개론][6장]Transformations (0) | 2023.04.06 |
---|---|
[컴퓨터비전개론][5장]feature descriptor (0) | 2023.04.03 |
[컴퓨터비전개론][4장]feature detection (0) | 2023.03.29 |
[컴퓨터비전개론][3장]이미지 resize (0) | 2023.03.25 |
[컴퓨터비전개론][2장]edge detection (2) | 2023.03.25 |