openjpeg
Библиотека с открытым исходным кодом для сжатия и распаковки изображений в формате JPEG 2000, разработанная на языке C. Она создана для продвижения и использования стандарта JPEG 2000, обеспечивая высокую степень сжатия, поддержку прогрессивной передачи и устойчивость к ошибкам. Библиотека официально признана ISO/IEC и ITU-T в качестве эталонного программного обеспечения для JPEG 2000.
Особенности
- полное соответствие стандарту JPEG 2000;
- поддержка как сжатия с потерями, так и без потерь;
- прогрессивная передача изображений по качеству и разрешению;
- устойчивость к ошибкам при передаче и хранении данных;
- модульная архитектура с поддержкой расширенных частей стандарта (JP2, MJ2, JPWL, JPIP).
Основные компоненты
OpenJPEG предлагает как низкоуровневый API для интеграции в приложения, так и готовые инструменты командной строки (подробнее с документацией можно ознакомиться здесь).
Базовый кодек JPEG 2000
Ядро библиотеки реализует кодирование и декодирование в соответствии с частью 1 стандарта JPEG 2000. API предоставляет функции для работы с основными структурами данных, такими как изображения и параметры кодирования/декодирования.
Основные функции API:
opj_image_create()иopj_image_destroy()— создание и удаление структуры изображения;opj_compress()— кодирование изображения в поток JPEG 2000;opj_decompress()— декодирование потока JPEG 2000 в изображение;opj_set_info_handler(),opj_set_warning_handler(),opj_set_error_handler()— установка callback-функций для событий.
Модули для расширенных частей стандарта
Помимо основного кодека, OpenJPEG включает модули для поддержки дополнительных частей стандарта JPEG 2000, что позволяет обрабатывать специализированные форматы:
- JP2 (Part 2) — поддержка расширенных форматов файлов и преобразований для мультиспектральных изображений;
- MJ2 (Part 3) — работа с Motion JPEG 2000, форматом для хранения видеопоследовательностей;
- JPWL (Part 11) — механизмы для повышения устойчивости к ошибкам при беспроводной передаче;
- JPIP (Part 9) — реализация интерактивного протокола для удалённого просмотра изображений.
Параметры декодирования и кодирования
Библиотека использует структуры параметров (opj_dparameters для декодирования, opj_cparameters для кодирования), позволяющие тонко настраивать процесс обработки.
Основные параметры декодирования:
cp_reduce— количество отбрасываемых уровней разрешения для декодирования уменьшенной версии изображения;cp_layer— максимальное число декодируемых слоёв качества;DA_x0,DA_y0,DA_x1,DA_y1— координаты области декодирования.
Параметры кодирования включают управление качеством, количеством слоёв, размером тайлов и кодовых блоков, порядком прогрессии и другие.
Утилиты командной строки
OpenJPEG поставляется с двумя основными инструментами для работы с JPEG 2000 из командной строки:
opj_compress— сжатие изображений распространённых форматов (BMP, PGX, PGM, PPM, PNM, PAM, PFM, TIF, RAW) в JPEG 2000;opj_decompress— распаковка файлов JPEG 2000 (J2K, JP2, J2C) обратно в растровые форматы.
Утилиты поддерживают множество опций, позволяя контролировать степень сжатия, количество уровней качества, размер тайлов, использовать необратимое сжатие и многое другое.
OPJViewer и дополнительные инструменты
В состав OpenJPEG входит графический просмотрщик OPJViewer, который позволяет открывать и просматривать файлы J2K, JP2, JPWL и MJ2.
Внутренние модули
Исходный код библиотеки организован в модули, отвечающие за различные этапы обработки:
J2KиJP2— чтение и запись кодового потока и файлового формата;DWT— реализация дискретного вейвлет-преобразования;T1иT2— кодирование уровней Tier-1 и Tier-2;MCT— многокомпонентные преобразования;THREAD— пулы потоков для параллельной обработки.