Package: openjphpy
openjphpyNote:This repository is currently work in progress. Please contact us for more detailshere.What is openjphpy?A Python wrapper forOpenJPHto enable encoding and/or decoding High-Throughput JPEG 2000 (HTJ2K) images.In short, OpenJPH is an open-source implementation of the HTJ2K codec (JPEG2000 Part 15, ISO/IEC 15444-15, and ITU-T T.814), supporting features defined in JPEG 2000 Part 1. The code is written in C++ with color and wavelet transform steps taking advantage of SIMD instructions on Intel platforms. Unfortunately, this restricts encoding and/or decoding on image data directly from other commonly used programming languages. For example, another projectopenjphjs, developed byChris Hafey, brings OpenJPH's capabilities to Javascript. Similarly, we aim to bring these capabilities to Python with direct support for HTJ2K encoding/decoding usingopenjphpy.We use openjphpy in our implementation of theMedical Image Streaming Toolkit (MIST), an open-source toolkit to operationalize and democratize progressive resolution for large-scale medical imaging data infrastructures to accelerate data transmission and AI modelling. You can read our paper on MISThere.ResourcesFor more resources regarding HTJ2K, please refer to:HTJ2K White PaperHigh throughput JPEG 2000 (HTJ2K): Algorithm, performance and potentialHigh throughput block coding in the HTJ2K compression standardCitationIf you use openjphpy in your publication, please cite the following:GitHub@software{openjphpy,
author = {Kulkarni, Pranav},
title = {{openjphpy}},
month = {July},
year = {2023},
url = {https://github.com/UM2ii/openjphpy}
}Publication@article{kulkarni2023one,
  title={One Copy Is All You Need: Resource-Efficient Streaming of Medical Imaging Data at Scale},
  author={Kulkarni, Pranav and Kanhere, Adway and Siegel, Eliot and Yi, Paul H and Parekh, Vishwa S},
  journal={arXiv preprint arXiv:2307.00438},
  year={2023}
}Getting StartedCurrently, openjphpy can only be installed manually from source.git clone --recurse-submodules https://github.com/UM2ii/openjphpy
pip install -e openjphpy/Documentation for openjphpy is availablehere.Note:openjphpy is only supported on Linux based environments with support for other environments coming in the future.Example NotebookWe have provided an example notebook in this repository, along with 10 test images, to experiment with. You can find the example notebookhere.We also provide15 sample medical imagesacross X-ray, MRI, and CT modalities (5 images per modality), with data sourced from theNIH Chest X-Ray 14andMedical Segmentation Decathlon (MSD)datasets. For portability, all data is stored asnpyfiles.Note:CT data is stored as uint16 and not in Hounsfield units.LimitationsCurrently, openjphpy does not support encoding signed data and can only encode imaging data with types 8-bit and 16-bit unsigned integers (uint8 and uint16). If pixel values fall outside the range [0, 65,535], an error may be raised (strict mode) or values will be clipped (non-strict mode). Precision is automatically chosen based on image data's dynamic range.Future WorkIn the future, we intend to extend support to non-Linux environments. Similarly, we intend to employ a similar approach used byopenjphjsto integrate native C++ code directly into Python. While our current implementation supports the entire feature set of OpenJPH, it is not computationally optimized. We invite collaborators in the open-source community to help integrate with OpenJPH's native C++ code with direct encode/decode capabilities in Python.ContactIf you have any questions about openjphpy, please contact ushere.