3.1.1 비트맵 정의와 종류
컴퓨터에서 영상을 표현하는 대표적인 방법이 비트맵bitmap이다. 비트맵은 말 그대로 비트bit들의 집합map이다. 여러 개의 비트가 모여 한 점(픽셀)의 색상을 표현하고, 색상을 가진 점들이 모여 영상을 구성한다. 비트맵 방식은 영상의 전체 크기(가로×세로)에 해당하는 픽셀 정보를 모두 다 저장해야 하기 때문에 메모리 용량을 많이 차지하는 단점이 있지만, 압축 기법을 사용하지 않고 표현이 직관적이어서 분석이 용이하다. 또한 비트맵 방식은 복잡한 계산 없이 단순히 그림을 복사하여 화면에 보여주기 때문에 벡터 방식보다 화면 출력 속도가 빠르다. 참고로 비트맵 방식과 상반되는 개념으로 벡터 그래픽vector graphics 방식이 있는데, 이 방식은 점, 선, 면 등의 기본적인 그리기 도구를 이용하여 그림을 표현한다. 벡터 그래픽 방식은 주로 캐드CAD나 글꼴(폰트)을 표현할 때 사용한다.
Windows에서 지원하는 비트맵에는 두 가지 종류가 있다. 하나는 장치 의존 비트맵Device Dependent Bitmap이고 다른 하나는 장치 독립 비트맵Device Independent Bitmap이다. 장치 의존 비트맵은 영어 약자로 DDB라고 쓰고, 장치 독립 비트맵은 DIB라고 쓴다. 여기서 장치device란 보통 출력 장치를 의미하고, 출력이라는 것은 주로 모니터 화면에 영상을 나타내는 것을 의미한다. DDB의 경우, 말 그대로 출력 장치에 의존적이기 때문에 특정 장치에서 만들어진 DDB는 다른 장치에서 정상적인 색상으로 표현되지 않을 수 있다. 이와 달리 장치 독립 비트맵인 DIB는 출력 장치가 달라지더라도 어디에서나 자신의 비트맵이 제대로 출력되도록 할 수 있다. 이는 장치 독립 비트맵에는 자신의 색상을 표현하는 색상 테이블color table이 있기 때문이다.
사진과 같은 영상을 표현하기 위해서는 장치 독립 비트맵인 DIB를 사용한다. 그러므로 컴퓨터에서 영상을 화면에 제대로 출력하기 위해서는 DIB의 표현 방식을 정확히 알고 있어야 한다. 참고로 널리 사용되고 있는 BMP, JPG, GIF, PNG 등의 영상 파일 포맷들도 화면에 출력하기 위해서는 파일을 분석하여 DIB 포맷으로 전환해야 한다.
BMP 파일 포맷은 DIB 구조를 그대로 파일 형태로 저장한 것이라고 할 수 있다. 다만 파일로 저장하기 위해 DIB 구조 앞에 BMP 파일과 관련된 정보를 추가로 저장한다. 3.2절에서는 BMP 파일 구조와 DIB 형식에 대해 자세히 알아볼 것이다.
컴퓨터에서 널리 사용되는 영상 파일 포맷에는 BMP, JPG, GIF, PNG 등이 있다. BMP 포맷을 제외한 나머지 포맷들은 모두 파일 용량 감소를 위해 자체적인 압축 알고리즘을 사용하기 때문에 파일 입출력이 매우 복잡하며 나름의 특징들을 가지고 있다. 영상 처리 전공자 입장에서 각 파일 포맷의 특징을 아래에 간략히 정리해보았다.
• BMP: 픽셀 데이터를 압축하지 않고 그대로 저장한다. 그렇기 때문에 구조가 간단한 반면, 파일 용량은 커지는 단점이 있다. 파일 구조가 간단해서 굳이 별도의 라이브러리 도움 없이 직접 파일 입출력이 가능하다.
• JPG: 주로 사진과 같은 트루컬러 영상을 저장하기 위해 사용되며, 손실 압축(lossy compression)을 사용한다. 손실 압축으로 저장된 영상은 다시 압축을 풀어 복원하면 원본 영상의 픽셀 값에 미묘한 차이가 발생한다. 특히 압축을 많이 하면 할수록 픽셀 값이 많이 변하기 때문에 영상 처리 분야에서 JPG 형식의 데이터를 사용하는 것은 그다지 바람직하지 않다. 그러나 압축률이 좋아서 파일 용량이 크게 감소하기 때문에 디지털 카메라에서 주로 사용하는 사진 파일 형식이다.
• GIF: 256 이하의 색상을 가진 영상만을 저장할 수 있는 포맷이며, 무손실 압축(lossless compression)을 수행한다. 카메라로 찍은 사진을 GIF로 저장하면 자동으로 256 색상으로 변환되기 때문에 화질이 나빠진다. GIF 포맷은 움직이는 그림인 Animation GIF도 지원하기 때문에 인터넷 웹페이지에서 널리 사용되고 있다.
• PNG: Portable Network Graphics의 약자이며, 무손실 압축을 수행한다. GIF 포맷이 256 색상 영상만을 지원하는 것에 반해 PNG는 256 색상 영상뿐만 아니라 트루컬러 영상도 지원한다. 트루컬러 영상 저장 시에도 무손실 압축을 사용하기 때문에 JPG 파일보다 파일 용량은 커지지만 픽셀 값이 변경되지 않은 장점이 있다.