Skip to content

An open source implementation of ITU-T Rec.814 | ISO 15444-15 (a.k.a. HTJ2K).

License

Notifications You must be signed in to change notification settings

osamu620/OpenHTJ2K

Repository files navigation

CMake CodeQL Packaging status

OpenHTJ2K

OpenHTJ2K is an open source implementation of ITU-T Rec.814 | ISO/IEC 15444-15 (a.k.a. JPEG 2000 Part 15, High-Throughput JPEG 2000; HTJ2K)

What OpenHTJ2K provides

OpenHTJ2K provides a shared liberary and sample applications having the following functionalities:

  • Decoding of ITU-T Rec.800 | ISO/IEC 15444-1 (JPEG 2000 Part 1) or ITU-T Rec.814 | ISO/IEC 15444-15 (JPEG 2000 Part 15.) compliant codestreams
    • fully compliant with conformance testing defined in ITU-T Rec.803 | ISO 15444-4.
  • Encoding an image into a codestream/JPH file which is compliant with HTJ2K
    • currently supports only HTJ2K. The optional markers like COC, POC, etc. are not implemented.
    • encoding of HT SigProp and MagRef passes are not implemented.
    • up to 12 bit per component sample is currently supported.
    • Quality control for lossy compression with Qfactor feature

Requirements

cmake (version 3.14 or later) and C++11 compliant compiler.

Building

Type the following command. ./ is a root of cloned repository and ${BUILD_DIR} is a build directory (for example, ../build or ./build and so on)

cd ./
cmake -G "Unix Makefiles" -B ${BUILD_DIR} -DCMAKE_BUILD_TYPE=Release
cd  ${BUILD_DIR}
make

Then the executables should be found in ${BUILD_DIR}/bin directory.

Usage

Encoder

Only Part 15 compliant encoding is supported. Both .j2c (codestream) and .jph (file format) are available.

./open_htj2k_enc -i inputimage(in PNM/PGX/(TIFF, libtiff required) format) -o output [options...]

The encoder can take comma-separated multiple files. For example, components in YCbCr color space can be encoded by

./open_htj2k_enc -i inputY.pgx,inputCb.pgx,inputCr.pgx -o output 

options

  • Stiles=Size
    • Size of tile "{height, width}", Default is equal to the image size
  • Sorigin=Size
    • origin of the input image in the reference grid, Default is {0,0}
  • Stile_origin=Size
    • origin of tiles in the reference grid, Default is {0,0}
  • Clevels=Int
    • Valid range for number of DWT levels is from 0 to 32 (Default is 5)
  • Creversible=yes or no
    • yes for lossless mode, no for lossy mode, Default is no
  • Cblk=Size
    • Code-block size, Default is 64x64
  • Cprecincts=Size
    • Precinct size
  • Cycc=yes or no
    • yes to use RGB->YCbCr, Default is yes
  • Corder
    • Progression order: LRCP, RLCP, RPCL, PCRL, CPRL, Default is LRCP
  • Cuse_sop=yes or no
    • Default is no
  • Cuse_eph=yes or no
    • Default is no
  • Qstep=Float
    • 0.0 < base step size <= 2.0
  • Qguard=Int
    • 0 to 7 for the number of guard bits, Default is 1
  • Qderived=yes or no
    • yes switches the quantyzation style to derived (Default is no)
  • Qfactor=Int
    • 0 to 100 for the quality of the lossy compressed image
    • for YCbCr inputs, valid chroma subsampling formats are 4:4:4, 4:2:0, and 4:2:2
  • -jph_color_space
    • Color space of input components: RGB, YCC
    • if inputs are represented in YCbCr, use YCC
  • -num_threads Int
    • number of threads to use in encode or decode
    • 0, which is the default, indicates usage of all threads

Decoder

The both Part 1 and Part 15 compliant decoding are supported.

./open_htj2k_dec -i codestream -o outputimage [-reduce n: number of DWT level reduction]

To see a help, use -h option.

Supported file types

Encoder

  • input image formats: .pgm, .ppm, .pgx, .tif (libtiff required)
  • output codestreams: .jhc (Part 15 codestream, .j2k and .j2c can be used as aliases), .jph (Part 15 file format)
    • Note: Specifying .jph as the output triggers a JPH file creation, otherwise just a codestream will be generated.

Decoder

  • input codestreams : .j2k, .j2c, .jhc
  • output image formats: .raw, .ppm, .pgm, .pgx