Сжатие JPEG2000 без потерь для 12-бит кадров на Jetson Orin со скоростью 650 МПикс/с

Автор: Серженко Фёдор
Tags: Aerospatial, JPEG2000, J2K codec, lossless compression, Jetson Orin, GPU ISP

Аппаратное решение Jetson Orin AGX от NVIDIA является весьма перспективным для обработки и сжатия изображений. Мы применяли это высокопроизводительное решение в различных автономных системах во множестве проектов в следующих областях:

Приложения для кодирования JPEG2000 в реальном времени на Jetson Orin

  • Обработка медицинских изображений
  • Микроскопия
  • Цифровая патология
  • Геоинформационные системы
  • Цифровое кино
  • Обработка данных на спутниках

Стоит отметить, что для таких приложений часто необходим именно алгоритм кодирования изображений без потерь. Обычно нам требуется сжимать 12-битные RAW (необработанные) кадры с монохромных, инфракрасных камер или камер Bayer. Окончательное преобразование RAW в RGB или RAW в оттенки серого может быть выполнено позже; самое главное - захватить и сжать входные необработанные кадры, используя алгоритм без потерь, причём это должно быть сделано в режиме реального времени.

По данным ссылкам можно найти более подробную информацию о нашем подходе к тестированию и последних бенчмарках кодека JPEG2000 для кодирования и декодирования на видеокартах NVIDIA. Схема тестирования для NVIDIA Jetson Orin используется точно такая же.

 

сжатие JPEG2000 на Jetson Orin

 

Параметры сжатия JPEG2000 без потерь для RAW кадров

  • Формат входных кадров – PGM
  • Формат для обработанных кадров – JP2
  • Битность: 12 бит
  • Разрешение тестового изображения: 5312 × 4608
  • Сжатие JPEG2000 с вейвлетом CDF 5/3 (без потерь)
  • Количество уровней DWT преобразований – 6
  • Размер кодоблока – 32×32
  • MCT (цветовое преобразование) – вкл
  • PCRD (точный размер сжатого файла) – выкл
  • Tiling (разбиение на тайлы) – выкл
  • Window (работа с окном) – выкл
  • Количество уровней качества – 1
  • Прогрессия (пордок обхода) – LRCP (L = layer, R = resolution, C = component, P = position)
  • Режимы работы – одиночный кадр, усреднение в цикле, многопоточная обработка в цикле
  • Тестовый кадр 24 МПикс 12-бит RAW байер RGGB – RGGB_5312x4608_12bit.pgm
  • Коэффициент сжатия для JPEG2000 без потерь - 2,8

Эти тесты кодирования без потерь для этого конкретного изображения нужны, чтобы продемонстрировать уровень производительности, который может быть достигнут с помощью Jetson Orin AGX и нашей реализации на видеокарте алгоритма кодирования JPEG2000 без потерь. Поскольку степень сжатия изображений зависит от их содержимого, можно получить немного другие результаты для других изображений. Тем не менее, уровень производительности кодирования должен оставаться аналогичным.

Коэффициент сжатия при кодировании с потерями (или визуально без потерь) для алгоритма JPEG2000 может быть намного выше, чем при точном сжатии без потерь. Поэтому мы рекомендуем протестировать различные параметры для достижения наилучшего коэффициента сжатия при приемлемом качестве изображения. Уменьшение коэффициента качества не только улучшает сжатие, но и повышает производительность как при кодировании, так и при декодировании. Наши тесты показывают результаты производительности для вышеуказанных изображений и параметров.

Софт и железо для тестирования

  • NVIDIA Jetson Orin AGX, Jetpack 6.2
  • CUDA Toolkit 12.6

Бннчмарки кодера JPEG2000 на NVIDIA Jetson Orin AGX для 12-бит 24-МПикс RAW кадра

Железо 1 картинка среднее по 100 кадрам 2 потока, 100 повторов, среднее
Кодер JPEG2000 на Jetson Orin AGX 6,7 фпс 13,2 фпс 27 фпс

Как видно, мы достигли производительности кодирования в формате JPEG2000 без потерь порядка 650 МПикс/сек для этого конкретного 12-битного изображения RAW в двухпоточном приложении. Это намного превышает требования к производительности сжатия без потерь в аналогичных проектах.

Стоит отметить, что мы таким же образом можем использовать кодирование RAW кадров и по алгоритму JPEG2000 с потерями на Jetson Orin. Это решение является в некотором смысле более сложным, поскольку оно требует некоторой дополнительной предварительной обработки, но оно также имеет очень высокую производительность и значительно лучшую степень сжатия, хотя и за счёт некоторого ухудшения качества изображения из-за процесса кодирования с потерями. Этот компромисс следует рассматривать для каждой задачи отдельно.

Для приложений, требующих сверхвысокой производительности в плане захвата и кодирования необработанных изображений, у нас также есть 12-битный алгоритм JPEG на CUDA, который примерно более чем в десять раз быстрее, чем кодировщик JPEG2000 на аналогичном желез. Для нашего тестового изображения в формате RAW мы добились частоты кадров около 230 кадров в секунду для 12-битного JPEG-кодирования на Jetson Orin AGX с качеством jpg 100 (что означает незначительное искажение качества). В этом случае степень сжатия примерно на 15% ниже, чем у JPEG2000, но она по-прежнему очень интересна. Перед применением этого алгоритма также есть возможность разделить каналы Bayer на четыре разные плоскости и кодировать их по отдельности. Это улучшает степень сжатия за счет небольшого снижения производительности.

Существуют различные приложения, требующие высокой степени сжатия 12-битных изображений RAW с сенсоров машинного зрения SONY, Onsemi, Gpixel и др. Всё это можно сделать с помощью нашего кодека RawZipper на CUDA, который создан для эффективного и быстрого байеровского сжатия RAW с минимальными визуальными искажениями изображения.

Присылайте нам ваши тестовые изображения с описанием задачи и мы пришлём наши варианты сжатия.

Форма для отправки запроса

Эта форма сохраняет вашу должность и адрес электронной почты.