ISBN 89-5884-330-6 98560
웨이블릿 변환을 이용한
3차원 볼륨 데이터의 압축
허 영 주 (Young Joo Hur
)
popea@kisti.re.kr
Visualization Team, Supercomputing Center
한 국 과 학 기 술 정 보 연 구 원
제목 차례
I. 머리말 ··· 1
II. EZW (Embedded Zerotree Wavelet) ··· 2
1. Zerotree ··· 2 2. 웨이블릿 계수의 인코딩 ··· 3 가. Zerotree 인코딩 방식의 특징 ··· 3 나. 스캔 순서 ··· 4 다. 인코딩 알고리즘 ··· 5 3. EZW 인코딩 예제 ··· 7 4. 결과 및 결론 ··· 10
III. JPEG2000 ··· 12
1. 개요 ··· 12 2. JPEG2000의 인코딩 방식 ··· 13 가. Partition ··· 13 나. 블록 인코딩 ··· 14 다. 패킷과 레이어 ··· 16 3. JPEG2000의 특징 ··· 18 가. Progression ··· 18나. ROI (Region Of Interest) ··· 18
3. 복셀값의 복원 ··· 39
4. 성능 분석 ··· 41
5. 실험 결과 ··· 42
VI. 결론 ··· 45
표 차례
표 IV-1. 압축 결과 ··· 30
표 IV-2. 압축시간 ··· 30
표 V-1. 압축 결과: 압축 데이터의 용량 및 화질 ··· 43
그림 차례
그림 II-1. 웨이블릿으로 변환된 이미지에서 찾아볼 수 있는 트리구조 ··· 3 그림 II-2. 래스터 스캔 방식과 그에 의해 생성된 트리 ··· 4 그림 II-3 웨이블릿 계수 ··· 7 그림 II-4. 첫 Dominant 패스를 거친 결과 ··· 8 그림 II-5. Subordinate 패스 수행 결과 ··· 8 그림 II-6. 루프 실행 후의 웨이블릿 계수 맵 ··· 8 그림 II-7. 두 번째 dominant 패스의 수행 결과 (T1 = 16) ··· 9 그림 II-8. 웨이블릿 계수로 구성된 맵과 스캔 방식 ··· 9그림 II-9. Dominant 패스와 subordinate 패스의 실행 결과 ··· 10
그림 II-10. 0.3 bits/pixel 이미지 (a) JPEG (b) EZW ··· 10
그림 II-11. 0.2 bits/pixel 이미지 (a) JPEG (b) EZW ··· 11
그림 III-1. JPEG2000의 CODEC 구조 ··· 13
그림 III-2. 레벨 2에 속해 있는 패킷에 대한 12개의 코드-블록 ··· 14 그림 III-3. 비트플레인 코딩을 위한 스캔 패턴 ··· 14 그림 III-4. 블록 인코딩 ··· 15 그림 III-5. 패킷 파티션에 대한 패킷의 구성 (일부) ··· 16 그림 III-6. 패킷과 레이어 ··· 17 그림 III-7. 이미지 해상도에 대한 점진 효과 ··· 18 그림 III-8. 복원 화질에 대한 점진효과 ··· 18 그림 III-9. ROI ··· 19 그림 III-10. 다양한 화질로 복원 가능한 비트스트림 ··· 19 그림 III-11. 다양한 해상도로 복원 가능한 비트스트림 ··· 20
그림 III-12. 0.25b/p로 압축한 이미지 (a)JPEG (b)JPEG2000 ··· 20
그림 III-13. 0.2b/p로 압축한 이미지 (a)JPEG (b)JPEG2000 ··· 21
그림 IV-1. 웨이블릿을 이용한 데이터 압축/복원 ··· 22
그림 IV-2. 웨이블릿 계수로 변환된 유닛 블록 ··· 23
그림 IV-3. Zerobit 인코딩 ··· 26
그림 IV-4. 셀에 대한 Octree 표현 ··· 27
그림 IV-5. Visible Man의 슬라이스 데이터 ··· 32
그림 IV-6. Visible Man의 레이캐스트 렌더링 결과 ··· 33
그림 IV-7. Visible Man의 레이캐스트 렌더링 결과 ··· 34
그림 V-1. Daubechies의 기저함수 ··· 36
그림 V-2. D4 웨이블릿 변환 과정 ··· 36
수식 차례
소스 차례
-z
z
T
0, T
1, T
2,
T
0= 2
log2XmaxX
maxH
5 -z
T
i z )P
s )N
s ) ) threshold = initial_treshold; do { dominant_pass(data); subordinate_pass(data); threshold = threshold / 2;z z z
T
i /* * Dominant Pass */ initialize_fifo(); while (fifo_not_empty) { get_coded_coefficient_from_fifo();if (coefficient was coded as Ps, Ns, or Iz) then {
code_next_scan_coefficient(); put_coded_coefficient_in_fifo();
if (coefficient was coded as Ps or Ns) then {
add abs(coefficient) to subordinate list; set coefficient position to zero;
} } } /* * Subordinate Pass */ subordinate_threshold = current_threshold/2;
for (all elements on subordinate list) do
{ if (coefficient > subordinate_threshold) { output a one; coefficient = coefficient-subordinate_threshold; }
7
13
z
16
16
16
z
z
4
335
-16
16
16
-16
16
16
16
16
16
-16
16
16
:(i, j, k )
: (i, j, k ) (16 16 16 )
41
-16
16
16
16
16
16
16
16
2 (= 512 )
43