|[ download ] [ features ] [ who used BOI ]|
BOI is a compliant JPEG2000 Part 1 (ISO/IEC 15444-1) codec. It was initially developed with the intention to supply a comprehensible framework for the test of new techniques within the JPEG2000 standard. The early versions of BOI (from 1.0 to 1.8) employed a straightforward design that was thought to facilitate its understanding and modification. Version 3.0 of the BOI codec, released in June 2013, was redesigned from the scratch incorporating advanced features that allow its use in professional environments.
BOI is developed in Java and until version 1.8 was given under the GNU General Public License. From version 3.0 onward, BOI is provided under the BOI license, which permits its private use freely but it does not allow commercial use or re-distribution. In other words, you can use BOI and its libraries for your personal (research) interests as far as you do not re-distribute it (with your modifications or not). The sourcecode and binaries of BOI can not be used in projects, applications or included in other libraries unless permission from the copyright holder is given.
If you use this software, please cite it as
F. Auli-Llinas. (2016) BOI codec. [Online] Available: http://www.deic.uab.cat/∼francesc/software/boi
|INFORMATION ABOUT BOI VERSIONS|
|3.0 - Jun. 2013||BOI license||
-Redesigned from the scratch to allow the coding of very high resolution images using multiple threads of execution and low memory requirements.
-Speedups around 1.5 to 2.0 with respect to the last release.
-The license under which BOI is released has changed.
|1.8 - Jun. 2012||GPL license||-Corrected minor bugs.|
|1.7 - Feb. 2011||GPL license||
-Removed the use of JAI libraries and incorporated new functions to read/write pgm/ppm files.
-Arguments parser replaced by a simpler one.
-Arguments set in a new global class.
-Slight modification in tier-1 coding (5% throughput enhancement).
-Corrected minor bugs.
|1.6 - Mar. 2010||GPL license||
-Included multi-threading support for the tier-1 coding stage.
-Removed the RESTART coding variation to provide optimal coding performance.
-Major remodeling of some classes and structures.
|1.5 - Mar. 2009||GPL license||
-Improved the rate control method through a bisection algorithm.
-Reduction in the computational costs of the rate control stage.
-Corrected minor bugs.
|1.4 - Dec. 2008||GPL license||
-Added distortion estimators to the rate-distortion optimization process. Computational costs are reduced around 8% in the tier-1 coding stage.
-Added new reconstruction procedure in the decoder through a precise estimation of the coefficients within wavelet subbands. The JPEG2000 lossless mode (reversible wavelet transform) improves coding performance around 1 dB at medium and high bitrates.
|1.3 - Jul. 2008||GPL license||
-Added minor optimizations to the MQ encoder/decoder.
-Added minor optimizations to the headers writing/reading modules.
-Added a validation to check the bit depth of written images.
-Expounded quantization added. Step sizes determined through the L2norm of the subband synthesis filter bank.
-Added a new allocation method for quality layers named SCALE.
-Reduced computational costs through several minor optimizations.
-Fixed bug for the lossless mode (related with headers).
-Improved the rate-distortion optimization process for the lossless mode.
|1.2 - Jul. 2006||GPL license||
-Major improvement in the tier-1 coding stage. Speedups of 2 or more achieved.
-Set ROC as the default rate-distortion optimization method.
-Removed some features for the sake of simplicity: generation of bitstreams without using arithmetic coding, stripe height parameter, and generation of multiple files at once.
-Changed the way the .jar file is loaded (now a single .jar is used for all applications).
|1.1 - Mar. 2006||GPL license||
-Added the CPI and ROC algorithms to conduct the rate-distortion optimization process.
-Added an extractor application.
-Rebuild the headers module.
-Corrected minor bugs.
|1.0 - Oct. 2005||GPL license||-After 18 months of work the first version of BOI is finally released.|
|[ begin ]|
From BOI 3.0 onward it is possible to code high resolution images using multiple threads of processing and few memory resources. Three of its most relevant features are:
All coding stages of the coding pipeline are devised to run using multiple threads of execution. The figure on the right reports the computational time spent to code an aerial image (size 7200x4800, 8 bits, gray-scale) with an i7-3770 CPU using from 1 to 4 threads of parallel execution. The time spent to code the image employing 4 threads of execution is approximately 35% of that spent when using a single thread, for both the encoder and decoder. The number of threads employed by the codec is configurable via a parameter of the application.
The main difficulty to code very large resolution images is that the whole image can not be loaded in memory at once. In BOI this is addressed by conceptually partitioning the image in blocks that are processed independently. The size of these blocks is configurable, though they are typically of 2048x2048 or 4096x4096. The wavelet transform and the tier-1 coding is applied in each block and the resulting compressed data are kept in memory. If memory resources are critical, the BOI encoder also has a special mode that permits the storing of the compressed data in a temporal file (via the parameter "-ts 1"). See in the right figure the amount of memory required by BOI to encode and decode images of up to 18 GiB (images are 8 bit, gray-scale). The use of the "-ts 1" parameter allows the coding of a 18 GiB image employing only 2 GiB of memory.
Advanced rate-distortion optimization techniques
BOI's coding performance is among the best achieved by JPEG2000 codecs due to the implementation of recent advances in rate-distortion theory. Also, BOI's rate control attains the target rate with high precision and avoids the coding of unnecessary data when the rate is low. The figure on the right compares the coding performance achieved by BOI with that achieved with Kakadu (version 7.2.2). Kakadu is probably the best JPEG2000 implementation. The horizontal axis in the figure is the target rate at which the image (size 2048x2560, 8 bits, gray-scale) is coded. The vertical axis is the difference in Peak Signal to Noise Ratio (PSNR) between BOI and Kakadu. Values higher than 0 indicate that BOI achieves higher PSNR than Kakadu. For the lossy mode of JPEG2000, BOI and Kakadu achieve practically the same coding performance, whereas for the lossless mode BOI achieves significantly higher coding performance.
|[ begin ]|
|WHO USED BOI|
BOI has been employed by many researchers in numerous papers to evaluate new methods and techniques for JPEG2000 and wavelet-based image coding systems in general. In our department, BOI was utilized by:
|-Francesc Auli-Llinas, for his M.Sc., Ph.D., and postdoctoral studies.|
|-Joan Bartrina-Rapesta, for his M.Sc., Ph.D., and postdoctoral studies.|
|-Jose Lino Monteagudo-Pereira, for his M.Sc., and Ph.D. studies.|
|-Jorge Gonzalez-Conejero, for his M.Sc., and Ph.D. studies.|
|-Leandro Jimenez-Rodriguez, for his M.Sc., and Ph.D. studies.|
|-Juan Muñoz-Gomez, for his M.Sc., and Ph.D. studies.|
|-Alaitz Zabala-Torres, for his M.Sc., and Ph.D. studies.|
|-Miguel Hernandez-Cabronero, for his Ph.D. studies.|
|-Daniel Martinez-Domingo, for his M.Sc. studies.|
|-Pablo Enfedaque-Montes, for his M.Sc., and Ph.D. studies.|
|-Jente Beerten, for his M.Sc. studies.|
|[ begin ]|