Кодек RawZipper для сжатия RAW изображений с потерями и без потерь

Обновлено:

GPU-компрессор RAW-данных с байеровских сенсоров — с потерями и без, до 2–3 ГПикс/с. Для скоростной съёмки и записи длинных серий, где несжатый RAW не помещается на диск и не успевает записываться.

RawZipper — быстрый RAW-компрессор на видеокартах NVIDIA для сжатия сырых данных (Bayer и монохром) с потерями и без потерь. Коэффициент сжатия — от 5:1 до 10:1 и до 20:1, без потерь около 2:1. Компрессор применяется в аэрофотосъёмке, картографии, машинном зрении и научных задачах.

RAW даёт качество, но «съедает» диск и шину. Писать несжатый поток с многомегапиксельной скоростной камеры — значит упереться в SSD и объёмы хранения. RawZipper сжимает RAW прямо на GPU, с потерями и без, сохраняя байеровскую структуру для последующей обработки, — вы пишете дольше и быстрее на то же железо.

Мы сами написали эти алгоритмы

Кодеки и ISP-модули Fastvideo — это не обёртки над чужим кодом. Алгоритмы демозаики, шумоподавления, тон-маппинга и кодеков JPEG/JPEG2000 мы спроектировали — а многие и придумали — сами и сами реализовали на CUDA, на базе экспертизы в обработке изображений, которую нарабатываем с 2009 года. Поэтому вы получаете цельное, настроенное решение, а не набор GPU-примитивов; и если вашей задаче нужно что-то специфическое, мы можем изменить сам алгоритм, а не просто вызвать его.

Множество задач обработки изображений требуют сохранения необработанных кадров без преобразования в RGB. Это преобразование может быть выполнено впоследствии или в автономном режиме. Это утверждение применимо ко множеству задач, включая картирование, аэрофотосъемку и аэрокосмические приложения. Кодек RawZipper был разработан для сжатия необработанных данных.

Кодек RawZipper был реализован с целью сжатия и сохранения необработанных данных изображений, снятых монохромными и цветными (bayer) камерами. Данные камер Bayer соответствуют шаблону (RGGB, BGGR, GRBG или GBRG), в котором каждый пиксел отображает только один цветовой канал. Для сохранения исходных данных для последующей обработки может быть использовано сжатие как с потерями, так и без потерь.

Режим сжатия RAWКоэффициент (CR)Качество (PSNR, 12-бит Bayer)
Без потерь~2:1бит-в-бит
Максимальное качество4:1–5:1> 60 дБ
Визуально без потерь5:1–10:150–55 дБ
Высокая степень сжатиядо 20:1под задачу

Какой коэффициент сжатия и качество обеспечивает RawZipper?

Без потерь RawZipper сжимает RAW примерно в 2 раза (бит-в-бит). С потерями для 12-битных байеровских кадров при CR 5–10 достигается PSNR 50–55 дБ, при CR 4–5 — более 60 дБ, а для менее требовательных задач возможен CR до 20:1. Например, для 20-МПикс кадра DALSA/FLIR при CR=10 получено PSNR 45,3 дБ.

Приложения для RawZipper

В некоторых случаях приемлемым вариантом является реализация кодирования RAW-изображений без потерь. Однако коэффициент сжатия (CR) этих алгоритмов обычно равен примерно двум, что не так много. Тем не менее, алгоритмы сжатия без потерь также востребованы и они гарантируют, что каждое изображение будет восстановлено в точности таким, каким оно было сразу после получения (до сжатия). В настоящее время широко используются такие алгоритмы сжатия изображений без потерь: Lossless JPEG (1–16 бит), JPEG-LS (1–16 бит), JPEG 2000 (до 16 бит), JPEG XS (до 16 бит), JPEG XL (до 16 бит), и т.д. В некоторых случаях применение сжатия без потерь является обязательным, особенно в контексте научных исследований.

