Now that we have modified the coefficients with entropy, we are ready to extract some meaningful information from those coefficients. To do this, we apply coefficient bit modeling. Each sub-band has a set of coefficients associated with it. We first arrange those coefficients in a two-dimensional array called a code-block. The first four coefficients form the first column. The second set of four coefficients form the second column and so forth. The code-block can only be 16 coefficients wide. So, when we reach the end, we extend the first column by another four coefficients. This illustration should make this clear.
The code-block is now ready for three coding passes: a significance propagation coding pass, a magnitude refinement coding pass, and a cleanup coding pass. In the significance propagation coding pass, we simply look for "interesting" coefficients. When we examined what made a coefficient interesting in class, we considered the coefficient on its own. Was is really large? That was the main question applied when attempting to determine the significance of a coefficient. But, JPEG 2000 uses a more elaborate method. Not only does interesting quality of a coefficient determine its significance, but the significance of each of the nine coefficients that surround it also determine a given coefficients significance. For example, suppose we are looking at coefficient 9 from the table above. In determining its significance, we must also consider the significance of coefficients 4, 5, 6, 8, 10, 12, 13, and 14. For coefficient 12, we simply establish zero significance to the three coefficients that are not present in the row above coefficient 12.
The next coding pass, the magnitude refinement pass, we only consider the significant coefficients. For each significant coefficient, we sum the significant bit for the horizontal, vertical, and diagonal neighbors. If this summation is greater than or equal to one, we set the "first refinement" label for this coefficient to TRUE. Otherwise, we set it to FALSE.
Finally, we execute the clean-up coding pass. Just like you might imagine, we get rid of the insignificant coefficients. We make one final effort to make an insignificant coefficient significant using a Run-Length Decoder. This simply looks at a four-coefficient column of all insignificant coefficients, looks at all their neighbors, and tries to determine if any of those four are significant.