더북(TheBook)

그림 8-30은 잡음이 추가된 영상에 미디언 필터를 적용한 예를 보여준다. 그림 8-30(a)와 (c) 영상은 lenna.bmp 파일에 소금&후추 잡음을 5% 와 20% 추가한 영상이다. 그리고 오른쪽에 위치한 그림 8-30(b)와 (d) 영상은 왼쪽 영상에 대해 각각 미디언 필터링을 수행한 결과 영상이다. 미디언 필터링 수행 결과 소금&후추 잡음이 효과적으로 감소한 것을 볼 수 있다.

그림 8-30 미디언 필터의 적용 결과
(a)
(b)
(c)
(d)
Note | 미디언 필터 구현 시 정렬 방법 선택

세상에는 수많은 정렬 알고리즘이 존재하고, 각 알고리즘을 구현한 다양한 C/C++ 함수와 라이브러리가 존재한다. 많은 정렬 알고리즘들 중에서 퀵 정렬(quick sort) 알고리즘이 많은 수의 데이터에 대해서 빠른 성능을 보여주는 것으로 알려져 있다. 퀵 정렬을 구현한 함수로는 C 언어에서 제공하는 qsort 함수가 유명하며, 최근에 C++11 표준으로 들어온 sort 함수도 있다. 그러나 적은 수의 데이터를 정렬할 경우에는 퀵 정렬보다 삽입 정렬(insertion sort) 알고리즘이 더욱 빠르고 안정적으로 동작하기 때문에 『영상 처리 프로그래밍 by Visual C++』 1판에서는 insert_sort 함수를 직접 구현하여 미디언 필터에서 사용하였다.

『Visual C++ 영상 처리 프로그래밍』 2판을 집필하면서 qsort, sort, 그리고 자체 구현한 insert_sort 함수를 사용하여 미디언 필터를 구현하고 그 실행 시간을 비교해보았다. 그 결과 다음과 같은 순서로 실행 시간이 측정되었다.

sort ≈ insert_sort < qsort

즉, C++11의 sort 함수와 insert_sort 함수가 거의 유사한 성능을 나타내었고, 두 함수 모두 C 언어의 qsort 함수보다 더 빠르게 동작하였다. 그러므로 이 책에서는 따로 구현을 하지 않아도 사용할 수 있고 속도도 빠른 C++의 sort 함수를 이용하여 미디언 필터를 구현하였다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.