Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for 16 bit gray images? #151

Open
FrancescAlted opened this issue Oct 27, 2023 · 2 comments
Open

Support for 16 bit gray images? #151

FrancescAlted opened this issue Oct 27, 2023 · 2 comments

Comments

@FrancescAlted
Copy link

My understanding is that OpenHTJ2K supports mainly 32 bit sRGB images (4 bytes/pixel) as inputs. We would be interested in knowing if it could accept 16 bit gray images as well, or we need to 'massage' the data to convert it to sRGB first (if so, anybody knows a good tool for doing that?). Thanks in advance!

@FrancescAlted
Copy link
Author

I did a small test with a 16-bit gray scale image, and it looks like OpenHTJ2K is limited to 12 bits per component:

$ identify MI04_020089.ppm
MI04_020089.ppm PPM 1008x1900 1008x1900+0+0 16-bit Grayscale sRGB 10.9589MiB 0.040u 0:00.019

$ open_htj2k_enc -i MI04_020089.ppm -o MI04_020089.j2k
elapsed time for reading inputs 15.108         [ms]
760.603654 [MB/s]
WARNING: Over 13 bpp precision will be down-shifted to 12 bpp.
WARNING: Over 13 bpp precision will be down-shifted to 12 bpp.
WARNING: Over 13 bpp precision will be down-shifted to 12 bpp.
Codestream bytes  = 1441685 = 6.022076 [bits/pixel]
elapsed time 73.215         [ms]

$ ll MI*
-rw-r--r--  1 faltet  staff   1.4M Oct 27 13:14 MI04_020089.j2k
-rw-r--r--  1 faltet  wheel    11M Oct 27 13:12 MI04_020089.ppm

$ open_htj2k_dec -i MI04_020089.j2k -o MI04_020089-recons.ppm
WARNING: sample precision over 13 bit/pixel is not supported.
WARNING: sample precision over 13 bit/pixel is not supported.
WARNING: sample precision over 13 bit/pixel is not supported.
elapsed time 59.992         [ms]
throughput 95.772770 [Msamples/s]
throughput 0.010441 [usec/sample]

This limitation is documented in the README indeed, but I am wondering if it could be a workaround for this (like passing 2 components of 8 bits coming from the low and high parts of the original 16 bit channel or something similar)? Thanks in advance!

@osamu620
Copy link
Owner

@FrancescAlted Due to the limitations of vectorized fixed-point DWT, currently, 16bit/pixel is not supported in OpenHTJ2K. The workaround you mentioned might increase codestream size because generally, the lower part (lower bits) of pixel values do not have a strong mutual spatial correlation. Moreover, encoding/decoding of two separated components is not efficient in terms of processing time.

Even so, you can still compress 16 bits/pixel images with the workaround, but, separating/concatenating of two components should be done outside of HTJ2K codec.

To support 16 bits or over 16 bits/pixel, floating DWT operating mode is required. Although I currently don't have enough time to implement this, I will add this floating mode in (hopefully) the near future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants