В течение многих лет я считал, что повторное сжатие файлов JPEG несколько раз будет постепенно ухудшать его качество, пока они не станут неузнаваемым беспорядком, как это делают фотокопии фотокопий. Это интуитивно понятно, поскольку JPEG - это формат с потерями. Есть также другие вопросы и ответы, которые утверждают, что это так:
Какое качество изображения теряется при повторном сохранении изображения JPEG в MS Paint?
Влияет ли простое открытие и закрытие файла JPEG на качество изображения?
Однако я также читал, что повторное сжатие JPEG-файлов с одинаковым уровнем качества не ухудшит качество изображения. Это противоречит постепенной деградации, описанной в другом месте.
Что технически происходит при повторном сжатии JPEG? Что теряется и как? Будет ли изображение действительно превращаться в снежный беспорядок, который раньше появлялся на телевидении? А как насчет тех видео, где изображения распадаются после многократного повторного сжатия?
(Пожалуйста, не просто махайте рукой и обращайтесь к общей концепции потерь.)
(Этот вопрос и ответы, которые он привлек к этому моменту, сосредоточены на технических факторах (специфических настройках и манипуляциях с изображением), которые вызывают или предотвращают ухудшение качества изображения при повторном сжатии файла JPEG несколько раз.)
источник
Ответы:
Почти все потери качества изображения происходят при первом сжатии изображения в формате JPEG. Независимо от того, сколько раз JPEG сжимается с одинаковыми настройками , потери при генерации ограничиваются ошибкой округления.
Границы MCU остаются нетронутыми (8x8 блоков).
Подвыборка цветности отключена.
Постоянный DQT (одинаковая настройка качества).
Однако ошибки округления могут быть большими для каждой итерации, если вышеуказанные критерии не выполняются, и целесообразно сохранять резервные копии всех исходных файлов.
Алгоритм сжатия JPEG
Конвертировать цветовое пространство. При желании уменьшите информацию о цвете (подвыбор цветности) (с потерями) . Если данные не понижены, потеря информации является результатом ошибки округления .
Сегментация. Разделите каждый канал на блоки 8x8 (MCU = минимальная единица кодирования). (Lossless)
Примечание. Если включена субдискретизация по цветности, MCU может эффективно составлять 16x8, 8x16 или 16x16 с точки зрения исходного изображения. Тем не менее, MCU все еще являются блоками 8x8.
Дискретное косинусное преобразование (DCT) на каждом MCU. Потеря информации является результатом ошибки округления .
Квантование. Значение в каждой ячейке блока MCU делится на число, указанное в таблице квантования (DQT). Значения округлены в меньшую сторону, многие из которых станут нулевыми. Это основная часть алгоритма с потерями.
Зигзагообразный скан. Переставьте значения в каждом MCU в последовательность чисел, следуя зигзагообразному шаблону. Нули, которые произошли во время квантования, будут сгруппированы вместе. (Lossless)
DPCM = дифференциальная импульсная кодовая модуляция. Преобразуйте числовые последовательности в форму, которую легче сжать. (Lossless)
RLE = Длина кодирования. Последовательные нули сжимаются. (Lossless)
Энтропия / кодирование Хаффмана. (Lossless)
Повторное сжатие JPEG
Обратите внимание, что уменьшение частоты цветовых каналов и квантование являются единственными преднамеренными потерями . Оставив в стороне ошибку округления, все остальные шаги без потерь. После того как квантование произошло, изменение и повторение шага дает идентичные результаты. Другими словами, повторное квантование (с тем же DQT) без потерь .
В принципе, можно создать алгоритм повторной выборки, который будет без потерь после первого прохода. Однако, с реализацией в ImageMagick, цвета могут резко измениться, прежде чем будет достигнуто устойчивое состояние, как видно на этом изображении.
При оптимальных условиях повторное сжатие JPEG с теми же настройками качества приведет к точно такому же JPEG. Другими словами, повторное сжатие JPEG потенциально без потерь . На практике повторное сжатие JPEG не является без потерь, но подвержено и ограничено ошибкой округления. Хотя ошибки округления часто в конечном итоге сходятся к нулю , поэтому воссоздается точно такое же изображение, дополнительная выборка цветности может привести к значительным изменениям цвета.
Демонстрация (установка того же качества)
Я написал следующий
bash
скрипт, который использует ImageMagick для многократного повторного сжатия файла JPEG с заданной настройкой качества:После нескольких сотен итераций я запустил
md5sum
результаты:Мы видим, что действительно ошибка округления сведена к нулю, и одно и то же изображение воспроизводится снова и снова .
Я повторил это несколько раз с различными изображениями и настройками качества. Обычно, устойчивое состояние достигается, а точное же изображение воспроизводится снова и снова.
А как насчет результатов @ mattdm ?
Я попытался воспроизвести результаты mattdm, используя Imagemagick в Ubuntu 18.04. Первоначально это был необработанный перевод в TIFF в Rawtherapee, но, похоже, он больше не доступен. Вместо него я взял увеличенную версию и уменьшил ее до исходного размера (256х256). Затем я неоднократно сжимался до 75, пока не получил схождение. Вот результат (оригинал, 1, n, разница):
Мои результаты разные. Без подлинного оригинала причину разницы определить невозможно.
Что насчет монтажа @ ths ?
Я повторно сжал изображение от верхнего левого угла монтажа до схождения в 90. Это результат (оригинал, 1, n, разница):
После включения подвыборки цветности цвета меняются к моменту достижения устойчивого состояния.
Изменение среди небольшого количества настроек
Изменяя переменную
q2
, настройка качества может быть ограничена набором равномерно распределенных значений.Для небольшого числа настроек можно в конечном итоге достичь равновесия , что видно, когда значения md5 начинают повторяться. Кажется, чем больше набор, тем больше времени требуется, и тем хуже становится изображение, прежде чем может быть достигнуто равновесие.
Кажется, что в равновесии происходит то, что коэффициент DCT перед квантованием должен делиться на все (или большинство) квантовых значений. Например, если переключаться между двумя DQT, где коэффициент DCT делится попеременно на 3 и 5, равновесие будет достигаться, когда коэффициент DCT делится на 15. Это объясняет, почему падение качества намного больше, чем разница между исходными настройками.
Изменение среди большего количества настроек
ИА недоволен, когда
q2
меняется так:Чтобы сделать видео, используйте
ffmpeg
:Наблюдение за первыми 9999 итерациями почти похоже на наблюдение за водой. Может хотеть удвоить скорость воспроизведения. Вот ИА после 11999 итераций:
Что если границы MCU изменятся?
Если изменения происходят ограниченное количество раз, повторное сжатие может достичь устойчивого состояния. Если изменения происходят на каждой итерации, изображение, вероятно, будет ухудшаться таким же образом, как при изменении DQT.
Как насчет редактирования?
Эффект повторного сжатия после редактирования зависит от конкретного выполненного редактирования. Например, сохранение с той же настройкой качества после уменьшения артефактов JPEG приведет к повторному появлению тех же артефактов. Однако применение локализованного изменения, такого как целительная кисть, не затронет области, которые не были затронуты.
Наибольшее падение качества изображения происходит при первом сжатии файла с заданной настройкой качества. Впоследствии повторное сжатие с той же настройкой не должно приводить к каким-либо изменениям, превышающим ошибку округления. Таким образом, я ожидаю, что циклы редактирования-сохранения при заданном параметре качества будут выглядеть как любое другое изображение, сохраненное с тем же параметром качества (пока границы MCU остаются нетронутыми и субсэмплирование цветности отключено ).
А как насчет этих видео?
Неправильная реализация JPEG? ( Повторное сохранение 500 раз с Photoshop в 10/12. )
Изменение настроек качества. (Большинство видео.)
Нарушение границ MCU. (Обрезка или вращение )
Другие маневры, которые снижают качество изображения или мешают алгоритму JPEG?
Могу ли я перезаписать свои оригиналы повторно сжатыми JPEG-файлами?
Целесообразно хранить резервные копии всех исходных файлов, но если вы случайно перезаписаете один из них, ущерб, скорее всего, будет ограниченным. Также было бы хорошо работать в JPEG с отключенной подвыборкой цветности.
JPEG нельзя использовать для изображений, которые используют более 8 бит на цвет.
источник
Потеря при сжатии реальна, особенно при работе с более высокими уровнями сжатия JPEG.
Теоретически, если вы повторно сохраняете файлы JPEG с точно такими же параметрами и выравниваете кадрирование по 8 × 8 блокам, ухудшение должно быть минимальным. Однако, если вы используете высокий уровень сжатия, вы увидите дальнейшую потерю, потому что артефакты, возникающие при первоначальном сжатии, являются постоянными изменениями в изображении и тоже будут повторно сжаты, вызывая больше артефактов.
Если вы повторно сохраните файл с низким уровнем сжатия (высокое качество, например, «100» в Gimp или 11 или 12 в Photoshop), любые новые добавленные артефакты будет трудно заметить. Это не сделает изображение лучше , но не намного хуже. Тем не менее, это внесет изменения по всему изображению.
В качестве быстрого теста я использовал ImageMagick для повторного сжатия изображения JPEG снова и снова на 75%. Приведенные ниже примеры загружаются в виде файлов PNG, чтобы избежать дальнейшего повторного сжатия, и их размер удвоился при преобразовании в формат PNG, чтобы сделать эффект более очевидным. (Оригиналы, использованные в тесте, не были удвоены.) Оказывается, что после восьми повторных выборок эффект сходился к совершенно стабильному результату, где повторное сжатие приводит к получению бит-в-бит идентичного файла.
Вот несжатый оригинал:
Вот результат перехода на 75% JPEG:
И вот что решено:
Эта единичная секунда сохранения приводит к значительному ухудшению!
И вот окончательное конвергентное изображение (8 проход):
Опять же, цвета определенно еще более нестабильны, в том числе некоторые образцы ложных цветов, и блочные артефакты выпадают больше. Алгоритм сходится, но в значительно ухудшенной версии. Так что не делай этого.
Но вот то же самое с уровнем качества 99% после 9 проходов (точка, где он сходится, так что дальнейшие проходы идентичны):
Здесь разница едва регистрируется. (Я имею в виду буквально; сравнивайте их пиксель за пикселем с несжатой версией, и отклонение - это просто очень незначительный случайный шум.) Итак, что если я вернусь к этому первому 75% изображению, а затем сохраню его на 99%? Ну, это, (только после одного раза):
К моему удивлению, сохранение в высоком качестве определенно заметно лучше, чем сохранение с теми же параметрами. Но есть очевидная новая деградация вокруг розовой отделки и глаз. В переработанной версии с теми же настройками артефакты JPEG преувеличиваются с каждым повторным сжатием. С низким разрешением и низким качеством, которое я выбрал, это оказывается хуже, чем повторное сжатие по-другому.
На тех видео: я нашел это как главный хит Google. Обратите внимание, что в описании сказано:
Выделенный акцент - это объясняет, почему нет никакой конвергенции, потому что вместо сохранения с теми же настройками или сохранения с очень высоким качеством, случайные настройки используются каждый раз .
Второе видео , которое я нашел , говорит:
Итак, опять же, что-то было сделано, чтобы ошибки накапливались.
В любом случае, для практического редактирования фотографий стоит отметить, что экономия 75% за один раз намного хуже, чем экономия при 99% в миллион раз . В моем примере, артефакты на 75% настолько очевидны, что дальнейшая деградация подобна сбросу воды в океан. Если вы сохраняете на достаточно высоком уровне, чтобы эти артефакты не были видны, то сохранение снова с исходными настройками является хорошей стратегией. Конечно, если вы можете всегда работать с несжатыми оригиналами, вам лучше.
Если по какой-то причине вам нужно (или вы предпочитаете) просто работать с JPEG, настройте камеру на сохранение с максимально возможным качеством , даже если вы не заметите разницу в исходных файлах. См. Стоит ли использовать настройку качества Pentax Premium JPEG? более подробно об этом - не обязательно на самом деле специфично для Pentax.
источник
Повторное сжатие оказывает ощутимое влияние на качество изображения, и этот эффект гораздо более выражен при изменении степени сжатия.
В качестве быстрой проверки здесь приведены некоторые значения SSIM для операций, выполняемых с тестовым изображением, содержащим комбинацию линейных и непрерывных объектов. Я выбрал JPG95, потому что это то, чему меня учили использовать в школе Ad-photo, и JPG83, потому что это распространено среди поставщиков цифрового контента.
Таким образом, величина структурного сходства, потерянного при повторном сохранении при одном и том же сжатии в 10 раз, составляет 1/10 от потерянного при сохранении его с качеством от tiff. Однако потеря качества из-за изменения сжатия JPG даже один раз такая же, как и потеря качества при сохранении этого изображения из Tiff в JPG.
Я проведу этот тест еще несколькими способами и обновлю.
Методология : в ImageJ:
ПРИМЕЧАНИЕ. Многие люди, впервые смотрящие на значения SSIM, читают их в процентах и считают, что разница невелика. Это не обязательно правда. Значения SSIM следует сравнивать относительно друг друга, а не рассматривать как отклонение от 1.
источник
Ничего подобного экспериментам. Следующий скрипт bash (написанный на Linux, может работать на OSX, если у вас есть ImageMagick ):
step000.jpg
)Результат таков:
Конечно, все это предполагает, что JPEG сохраняется одним и тем же программным обеспечением с одинаковыми параметрами каждый раз.
Пока я не буду показывать результаты, я предпочитаю позволить вам экспериментировать с вашими собственными фотографиями. С достаточным количеством комментариев я добавлю образец.
источник