7.4.1 비트 평면이란?
일반적인 그레이스케일 영상은 픽셀 값을 저장하는 데 8비트bit의 메모리 공간을 사용한다. 각각의 비트는 0 또는 1의 값을 가질 수 있다. 이처럼 각 비트에 대하여 그 값이 0인지 1인지를 검사하여 이를 하나의 영상 형태로 만든 것을 비트 평면bit-plane이라고 부른다. 그레이스케일 영상은 8장의 비트 평면을 생성할 수 있고, 각 비트 평면은 이진 영상binary image의 형태로 표현될 수 있다. 즉, 해당 비트의 값이 0이면 비트 평면 영상의 그레이스케일 값을 0으로 설정하고, 비트의 값이 1이면 그레이스케일 값을 255로 설정한다.
8비트로 구성되는 그레이스케일에서 최상위 비트에 해당하는 비트를 보통 가장 중요한 비트most significant bit라고 부른다. 이는 최상위 비트가 영상의 윤곽 정보를 가장 잘 간직하고 있기 때문이다. 최상위 비트로 만든 비트 평면 영상은 원본 영상의 그레이스케일 값이 128보다 같거나 크면 255로 설정하고, 128보다 작으면 0으로 설정한 것과 같다. 왜냐하면 십진수 127이 이진수로 01111111(2)이고, 십진수 128은 이진수 10000000(2)으로 표현되기 때문이다. 반면에 최하위 비트로 만든 비트 평면은 시각적으로 영상의 윤곽 정보를 거의 가지고 있지 않기 때문에 가장 덜 중요한 비트least significant bit라고도 불린다. 이처럼 영상을 비트 평면으로 분할하는 것은 영상에서 특정 비트의 중요도를 분석하는 데 중요한 정보를 제공한다. 이러한 정보는 영상의 압축compression관련 연구에서 중요하게 사용될 수 있다. 영상의 최하위 비트에 보이지 않는 정보를 첨가하여 일종의 워터마킹watermarking 기법처럼 사용할 수도 있다.
그림 7-17은 실제 영상에 대하여 비트 평면 나누기를 수행한 결과이다. 맨 윗줄에 나타난 영상이 입력 영상인 camera.bmp 파일이다. 이 영상을 최상위 비트부터 최하위 비트의 순서로 비트 평면을 생성하여 두 번째와 세 번째 줄에 차례대로 나타내었다. 최상위 비트의 경우 카메라맨의 전체적인 윤곽을 잘 표현해주는 것을 알 수 있다. 그러나 하위 비트로 갈수록 카메라맨의 윤곽이 점점 흐려지고, 최하위 비트 평면의 경우 거의 의미를 찾을 수 없는 영상임을 확인할 수 있다.
그러면 이제 영상의 비트 평면을 구하는 함수를 작성해보자. 함수의 이름은 IppBitPlane을 사용하기로 하고, IppEnhance.h 파일에 아래와 같이 함수 선언을 추가하자.
void IppBitPlane(IppByteImage& img1, IppByteImage& img2, int bit);