Также существует несколько вариантов использования видеокодеков без потерь. Видеокодеки обычно обеспечивают гораздо более высокую степень сжатия по сравнению с результатами сжатия неподвижных изображений. Алгоритм кодирования H.265 без потерь может работать с цветными видеопотоками, но он применим только к 8/10-битному цветному (NV12, YUV) выходу, а не к RAW. То же самое верно и для кодека AV1 без потерь, который может кодировать 10-бит YUV (4:2:0, 4:2:2, 4:4:4), но не RAW. Эти методы неприменимы для наиболее распространенного варианта использования, а именно для сжатия необработанных изображений (Bayer или монохром) с количеством бит на пиксел 12 или выше, вплоть до 16 бит. Однако в некоторых случаях видеокодеки могут быть подходящим решением для такой задачи. Логарифмическая кривая способна преобразовывать входные данные в диапазон 8/10 бит. Впоследствии мы можем применить сжатие с потерями с помощью алгоритма H.265 или AV1.

Хотя применение кодирования с потерями к необработанным изображениям действительно логично для достижения значительно большей степени сжатия, крайне важно контролировать ухудшение качества изображения, что является необходимым условием эффективности таких алгоритмов. Незначительные искажения в кадрах, закодированных в формате RAW, могут привести к значительным искажениям. Однако эти искажения станут заметны только после преобразования RAW в RGB. Такой подход потенциально позволяет достичь более чем двукратного значения CR, что требует поиска оптимизированного решения, учитывающего как требования к качеству изображения, так и к степени сжатия.

Алгоритмы сжатия RAW данных в кодеке RawZipper

Преимущества сжатия RAW данных

RawZipper

Основные возможности кодека RawZipper

Мы можем интегрировать кодек RawZipper в ваше решине, чтобы вся работа выполнялась на GPU. Возможности обработки изображений и видео на GPU можно посмотреть в описании нашего GPU Image & Video Processing SDK.

Дополнительная информация о качестве изображений и степени сжатия

В контексте необработанных байеровских кадров, полученных с помощью обычных 12-битных датчиков изображения производства Sony, Gpixel, On-Semi и CMOSIS, степень сжатия CR~2 обычно достигается для алгоритмов без потерь. То же самое касается 14-битных необработанных данных с фотокамер SONY, Canon, Nikon и т.д. Это связано с тем, что полезные данные также содержат шум, который может быть важен в научных приложениях, требующих сжатия данных без потерь. Кодирование без потерь также демонстрирует более низкую производительность по сравнению с кодеками с потерями.

Применение кодирования с потерями обычно приводит к компромиссу между потерями и улучшенной производительностью, эффективность которого зависит от содержимого изображения, используемых параметров и используемого аппаратного обеспечения. Крайне важно понимать механизмы контроля уровня потерь, чтобы обеспечить сохранение высококачественных изображений для конкретной задачи. В большинстве случаев можно кодировать необработанные кадры со степенью сжатия (CR) в 5-10 раз, тем самым достигая пикового отношения сигнал/шум (PSNR) для 12-битных байеровских изображений на уровне 50-55 децибел (дБ) или выше. PSNR вычисляется для исходного необработанного байеровского изображения и того же изображения после обработки, кодирования, декодирования и восстановления.

Общеизвестно, что показатель PSNR имеет ограниченную полезность. С этой целью проводится визуальная оценка качества изображения для определения наиболее подходящих параметров обработки по умолчанию для данного проекта. Было проведено визуальное сравнение не между необработанными изображениями, а между RGB-изображениями, которые подверглись обработке с идентичными параметрами. Например, при просмотре с увеличением 500% не должно быть заметных различий между исходным и обработанным изображениями.

Для приложений, требующих максимального качества изображений, можно использовать диапазон CR 4-5, что позволяет достичь уровней PSNR для необработанных изображений, превышающих 60 дБ.

Существует множество случаев, когда предъявляются значительно более низкие требования к качеству изображения и возникает явная необходимость в повышении CR. При этом добиться значений CR порядка 20 для таких приложений является достижимой целью.

