오늘은 공간 도메인 필터링에 대해서 알아볼것이다.
1. 선형 공간 필터링(Linear Spatial Fitering)
위 방법은 마스크를 이용하여 필터링을 하는 방법이다.
마스크는 필터라고 보면 된다. 예를 들면 3*3 마스크가 있다고 하자.
이렇게 이미지 픽셀 마다 마스크를 씌워가며 값을 구해주는 것이다.
연산 방법은 우리가 앞에서 배운 컨볼루션(convolution)과 비슷한 correlation을 사용할 것이다.
convolution에서 우리는 h[n]을 영점 대칭을 시켜준후 연산 진행했는데 correlation은 그냥 원점대칭하지 않고 그냥 곂치는 것대로 연산을 해주면된다. 예를 들면
이런식의 연산이 나오는 것이다. 이렇게 보면 correlation 과 convolution의 차이를 명확히 이해할 수 있다.
여기서 무언가가 이상한 점이 보인다면 맞을 것이다. 바로 이미지 크기가 작아졌다는 것이다.
마스크를 씌우면
저 x 부분을 채워주지 않으면 이미지가 작아지기 때문에 무시하고 그냥 영상을 작게 만드는 것을 ignoring이라고 하고
만약 영상크기를 유지하고 싶으면 padding이라는 것을 쓴다.
padding은 x 부분을 값으로 채워주어 원래 이미지 크기를 유지하게 만들어주기 때문에 중요한 기술이다.
또한 주의해야할 것은 결과는 clipped해야한다. 이 말은 이미지 픽셀의 밝기 최대 값이 255인데 correlation 한 값이 255를 넘어가면 안된다. 그러니 범위를 최대 최소 값의 범위를 설정해주는 것을 clipping이라고 한다.
2. Lowpass Spatial Filters
이것은 낮은 주파수 영역만 통과시키는 기술이다.
저렇게 검은점과 흰색이 있는 높은 주파수 영역을 흐릿하게 만드는 것이다.
box filter kernels
kernels은 마스크와 똑같은 용어이다.
box 필터는 평균필터라고 불리는데
이런식으로 이웃 값을 이용하여 평균의 값으로 만들어준다. 여기서 중요한 점은 박스 필터 앞에 1/9 이 보일것이다.
필터의 모든 값을 1로 만들어 주어야하는데 그 이유는 간단하다. 모든 합이 1이 아닐 경우 원래 이미지의 값이 전반적으로 더 커지거나 작아질 수 있는데 이렇게 되면 영상이 전반적으로 밝아지거나 어두워질 수 있기 때문에 그것을 방지하기 위해서 필터의 합을 1로 만들어 주는 것이다.
가오시안 필터(Gaussian filter)
아까 박스 필터같은 경우 모든 동일한 값을 주었다면 가오시안 필터는 거리를 기준으로 가까운 것에 높은 가중치 멀리는 위치는 작은 가중치를 주는 것이다.
보면 가운데는 각 위치에 다른 가중치를 가지고 있다. 가오시안 필터는 방향에는 영향을 받지 않고 오직 거리에만 영향을 받는것에 주의하고 아까도 말했듯이 필터 전체의 합은 1로 유지해주기 위해 k를 곱한 모습이다.
가오시안 필터의 특징
1. isotropic : 아까 설명한 등반성 모든 방향에 대해서 똑같고 거리에만 영향을 받는다.
2. separable :
separable이 만족한다는 것은 2D function ->1D function으로 바꿀 수 있다.
1D function 연산은 2D function연산보다 더 빠른 연산이 가능하다는 장점을 가지고 있다.
𝜎 커지면 size도 비례해서 커진다.
이유는
이런식의 그래프 모양을 가지기 때문에 𝜎커지면 사이즈도 커져야한다.
위 필터들의 문제점은 경계선도 흐릿하게 만들어 버린다는 것이다. 위 에서 a라는 글자는 흐릿하게 만들고 싶지 않을 때 우리는 양방향 필터(bilateral filter)을 사용하여 경계선 에지 부분을 살릴 수 있다.
양방향 필터(bilateral filter)
가오시안 필터가 두 픽셀간 거리만 고려했다면
바이레터럴 필터는 두 픽셀간 거리와 두 픽셀의 밝기값 차이도 고려하는 기술이다.
픽셀 밝기 값의 차이가 너무 크면 가중치를 0에 가까운 값이 되도록 하여서 경계선을 보존한다.
즉, 큰 경계는 살리고 자잘한 노이즈만 제거한다.
중간값 필터 (Median Filter)
이 필터는 nonlinear 비선형 공간 필터이다.
이것은 이웃한 픽셀을 오름차순으로 정렬한 후 그 중 가운데 있는 값으로 변경해주는 것으로
예를 들면 (10 20 20 15 20 20 25 100)이 있다면 정렬 후 (10 15 20 20 20 25 100) 여기서 중간 값인 20으로 변경해준다.
이 필터의 장점은 팍 튀는 impulse noise를 잡는데 엄청 용이하다. 평균 필터는 한 값이 너무 크게 되면 평균값이 그 한 값으로 인해 많이 올라가버리는데 이 필터는 중간값을 이용하기 때문에 impulse noise(salt and pepper noise)에 유용하다.
마지막으로 패딩 확장 방법을 알아보겠다.
BORDER_CONSTANT -> 패딩부분을 0으로 채움
BORDER_REPLICATE -> 경계선기준으로 마지막에 있는 원소로 채움
BORDER_REFLECT -> 경계선기준으로 대칭해서 채움
BORDER_REFLECT_101 -> 대칭축을 다르게 잡아서 채움
가장 흔하게 쓰이는 필터는 REPLICATE, CONSTANT를 많이 쓴다.
특히 중간값 필터는 거의 REPLICATE를 쓰는 그 이유는 중간값에 영향을 적게 주기 위해서라고 한다.
YEA!