래스터 데이터 압축
IT위키
더 많은 작업
래스터 데이터 압축은 지리정보시스템에서 일정한 격자(셀)마다 값을 저장하는 래스터 자료의 크기를 줄이려고, 같은 값이 이어지거나 뭉쳐 있는 성질을 이용해 저장하는 방법이다.
래스터 자료는 구조가 단순하지만 셀 하나하나에 값을 적으므로 해상도를 높이면 용량이 급격히 커진다. 그런데 토지 이용도·토양도 같은 주제도는 같은 값의 셀이 넓게 뭉쳐 있다. 이 반복을 짧게 표현하면 정보를 잃지 않고(무손실) 용량을 줄일 수 있다. 대표적인 방법이 런렝스 코드, 체인 코드, 블록 코드, 사분트리다.
| 방법 | 원리 | 특징 |
|---|---|---|
| 런렝스 코드(Run-length Code) | 행 단위로 읽어 같은 값이 연속되는 구간(run)을 '값과 개수' 또는 '시작 열·끝 열·값' 으로 저장한다 → 런렝스 인코딩 | 가장 단순하고 널리 쓴다. 1차원(행 방향) 반복만 이용한다 |
| 체인 코드(Chain Code) | 한 영역의 경계를 시작점 좌표와, 그 점에서 이웃 셀로 옮겨 가는 방향 번호(4방향은 0~3, 8방향은 0~7)의 연속으로 저장한다 | 영역의 둘레와 모양을 간결하게 나타낸다. 면적·둘레 계산이 쉽지만 경계를 공유하는 영역은 두 번 저장한다 |
| 블록 코드(Block Code) | 런렝스를 2차원으로 넓혀, 같은 값의 영역을 여러 크기의 정사각형 블록으로 나누고 블록마다 기준 좌표와 한 변의 크기만 저장한다 | 2차원 뭉침을 이용한다. 블록 분할이 계층적이지 않다 |
| 사분트리(Quadtree) | 전체 영역을 4개의 정사각형으로 나누고, 안의 값이 모두 같지 않은 사분면만 다시 4개로 나누기를 계층적으로 되풀이한다. 값이 한 가지인 사분면은 더 나누지 않고 잎 노드 하나로 저장한다 | 넓은 균일 영역은 큰 칸 하나로, 복잡한 경계 부근만 잘게 저장한다. 공간 색인으로도 쓴다 |
- "공간을 4개의 정사각형으로 계층적으로 분할하여 압축" 하는 것은 사분트리다. 블록 코드도 정사각형을 쓰지만 4분할을 되풀이하는 계층 구조가 아니고, 런렝스는 행 방향의 연속 구간, 체인 코드는 경계의 방향을 저장한다
다음 4×4 래스터를 런렝스로 저장하면 행마다 (값, 개수) 쌍이 된다.
A A A A → (A,4) A A B B → (A,2)(B,2) A A B B → (A,2)(B,2) C C B B → (C,2)(B,2)
사분트리로는 전체를 4등분해 왼쪽 위(A 만), 오른쪽 위(A·B 섞임), 왼쪽 아래(A·C 섞임), 오른쪽 아래(B 만)로 나누고, 섞인 두 사분면만 다시 4등분한다. 균일한 두 사분면은 노드 하나씩으로 끝난다.