Технология Jpeg: Анализ Пространства Решений

Изображения в формате JPEG, помимо самих файлов с расширением .

jpg, можно найти в файлах PDF и TIFF. Заинтересованные стороны технологии JPEG, вероятно, можно разделить на следующие группы:

  • разработчики камер и сканеров;
  • фотографы (большие фотографии в хорошем разрешении с высокими требованиями к качеству);
  • социальные сети и CDN, такие как imgix, которые распространяют загруженные фотографии неконтролируемого пользовательского контента неконтролируемого происхождения, количества и размера в сжатом виде;
  • веб-мастера, которые управляют умеренным количеством изображений, не относящихся к пользовательскому контенту, с контролируемым качеством;
  • любители отсканированных бумажных книг и других исторических источников;
Автор настоящей статьи принадлежит преимущественно к последней группе и уж точно не принадлежит к числу художественных фотографов.

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

Коротко о процесс трансформации исходное изображение в формате JPEG:

  • преобразование цветового пространства и понижение разрешения;
  • изображение разделено на блоки пикселей 8x8 (MCU).

    Если размер картинки не делится на 8, то остальная часть квадрата заполняется какими-то пикселями и при декодировании просто обрезается;

  • ДКП (дискретное косинусное преобразование) матрицы размером 8х8 пикселей, в результате чего выделяются «более важные».

    коэффициенты качества картинки располагаются ближе к левому верхнему углу полученной матрицы 8х8, а «менее важные» — ближе к правому нижнему углу; всего имеем 8x8=64 коэффициента;

  • квантование: матрица из предыдущего пункта поэлементно разбивается на матрицу квантования (которая может относительно свободно выбираться для каждой конкретной картинки; в результате квантования получается матрица, в которой элементы из нижних правый угол обычно равен нулю;
  • коэффициент сжатия (энтропийное кодирование, кодирование RLE и кодирование Хаффмана);
Единственная операция, при которой происходит потеря информации, — это квантование.

Все остальные операции происходят без потерь.

Разные заинтересованные стороны имеют разные производственные циклы , в котором различаются следующие фазы:

  • Какая вычислительная мощность и время доступны в момент создания файла JPEG? например, камера против полноценных компьютеров;
  • будет ли сгенерированный файл JPEG конечным результатом? например, это справедливо для стандартного изображения на веб-сайте или для созданной миниатюры;
  • будет ли сгенерированный файл JPEG фактическим исходным изображением? например, это справедливо для отсканированных страниц книг;
  • Сколько места в файловом хранилище? Места всегда не хватает, а иногда и очень мало;
  • какова конечная технология? JPEG-файл для браузера? PDF-файл? специализированное программное обеспечение, находящееся под полным контролем, например электронная книга?
  • Можем ли мы определить, что это за изображение? Полноцветная фотография или отсканированная черно-белая страница с сепией?
  • Сколько усилий мы можем приложить для проверки качества результата? фотограф может часами сидеть в Photoshop, CDN могут обеспечить только «приемлемое» качество;
Оставаясь в рамках стандартного формата JPEG, мы мы можем варьироваться следующий:
  1. исходные пиксели в модели человеческого восприятия;
  2. матрица квантования (причем мы можем отдельно выбрать подходящую матрицу, а также масштабировать ее в соответствии с требуемым качеством JPEG);
  3. матрица-результат квантования, позволяющая в той или иной степени варьировать пиксели результирующего изображения в рамках модели человеческого восприятия;
  4. схема сжатия коэффициентов;
Выйдя за рамки стандартного формата файла, но сохранив базовую модель кодирования JPEG, мы можем использовать схему сжатия с нестандартными коэффициентами, экономя место для хранения (а также место для отображения, если мы управляем конечным устройством).

Если окончательным форматом является стандартный PDF, а нашим источником являются отсканированные страницы книги, то мы можем использовать технологию разделения изображений на черно-белую и цветную части.

Если мы управляем конечным устройством, то можем использовать другой нестандартный «формат».

Ключевой момент: многие из описанных здесь технологий помогают уменьшить размер файла.

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

Рассмотрим каждое измерение пространства возможных решений отдельно.



Исходные пиксели

Технология сжатия JPEG основана на психовизуальная модель зрения : человеческий глаз теряет детализацию высокочастотного изображения; люди воспринимают различия в яркости лучше, чем различия в цвете.

Существуют стандартизированные метрики для правильного воспроизведения исходного изображения, основанные на формуле SSIM (Structural схожести), которые можно рассчитывать автоматически и задавать целевые значения.

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

Мы не знаем, использует ли какое-либо программное обеспечение такую технологию.



Матрицы квантования

Матрицы квантования являются основным механизмом, обеспечивающим качество воспроизведения при приемлемой степени сжатия.

Существует несколько стандартных матриц по умолчанию, в том числе созданная более 25 лет назад на основе анализа корпуса тестовых изображений, созданных в то же время; если использовать стандартные матрицы, то все будет более-менее в порядке, если не надо заморачиваться.

Вообще говоря, оптимальным было бы генерировать отдельную матрицу квантования для каждого изображения путем анализа его содержимого.

Производители фотоаппаратов используют свои собственные методы генерации.

Говорят, что Adobe Photoshop умеет анализировать изображение и выбирать подходящую матрицу.

Качество сжатия JPEG — это просто реальный фактор, который применяется к элементам стандартных матриц квантования, заставляя их отбрасывать все больше и больше информации.

Интересный факт: матрицы квантования можно использовать в компьютерной криминалистике для идентификации устройства, с помощью которого была сделана фотография.



Квантованные коэффициенты ДКП

Часто файлы JPEG фактически являются исходным материалом, поскольку хранить изображения в несжатых форматах непрактично.

Также иногда у нас просто нет доступа к исходному материалу на бумаге, а есть только, например, PDF-файл неизвестного происхождения и сомнительного качества.

Поэтому для многих приложений имеет смысл осторожно обращаться с коэффициентами DCT как с первоклассными объектами, применяя к ним преобразования без потерь, когда это возможно.

Работа на уровне матриц коэффициентов DCT позволяет сделать несколько преобразований с минимальными потерями (или вообще без потерь).

Здесь не рассматриваются операции, требующие полной перекодировки пикселей.

Преобразования с минимальными потерями:

  • поворот на 90 и 180 градусов, если размер изображения делится на 8;
  • обрезка картинки, особенно если координаты линий разреза делятся на 8;
  • масштабирование изображений со степенью сжатия 8/N, где N=9.16; в частности, это означает, что вы можете сжимать изображения с соотношением 1/2 и 2/3.
  • преобразование изображения из цветного представления в серое (цветовая составляющая выбрасывается);
Поскольку мы знаем, что следующей операцией после квантования будет сжатие, то теоретически мы можем немного варьировать коэффициенты, чтобы они лучше сжимались, но при этом декодировались примерно в те же пиксели, что и исходное изображение.

Неизвестно, существуют ли реализации, использующие этот подход.

Схема коэффициента сжатия

Стандартный JPEG поддерживает сжатие с коэффициентом Хаффмана, а также арифметическое кодирование.

Реализация сжатия Хаффмана очень часто бывает самой простой и наивной; в частности, компрессор сжимает коэффициенты, обрабатывая их как случайные данные.

Если принять во внимание тот факт, что это коэффициенты двумерной матрицы, кодирующей изображение, то можно получить существенно лучшие результаты.

Сжатие коэффициентов на этом уровне происходит без потерь.

Другой способ улучшить сжатие — перекодировать файл в прогрессивный JPEG. При этом коэффициенты одного порядка группируются вместе, что обычно приводит к меньшему размеру файла.

Это также операция сжатия без потерь.

Кроме того, прогрессивный JPEG начинает быстрее рендериться при загрузке файла, что может быть отдельным дополнительным плюсом в вебе.

Второй стандартный метод сжатия — арифметическое кодирование.

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

Простое сжатие изображений с помощью арифметического кодирования обеспечивает значительную экономию размера без потерь.

Этот метод, конечно, можно использовать, если мы контролируем реализацию клиентского устройства или если изображения используются только для хранения.

Если у нас есть полный контроль над клиентским устройством или мы хотим хранить только изображения, то мы можем использовать нестандартные схемы сжатия, которые лучше используют тот факт, что сжимаемые объекты являются изображениями.

Например, интересная программа PackJPG умеет сжимать JPEG без потерь примерно на 20%, но результат сохраняется в нестандартном формате.



Разделение слоев изображения

Для некоторых изображений, особенно сканированных печатных страниц, возможно разделение изображения на черно-белый (или другой палитры) слой и «уточняющий» фон в полноцветном режиме.

Оба этих слоя можно сжать по отдельности в оптимальный для этой цели формат. Например, для PDF черно-белый слой можно сжать с помощью JBIG2, а цветной слой можно сжать в JPEG2000, JPEG или PNG. Аналогичная технология используется в формате DJVU. Если мы управляем клиентским устройством, то мы можем делать аналогичные преобразования, например, накладывать изображения друг на друга в HTML. Ссылки на документы и программы https://en.wikipedia.org/wiki/JPEG - очень хорошее обзорное описание.

Некоторые абзацы становятся понятны только после изучения других ссылок.

http://www.ijg.org/ — эталонная реализация формата.

Он написан на суперпортативном языке C, поэтому сильно неоптимизирован.

http://www.libjpeg-turbo.org/ - оптимизирована реализация JPEG http://www.libjpeg-turbo.org/About/Jpeg-9 — Критика IJG + http://www.libjpeg-turbo.org/About/SmartScale - критика спорного нового SmartScale http://www.libjpeg-turbo.org/About/Mozjpeg - очень хороший технический анализ Mozjpeg https://github.com/mozilla/mozjpeg — Реализация JPEG оптимизирована для конкретных распространенных случаев использования.

http://jpegclub.org/jpegtran/ — утилита для конвертации файлов JPEG с минимальными потерями https://linux.die.net/man/1/exiftran — утилита для работы с файлами JPEG, повернутыми с помощью EXIF. https://github.com/ifad/pdfbeads — скрипт для генерации PDF-файлов с использованием разделения слоев https://en.wikipedia.org/wiki/DjVu#Compression - описание разделения слоев в DjVu https://github.com/packjpg — набор библиотек и утилит для низкоуровневой обработки файлов JPEG. http://code.flickr.net/2017/01/05/a-year-without-a-byte/ — история о том, как Flickr оптимизировал хранение и распространение изображений Теги: #JPEG #pdf #оптимизация изображений #хранилище изображений #Оптимизация клиента #Обработка изображений #ИТ-стандарты #pdf

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.