⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 changes_from_vm7_2.txt

📁 JPEG2000实现的源码
💻 TXT
字号:

                        CHANGES IN VM8.0 FROM VM7.2
                       ============================

Changes to Bring Alignment with Part I FCD
------------------------------------------

* COD and COC marker segment parameters were reordered to harmonize the two 
  marker segments

* Component transform is now signaled with one value, either on or off.  
  The choice of ICT or RCT is signaled by the choice of 9-7 or 5-3 filters.

* The QCD and QCC exponent bits have been shifted to the MSBs for the 5-3 
  transform filter to be consistent with the 9-7 transform filter.


Image I/O
---------

Another implementation of multi-component I/O routines is now available.  
These new I/O routines are triggered with the `-imcraw'/`-omcraw' 
encoder/decoder options.  This new implementation expects multi-components 
in raw image format and supports a variety of component interleave styles.  
This change was made to merely facilitate testing (and to avoid having to 
split a 224 band image into 224 files...).  Changes for this new I/O 
implementation are marked with the C comments /* EKC mct begin */ and 
/* EKC mct end */.

Note: This implementation is available only when compiled under Unix
systems.

Multi-Component Additions
-------------------------

* A stand-alone program is provided in the ekc_contrib/calc_klt directory to 
  generate the Karhunen-Loeve Transform (KLT) matrix of a set of PGX files 
  or a multi-component raw image file suitable for `-imcraw' encoder input.
  The format of the output transform matrix is compatible with the encoder 
  command-line flag `-Mlin'.

* Likewise, a stand-alone program is provided in the ekc_contrib/calc_dct 
  directory to generate the Discrete Cosine Transform (DCT) matrix for an 
  arbitrary number of components.  The format of the output transform matrix 
  is compatible with the command-line flag `-Mlin'.

* The component_mix.c and component_demix.c `-Mlin' routines were modified 
  to allow passage of arbitrarily large inverse linear matrices.  These 
  routines were changed so that a large CME segment (i.e., greater than 
  maximum allowed, which is 65535 bytes) will be split into smaller CME 
  segments.  The decompressor uses the `index' functionality to get the 
  multiple CME segments relevant to multi-component transforms.


General Level Shift
-------------------

The VM now allows for flexible level shifts in addition to the fixed level 
shifts available for Part I.  Up to a 16-bit integer offset may be specified 
with the `-Fdc' encoder option.  See the usage for this new option for more 
details and also document WG1N1721.  Note that the default offset is still 
equal to that used by a Part I decoder.


General Scalar Quantization
---------------------------

The zero quantization bin-width can now be adjusted with the `-Qnz' encoder 
option.  This bin-width can be sized to 2*(1-nz)*stepsize, where nz is 
provided through `-Qnz' and is passed to the decoder through the header.  
Note that the default behavior is still that of Part I, i.e, nz = 0.


General Wavelet Decompositions
------------------------------

VM8.0 now allows non-uniformly sized subbands within a given resolution 
level and also allows subbands to be split in just one direction 
(horizontally or vertically).  The changes required for this extra
functionality were rather vast, yet mostly confined to one of the following 
general set of changes:

  1. References to level->hp_descent were replaced with 
     level->max_hp_descent.
  2. References to band->vert_hp_descent and band->horiz_hp_descent were 
     added where necessary.
  3. Since not all subband indices in the range [level->min_band,
     level->max_band] are now allowed, the field band->valid_band is used 
     inside "for" loops over bands to quickly "continue" when the current 
     band index points to an invalid band.
  4. The transform objects were modified to decouple joint vertical and 
     horizontal wavelet processing.  As a result, subbands may be formed 
     with a non-equal number of horizontal and vertical splits.  To achieve 
     this capability, horizontal and vertical limit fields were added to the 
     hplx_analysis_stage_obj and hplx_synthesis_stage_obj structures.  These 
     limits specify the number of splits in both directions for the eight 
     analysis and synthesis files which are part of the transform object.

Note that changes outside of this general set are flagged with "SAIC 
General Decomp." comments

