더북(TheBook)

8.5.1 미디언 필터

미디언 필터median filter는 입력 영상에서 주변 픽셀들의 값들을 오름 또는 내림 차순으로 정렬하여 그 중앙에 있는 값으로 픽셀 값을 대체하는 방식의 필터이다. 이 필터의 이름인 ‘미디언median’은 ‘중간값’을 의미하는 영어 단어이다. 미디언 필터는 마스크 값과 입력 픽셀의 값을 곱하여 선형 합으로 계산하는 필터가 아니기 때문에 비선형 공간적 필터링 기법으로 분류된다. 미디언 필터는 특히 소금&후추 잡음을 효과적으로 제거하는 능력을 가지고 있는 것으로 알려져 있다.

미디언 필터의 동작을 도식적으로 나타내면 그림 8-29와 같다. 그림 8-29에서는 3×3 크기의 정방형 마스크를 사용하였다. 이 경우 자기 자신과 주변 8개의 픽셀 값을 일렬로 늘여 세운 후, 이를 픽셀 값 크기 순으로 정렬한다. 그리고 정렬된 데이터에서 중앙에 있는 픽셀 값의 크기가 85이므로, 원래 픽셀 값 82를 85로 교체한다. 이와 같은 과정을 영상 전체 픽셀에 대하여 수행하면 미디언 필터의 결과 영상이 만들어진다.

그림 8-29 미디어 필터링 수행 방법

미디언 필터를 구현하기 위해서는 픽셀 값을 정렬하는 정렬 알고리즘을 사용해야 한다. 다양한 정렬 알고리즘과 그에 따른 여러 가지의 라이브러리를 사용할 수 있지만, 이 책에서는 C++11에서 제공하는 sort 함수를 사용하여 픽셀 값을 정렬할 것이다.

그러면 실제 영상에서 미디언 필터링을 수행하는 함수를 작성해보자. 미디언 필터를 수행하는 함수의 이름은 IppFilterMedean을 사용하기로 하고, IppFilter.h 파일에 아래와 같이 함수 선언을 추가하자.

void IppFilterMedian(IppByteImage& imgSrc, IppByteImage& imgDst);
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.