Кодек 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:1 | 50–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 данными
В некоторых случаях приемлемым вариантом является реализация кодирования 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 (восстановление бит-в-бит)
- "Сжатие почти без потерь" для RAW с небольшим уровнем потерь
- Сжатие "визуально без потерь"
- Кодирование с потерями с высокой степенью сжатия
- Сжатие RAW видео
Преимущества сжатия RAW данных
- Было продемонстрировано, что использование этих технологий приводит к значительной экономии мест для хранения данных и полосы пропускания.
- Сохранение исходных данных имеет первостепенное значение в области сжатия данных. Сжатие без визуальных потерь - это метод, который позволяет осуществлять последующую обработку данных (например, преобразование RAW в RGB) без ущерба для целостности исходных данных.
- Повышение производительности: в контексте приложений реального времени можно обойтись без полноценного использования алгоритмов обработки (ISP) для преобразования RAW в RGB. Этот подход предполагает оптимизацию конвейера ISP за счет интеграции предварительной обработки и кодирования необработанных данных.
- Размер данных, которые необходимо обработать при работе с RAW данными сокращается в три раза по сравнению с RGB.
- Рассматриваемое решение отличается простотой использования, что объясняется его способностью функционировать независимо от какой-либо предварительной калибровочной информации, поступающей от камеры.
- Повышение качества изображения во время постобработки в автономном режиме: использование алгоритмов реального времени часто приводит к снижению качества изображения. Следовательно, существует возможность использования более сложной обработки в автономном режиме для повышения качества изображения во время постобработки.
- Этот подход применим к необработанным изображениям и к RAW видео.
Основные возможности кодека RawZipper
- Обработка RAW для байеровских или монохромных изображений/видео с произвольной шириной и высотой
- Ввод данных: необработанные байеровские или монохромные кадры из памяти HDD/RAID/SSD или CPU/GPU
- Вывод данных: сжатые данные на жестком диске/RAID/SSD или в памяти процессора/GPU
- Разрядность данных ввода/вывода: 8/10/12/14/16 бит
- Алгоритмы: компрессия и декомпрессия с потерями и без потерь
- Коэффициент сжатия от 5:1 до 10:1, вплоть до 20:1
- Дополнительная функция для ограничения степени сжатия изображений
- Оптимизирована для новейших графических процессоров NVIDIA, включая Jetson
- Совместимость с 64-разрядными версиями Windows-10/11, Linux Ubuntu, L4T
Мы можем интегрировать кодек 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 может работать как в режиме с потерями, так и без потерь. Когда мы работаем в режиме с потерями, мы получаем некоторые искажения изображения. Важно уметь измерять уровень потерь и оценивать их визуально и численно. Мы должны проверять как сигнал, так и шум, чтобы убедиться, что мы можем воспроизвести исходное изображение с высокой точностью. Крайне важно восстановить и сигнал, и шум одновременно. Что можно контролировать в первую очередь:
- Гастограмма RAW
- Пиковое соотношение сигнал/шум, PSNR
- Стандартное отклонение для выбранной "плоской" области кадра
- Отношение сигнал/шум SNR
Для оценки мы взяли необработанный кадр с изображением ColorChecker с камеры DALSA/FLIR (20 мегапикселей, 4512 x 4512, 12-бит, RGBB). Мы применили байеровское кодирование с потерями при CR = 10 и получили значение PSNR = 45,3 дБ. Стандартное отклонение (σ) изменилось в среднем менее чем на 2%, а значение SNR - менее чем на 0,15 дБ. Мы произвели замеры для каждого участка ColorChecker.
Конвейер графического процессора для необработанного декодирования, обработки и визуализации
- Распаковка и восстановление необработанного изображения
- Создание исходного несжатого изображения RAW с использованием шаблона Байера
- Линеаризация необработанного изображения
- Баланс белого
- Коррекция яркости
- Шумоподавитель
- Цветокоррекция
- лютня (1D, 3D)
- Обрезка / поворот /изменение размера/резкость
- Локальный контраст
- Вывод OpenGL
- Дополнительно выводить сжатие MJPEG в формат AVI или кодирование изображений в формат JPEG
Вышеупомянутый конвейер требует больших вычислительных ресурсов, и добиться высокой производительности для выполнения этой задачи непросто. Для облегчения процесса визуализации необходимо обеспечить частоту кадров не менее 60 кадров в секунду (fps). Для большинства разрешений эта цель может быть достигнута в режиме реального времени с помощью графического процессора NVIDIA. Мы используем наш SDK для обработки изображений на GPU для вышеупомянутого конвейера, и он может выполнять обработку данных со скоростью до 2-3 ГПикс/с на GeForce RTX 4090. Такое решение доступно для всех графических процессоров NVIDIA: мобильных, портативных, настольных, серверных.
Полезные ссылки по этой теме
- High Performance CUDA JPEG Codec
- 12-bit JPEG encoding on GPU
- JPEG2000 Codec on GPU
- RAW Image Compression
- Lossless JPEG Codec on CPU
Смежные продукты Фаствидео
- Софт для аэрофотосъёмки — сжатие и обработка RAW на борту
- Кодек JPEG на CUDA и кодек JPEG2000
- Дебайер на CUDA — быстрая демозаика
- Fastvideo SDK — полная библиотека обработки изображений на GPU
- Решения Фаствидео для задач обработки изображений
Проверьте скорость сами — наши цифры воспроизводимы на вашем GPU.
Сначала — на ваших данных, бесплатно
До любых обязательств пришлите нам несколько своих снимков или опишите задачу. Мы прогоним их через софт, покажем результат и разберём его вместе на созвоне. Если решаете двигаться дальше — заказ простой: коммерческое предложение, ваш заказ (договор/PO), наш счёт; условия лицензии уже входят в софт.