Компания Google открыла код эффективного JPEG-кодировщика Guetzli
16 марта 2017 года
Компания 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.
Дополнение: Разработчики развиваемой сообществом Mozilla библиотеки кодирования JPEG-изображений MozJPEG, ориентированной на достижение более высокой степени сжатия при сохранении совместимости с существующими декодировщиками, в текущем виде не собираются добавлять поддержку алгоритма Guetzli. Несмотря на то, что уровень сжатия MozJPEG при сравнении с libjpeg-turbo не превышает 5-10%, Guetzli слишком медленный. Например, кодирование небольшого файла, размером 38 Кб, заняло 10 секунд, что в 120 раз медленнее MozJPEG.
Из недостатков Guetzli также упоминается поддержка кодирования только в режиме наивысшего качества (-quality 90). Например, MozJPEG может обеспечить более высокий уровень сжатия в режимах с приемлемым качеством. Высокая ресурсоёмкость и невозможность манипуляции уровнем качества затрудняет применение Guetzli во многих областях, на которые рассчитан MozJPEG, а именно переупаковка на лету, оптимизация изображений в высоком разрешении и сжатие с различными режимами качества. Guetzli ещё достаточно молодой проект и, возможно, в будущем проблемы с производительностью будут устранены, тогда можно будет вернуться к вопросу по интеграции его поддержки в MozJPEG.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.