ISBN 89-5884-329-2 98560
웨이블릿: 기본 개념 및 데이터 압축에의 응용
허 영 주 (Young Joo Hur
)
[email protected]
Visualization Team, Supercomputing Center
수식 차례
수식 III-1. Haar 기저함수 정의 ··· 6 수식 III-2. 표준 내적의 정의 ··· 6 수식 III-3. Haar 웨이블릿 함수 ··· 7 수식 III-4. 기저 함수의 정규화 ··· 10 수식 IV-1. 2차원 기저함수 ··· 16 수식 IV-2. 2차원 표준 Haar 기저함수 ··· 16 수식 V-1. Chaikin의 알고리즘 ··· 21 수식 V-2. Splitting과 Averaging ··· 22수식 V-3. n+1차원의 B-spline을 생성하는 averaging mask ··· 23
수식 VI-1. D4 필터의 계수 ··· 34
수식 VI-2. 웨이블릿 변환 ··· 34
수식 VI-3. 웨이블릿 복원 ··· 35
W1
V
2[0, 1 )
V
2V
1V
0W
0V0 W0 W1 V2
φ
00ψ
0 0ψ
10ψ
1 1u (x )
<
u
│u > = 1
φ
ji(x) :=
√
2φ (2
jx
− i )
ψ
ji(x) :=
√
2ψ (2
jx
− i )
(
√
2 )
jprocedure Decomposition(c:array[1..2j] of reals) c<- c/2j^(1/2) (normalize input coefficients) g<- 2j while g≥2 do DecompositionStep(c[1..g]) g<- g/2 end while end procedure
procedure Reconstruction(c:array[1..2j] of reals) g<- 2 while g≤2j do ReconstructionStep(c[1..g]) g<- 2g end while c<-c*2j^(1/2) end procedure
procedure StandardDecomposition(c:array[1..2j,1..2k] of reals) for row <- 1 to 2j do Decomposition(c[row, 1..2k]) end for for col <- 1 to 2k do Decomposition(c[1..2j,col]) end for end procedure
procedure NonStandardDecomposition(c:array[1..2j,1..2j] of
reals)
f
0(x )
f
1(x ), f
2(x ),
f (x )
Vj
V
j= span φ
j0(x), φ
j1(x),
, φ
j2j− 1(x)
Φ
j0(x ), , Φ
j2j − 1(x )
V
jφ
ji−1(x ) = 1
φ
j2i(x ) + 1
φ
j2i + 1(x )
protected void transform(double a[], int n) { if (n>=4) { int i, j; int half = n >> 1;
double tmp[] = new double[n]; i = 0;
for (j = 0; j<n-3; j = j+2) {
tmp[i] = a[j]*h0 + a[j+1]*h1 + a[j+2]*h3 + a[j+3]*h3; tmp[i+half] = a[j]*g0 + a[j+1]*g1 + a[j+2]*g2 + a[j+3]*g3; i++;
}
tmp[i] = a[n-2]*h0 + a[n-1]*h1 + a[0]*h2 + a[1]*h3; tmp[i+half] = a[n-2]*g0 + a[n-1]*g1 + a[0]*g2 + a[1]*g3;
for(i=0; i<n; i++) {
a[i] = tmp[i]; }
}
protected void invTransform(double a[], int n) { if (n>=4) { int i, j; int half = n >> 1;
int halfPls1 = half + 1;
double tmp[] = new double[n];
tmp[0] = a[half-1]*lh0 + a[n-1]*lh1 + a[0]*lh2 + a[half]*lh3; tmp[1] = a[half-1]*lg0 + a[n-1]*lg1 + a[0]*lg2 + a[half]*lg3;
j = 2;
for (i = 0; i<half-1; i++) {
tmp[j++] = a[i] * lh0 + a[i + half] * lh1 + a[i + 1] * lh3 + a[halfPls1] * lh3; tmp[j++] = a[i] * lg0 + a[i + half] * lg1 + a[i + 1] * lg2 + a[halfPls1] * lg3; }
for(i=0; i<n; i++) {
a[i] = tmp[i]; }
}
procedure Compress(c:array [1..m] of reals; ε:real) τmin <- min{|c[i]|} τmax <- max{|c[i]|} do τ <- (τmin + τmax)/2 s <- 0 for i<-1 to m do
if |c[i]|<τ then s<-s+|c[i]|2 end for
if s<ε2 then τmin <- τ else τmax <- τ until τmin ≃ τmax
for i<-1 to m do
if |c[i]| < τ then c[i] <- 0 end for