The proposed Hierarchal coding system as shown in fig 6.The Hierarchal Zero Wavelet output stream starts with information to be synchronized with the decoder. The minimum information required by the decoder for its functionality is the number of wavelet transforms levels used and the initial threshold, Basically a constant levels (3) of wavelet transform were used for transformation.

The first step in the Hierarchal Zero Wavelet coding algorithm is to determine the initial threshold.

The initial threshold t0 is given asĀ

where MAX(|r(x,y)|) means the maximum coefficient value in the image and Y(x,y) denotes the coefficient.

**Figure 6 :** *Block diagram for the proposed Hierarchal coding system *

Then taking the obtained threshold as the initial value, the scaled sub-band samples are been passed for initial pass and intermediate pass. Under each pass, the threshold is decreased by half the value. This comparison is carried out until the threshold reaches to the minimum threshold, the algorithm implemented is;

threshold = initial_threshold; do {initial_pass(image); intermediate_pass(image); threshold = threshold/2;} while (threshold > minimum_threshold);

*(A) INITIAL PASS*

The image is scanned and a symbol is returned for every coefficient.If the coefficient is larger than the threshold, a P (positive) is coded.

1. If the coefficient is smaller than negative of threshold an , N (negative) is coded.

2. If the coefficient is the root of a zero tree, then a T (zero tree) is coded and finally,

3. If the coefficient is smaller than the threshold but it is not the root of a zero tree, then a Z (isolated zero) is coded. This happens when the coefficient larger than the threshold in the sub tree. Finally, all the coefficients that are in positive value larger than the current threshold are extracted and placed without their sign on the intermediate list and their positions in the image are filled with zeroes. Which prevents them from being coded again.

The initial pass can thus be implemented as;

* Initial pass initialize_fifo(); while (fifo_not_empty) { get_coded_coefficient_from_fifo(); if coefficient was coded as P, N or Z then { code_next_scan_coefficient(); put_coded_coefficient_in_fifo(); if coefficient was coded as P or N then { add abs(coefficient) to intermediate list; set coefficient position to zero;}}}

After the initial pass follows the intermediate pass:

Intermediate pass intermediate_threshold = current_threshold/2; for all elements on intermediate list do{ if (coefficient > intermediate_threshold) { output a one; coefficient=coefficient intermediate_threshold; } else output a zero; }

If the threshold used is a power of two, then the intermediate pass reduces to a few logical operations and can be made very fast.

The decoding unit reconstructs the values by identifying the symbols as positive, negative, zero tree and isolated zerotree. The reconstructed values are taken as threshold for positive coded coefficients and negative of threshold for negative coded coefficients. The zerotree coefficients and the isolated zerotree coefficients are assigned with 0 value.