JPEG 2000 uses two wavelets:
- The LeGall-Tabatabai 5/3 (LGT 5/3) for lossless compression and
- The Cohen–Daubechies–Feauveau 9/7 (CDF 9/7) wavelet for lossy compression:
For these, we denote a row of extended pixels in a tile by
The LGT 5/3 transform computes wavelet coefficients
The CDF 9/7 wavelet transform involves six steps: $$ \begin{alignat*}{4} C(2i + 1) &= P(2i + 1) + \alpha [P(2i) + P(2i + 2)], &\quad & k-3 \le 2i+1 < m+3 & \quad& \text{step 1}\ C(2i) &= P(2i) + \beta[C(2i - 1) + C(2i + 1)], &\quad& k-2 \le 2i < m+2 &\quad& \text{step 2}\ C(2i + 1) &= C(2i + 1) + \gamma[C(2i) + C(2i + 2)], &\quad& k-1 \le 2i+1 < m+1 &\quad& \text{step 3}\ C(2i) &= C(2i) + \delta[C(2i - 1) + C(2i + 1)], &\quad& k \le 2i < m &\quad& \text{step 4}\ C(2i + 1) &= -K C(2i + 1), &\quad& k \le 2i + 1 < m &\quad& \text{step 5}\ C(2i) &= \frac{1}{K} C(2i), &\quad& k \le 2i < m &\quad& \text{step 6} \end{alignat*} $$
For CDF 9/7, the five constants (wavelet filter coefficients) used by JPEG 2000 are:
-
$\alpha = -1.586134342$ , -
$\beta = -0.052980118$ , -
$\gamma = 0.882911075$ , -
$\delta = 0.443506852$ , and -
$K = 1.230174105$ .
Note the 2-step iterators for odd vs even steps in both cases.
- Type: Implement
- Task: Implement the LeGall-Tabatabai 5/3 (LGT 5/3) and The Cohen–Daubechies–Feauveau 9/7 (CDF 9/7) processes set out above.
- Reference implementation:
jpeg2000.lgt_5_3andjpeg2000.cdf_9_7