Необходимо признать, что данный RAW кодек со сжатием с потерями - это не просто кодек в обычном смысле этого слова. Это решение отличается своей сложностью и широким спектром возможностей, которые выходят за рамки сжатия и распаковки данных. Предлагаемая методика обеспечивает баланс между сохранением необработанных данных и выполнением дополнительной обработки изображений для улучшения соотношения сигнал/шум и минимизации искажений изображения. Качество необработанных изображений можно сохранить благодаря внедрению передовых технологий, о чем свидетельствуют превосходная цветопередача и качество изображения, достигаемые в конечном итоге по сравнению с обычными кодеками JPEG и JPEG 2000. Данное программное обеспечение может быть настроено таким образом, чтобы оптимизировать результаты для конкретных приложений.

Управление качеством при сжатии и восстановлении RAW

Кодек RawZipper может работать как в режиме с потерями, так и без потерь. Когда мы работаем в режиме с потерями, мы получаем некоторые искажения изображения. Важно уметь измерять уровень потерь и оценивать их визуально и численно. Мы должны проверять как сигнал, так и шум, чтобы убедиться, что мы можем воспроизвести исходное изображение с высокой точностью. Крайне важно восстановить и сигнал, и шум одновременно. Что можно контролировать в первую очередь:

Для оценки мы взяли необработанный кадр с изображением ColorChecker с камеры DALSA/FLIR (20 мегапикселей, 4512 x 4512, 12-бит, RGBB). Мы применили байеровское кодирование с потерями при CR = 10 и получили значение PSNR = 45,3 дБ. Стандартное отклонение (σ) изменилось в среднем менее чем на 2%, а значение SNR - менее чем на 0,15 дБ. Мы произвели замеры для каждого участка ColorChecker.

Конвейер графического процессора для необработанного декодирования, обработки и визуализации

Вышеупомянутый конвейер требует больших вычислительных ресурсов, и добиться высокой производительности для выполнения этой задачи непросто. Для облегчения процесса визуализации необходимо обеспечить частоту кадров не менее 60 кадров в секунду (fps). Для большинства разрешений эта цель может быть достигнута в режиме реального времени с помощью графического процессора NVIDIA. Мы используем наш SDK для обработки изображений на GPU для вышеупомянутого конвейера, и он может выполнять обработку данных со скоростью до 2-3 ГПикс/с на GeForce RTX 4090. Такое решение доступно для всех графических процессоров NVIDIA: мобильных, портативных, настольных, серверных.

Полезные ссылки по этой теме

Смежные продукты Фаствидео

Проверьте скорость сами — наши цифры воспроизводимы на вашем GPU.

Сначала — на ваших данных, бесплатно

До любых обязательств пришлите нам несколько своих снимков или опишите задачу. Мы прогоним их через софт, покажем результат и разберём его вместе на созвоне. Если решаете двигаться дальше — заказ простой: коммерческое предложение, ваш заказ (договор/PO), наш счёт; условия лицензии уже входят в софт.

Как мы работаем →

Фёдор Серженко, Fastvideo

Об авторе

Фёдор Серженко, к.ф.-м.н. — основатель и генеральный директор Fastvideo. Окончил МФТИ, кандидатскую защитил в 1993 году. С 2009 года руководит разработкой GPU-кодеков и ISP-модулей Fastvideo, включая Fastvideo SDK. LinkedIn.

Почему результатам можно верить

Fastvideo разрабатывает софт для видеокарт NVIDIA с 2009 года. Наши кодеки соответствуют стандартам, которые реализуют — JPEG (ITU-T T.81 / ISO IEC 10918) и JPEG2000 (ITU-T T.800 / ISO IEC 15444), — а часть инструментов открыта на GitHub, так что заявленное можно проверить в коде. Все опубликованные цифры воспроизводимы: см. методику тестирования и измерьте на своём GPU.

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

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