Компания Google открыла код эффективного JPEG-кодировщика Guetzli


Компания Google объявила об открытии кода высококачественного JPEG-кодировщика Guetzli с реализацией нового алгоритма кодирования, позволяющего добиться существенного сокращения размера изображения без ухудшения качества, но с сохранением совместимости со всеми штатными декодировщиками JPEG и полным соответствием стандарту JPEG. Например, по сравнению с эталонной библиотекой libjpeg предложенный алгоритм позволяет сократить размер изображений на 20-30% c сохранением идентичного качества. Код библиотеки и базовых утилит с реализацией Guetzli написан на языке С++ и распространяется под лицензией Apache 2.0.

Guetzli близок по своему назначению к алгоритму Zopfli, позволяющему добиться повышения уровня сжатия файлов PNG и gzip, без потери совместимости. В отличие от WebP, RAISR (Rapid and Accurate Image Super-Resolution) и алгоритмов упаковки изображения на базе нейронных сетей, требующих специальных декодировщиков, Guetzli нацелен на достижение максимального уровня сжатия без нарушения совместимости с уже существующим клиентским ПО. Обратной стороной предложенного алгоритма является очень большая ресурсоёмкость. Guetzli также требует достаточно много оперативной памяти, например, для каждого 1MPix картинки требуется 300 Мб ОЗУ. Относительно других кодировщиков Guetzli работает очень медленно и не подходит для сжатия на лету, но вполне пригоден для одноразовой переупаковки имеющегося контента.

В процессе кодирования JPEG наиболее заметная потеря качества наблюдается на стадии квантования. Стадии преобразования цветового пространства и дискретное косинусное преобразование (DCT) не столь сильно поддаются оптимизации. Guetzli оптимизирует таблицы квантования и коэфициенты DCT для каждого блока JPEG, применяя специальный оптимизатор с обратной связью (closed-loop). Для оценки оптимальности найденных параметров квантования Guetzli применяет алгоритм Butteraugli, использующий в качестве метрики уровень различий между психовизуальным моделированием JPEG и собственным более эффективным методом психовизуального моделирования, что позволяет снизить число возникающих артефактов. Например, на изображениях ниже слева представлен исходный вариант, в центре результат работы libjpeg, а справа - Guetzli.