Signaling of the desired decomposition to the encoder is accomplished with 
the new `-Fgen_decomp' command line argument.  This argument accepts a 
string of integers in the range 0 to 3. Sub-strings for individual 
resolution levels are concatenated to form this string, with the first 
sub-string addressing the highest resolution level and successive 
sub-strings addressing progressively lower resolution levels.  The last 
resolution level sub-string defined controls any remaining levels.

Each level sub-string is a string of integers from 0 to 3.  Value 0 
indicates that the current subband should not be decomposed further.  Value 
1 indicates that the current subband should be split both horizontally and 
vertically.  Finally, values 2 and 3 respectively indicate that the current 
subband should be split in just the horizontal direction (resulting in left 
and right subbands) or just the vertical direction (resulting in top and 
bottom subbands).  Note that the maximum depth through the resulting tree 
structure is controlled by the max_hp_descent values passed through the 
existing '-Fdecomp' argument.  Therefore, zeros are not needed when the 
depth in the decomposition tree equals max_hp_descent.  Figure 2 shows 
several examples of the `-Fgen_decomp' and '-Fdecomp'.  In that figure, 
different resolution levels are shown with different colors (green, blue, 
red), and the `-Fgen_decomp' usage matches colors of characters with 
resolution levels.

Beyond the changes listed above, the syntax for signaling the general 
wavelet decomposition obviously has to be transmitted through the bitstream.
The bitstream syntax for these general decomposition changes piggy-backs 
upon the MARKER_COC_DECOMP syntax established for signaling 
max_hp_descents at each wavelet level.  That existing syntax outputs a list 
of integers with values equal to 1, 2 or 3.  Values of zero are currently 
not allowed in that list.  The syntax for general decompositions adds a 
zero to the max_hp_descent MARKER_COC_DECOMP output to signal that a 
general decomposition is used.  The list as input to the encoder with the 
`-Fgen_decomp' argument is then explicitly passed through the bitstream 
using the two-bit form of MARKER_COC_DECOMP.

Finally, the `-Xwt_output' option exists in both the encoder and decoder
to allow visualization of the resulting wavelet transform.  Note that 
this option may be quite useful for debugging `-Fgen_decomp' arguments.


`-Fweights'/`-Fsteps'
---------------------

These options can now allow subbands to have frequency weights/step sizes of 
zero.  Inclusion of bits from such subbands will be avoided by using the 
"quant_to_zero" logic integrated into VM7.2 for LRA.


POC/POD Changes
---------------

The definition of the POD marker has been changed and its name
changed to POC.  The marker now contains a string of progression
changes where the volumes corresponding to the progressions are
explicitly identified, rather than the old method in which the
volumes represented limits on previous progressions and the new
progression applied until further limits were applied.  The POC
marker may also appear in any tile-part header, so long as it
also appears in the first tile-part header of the relevant tile.

The decompressor has been modified to accept codestreams with any
valid POC placement and interpret the relevant progressions as
late as possible (this is part of the general philosophy of loading
as little of the codestream as is needed at any given point).

The compressor has been modified to produce the new POC format.
Further, since it is not possible to fully test the POC functionality
without explicitly generating tile-parts, the compressor has been
modified to include the functionality for generating tile-parts and
also for writing POC markers into tile-part headers.  The `-Corder'
argument has exactly the same form as before and its parameters have
the same interpretation as they had before so that it is impossible
to supply a `-Corder' argument whose contents could cause the
generation of a non-compliant codestream.  However, the program
internally converts to the more fragile POC marker form.  By
default, all the POC information appears in a single marker up
front (either in the main header or a tile-part header, whichever
is calculated to be most efficient).  There is a new argument,
`-Ctile_parts', which forces the compressor to create a single
tile-part for each new progression (this is not the only way to
use tile-part specific POC markers, but it makes the most sense).
Note carefully, that the argument affects only those tiles for
which a tile-specific `-Corder' argument has been supplied, having
at least two different progressions.  Otherwise, the progression
information is placed in the main or first tile-part header.

To explore the functionality, try the following examples:

vm8_compress -i lenna.pgm -o out.bits -rate 1.0 -Clayers 0.125 0.25 \
             -Cpp 64x64 32x32 16x16 -Corder L
vm8_expand -i out.bits -o out.pgm -trunc 0.125 [should be uniformly coarse]
vm8_expand -i out.bits -o out.pgm -trunc 0.25 [should be uniformly better]

vm8_compress -i lenna.pgm -o out.bits -rate 1.0 -Clayers 0.125 0.25 \
             -Cpp 64x64 32x32 16x16 -Corder L 0 0 1 6 1 PC
vm8_expand -i out.bits -o out.pgm -trunc 0.125 [should be uniformly coarse]
vm8_expand -i out.bits -o out.pgm -trunc 0.25 [should get the first quarter
                                               of the picture looking good]

vm8_compress -i lenna.pgm -o out.bits -rate 1.0 -Clayers 0.125 0.25 \
             -Cpp 64x64 32x32 16x16 -Corder+0 L 0 0 1 6 1 PC
  [Same as above, but with two tile-parts per tile, having the first layer
   in the first tile-part and the second and third layers in the second.
   Add the -Bresync argument and use "j2g_fiddle" to verify that there
   are two tile-parts.  Note, however, that "j2g_fiddle" cannot currently
   be used to do any serious fiddling with codestreams which already have
   multiple tile-parts.]


Bug Fixes
---------

* Non-heap memory for specifying "W9X7" or "W5X3" options for the `-Mtdt' 
  wavelet transform has been converted to heap memory.  As a result, 
  side-effect bugs due to attempts to free non-heap memory are now avoided.

* Longer filename strings are now allocated for the create_filename() 
  routine in simple_image_writer.c to avoid array bounds problems for large 
  number of components.

* Syntax changes have been incorporated to allow compression of images with 
  more than 256 components.

* The accuracy of the 9-7 filter taps has been improved beyond the 5-th 
  decimal place.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -