Что такое артефакты jpeg и что с ними делать?

Я знаю, что JPEG - это алгоритм сжатия с потерями, который отбрасывает информацию для экономии места. Каков визуальный эффект этого? Я слышал об «артефактах JPEG». Как они выглядят?

Бывают ли ситуации, когда тот же уровень сжатия создает больше артефактов и выглядит хуже? Имеет ли вообще значение содержание изображения? С чем алгоритм справляется хорошо, а с чем у него возникают проблемы?

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

Некоторые ответы на части этого вопроса существуют здесь: photo.stackexchange.com/questions/5317/…
Спасибо @dpollit. Я не видел этого из-за британского правописания и отсутствия тегов. Кроме того, речь идет о низком разрешении и небольшом размере файла.
Я хотел бы увидеть в ответах примеры на уровне пикселей (или больше).
Я хотел бы направить вас к моему ответу по теме @dpollit, связанной ранее, в частности, к веб-сайту , связанному с ним, на котором есть целая загрузка образцов изображений со всех основных уровней «качества» с детализацией на уровне пикселей для различных типов. изображений.
Я заметил, что когда я сделал снимок луны и экспортировал файл в формат JPEG, файл был относительно небольшим, так как большая часть изображения была черной, экспонированной для луны. Сжатие в этом случае, кажется, работает лучше всего, поскольку оно способно эффективно отсеять всю другую черную избыточную информацию и не волноваться о луне.
@mattdm Я просто хотел бы отметить, что «с чем алгоритм справляется хорошо, а с чем у него проблемы?» не относится к каждому .jpeg. Различные камеры и программное обеспечение (например, преобразование RAW в .jpeg) обрабатывают его по-разному, поэтому разные камеры дают разные результаты. Таким образом, вы можете не получить окончательный ответ.
@BBking - я хотел бы увидеть ответ, в котором подробно об этом говорится, со ссылками.
+1 Потому что я тоже хотел бы знать. Просто, я думаю, трудно понять, что именно делает камера без исходного кода, поэтому без ссылок. Но, надеюсь, кто-то может ответить достаточно хорошо.
@BBking: здесь, однако, я не говорю о преобразовании RAW → JPEG в целом, а только об артефактах, вызванных сжатием. Поскольку это сжатие является стандартным, я не думаю, что здесь есть место для вариаций. (Кроме использования ISLOW, IFAST, или FLOATдля квантования.)
Конечно. Единственная причина, по которой я упомянул RAW, заключалась в том, что если у вас есть компьютерная программа, вы можете спроектировать процесс в обратном порядке. Кроме того, что касается сжатия изображений веб-сервисами, это скорее сжатие с изменением размера. Как только он достигает размера, скажем, 500 x 750 пикселей, нет реальной необходимости сжимать его до изображения с более низкими потерями, чтобы сэкономить пару килобайт. Хотя все еще актуальный вопрос. :-)
@mattdm Извините, я забыл спросить. Есть ли конкретный веб-сервис/сайт, который вы имели в виду, или просто в целом?
@BBking -- нет. Это своего рода дополнение к основному вопросу, потому что мне нужны были ответы, которые охватывают много вопросов.

Ответы (6)

Пример

Использование текущей фотографии изображения недели. Это высококачественный JPEG:

канитель Q=99

пересохранено в Gimp с качеством JPEG 80 (низкое); обратите внимание на общую потерю резкости, «точки» вокруг высококонтрастных краев, потерю детализации в низкоконтрастных областях:

канитель Q=80

и пересохранен в GIMP с качеством JPEG 30 (очень низкое); обратите внимание на очевидные блоки 8x8 и сильную потерю резкости и цветовой детализации:

канитель Q=30

Три вида искажений

JPEG имеет тенденцию вносить два-три вида искажений:

  • общая потеря резкости и осцилляции вокруг высококонтрастных краев: они связаны с аппроксимацией переходов интенсивности плавными функциями (косинусами); вы видите их как маленькие «точки» или «ореолы» по краям; их особенно легко увидеть на изображениях текста ручных рисунков.
  • блочная структура: изображение обрабатывается отдельно для каждого блока 8x8 (или больше в случае понижения цветности), края блоков становятся видимыми при высоких коэффициентах сжатия.
  • потеря цветовой детализации: зависит от сохранения параметров, программа может агрессивно «даунсемплировать» (уменьшать разрешение) каналов цветности; это редко является проблемой для естественной фотографии.

Видимая блочная структура и ореолы по краям обычно называются артефактами JPEG. Давайте увеличим наш пример, чтобы увидеть их лучше. Слева направо кадр из оригинала, изображения JPEG Q80 и JPEG Q30. Артефакты я отметил зеленым цветом (кружки для ореолов и точки для блоков 8x8):

трехстороннее сравнение

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

Стратегии хостинга

Если вы управляете параметрами сжатия JPEG и хотите максимизировать качество изображения:

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

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

  • выбрать сервис, который, как известно, предпочитает высококачественный JPEG (Flickr, SmugMug, 23hq, 500px), а не сервисы, которые, как известно, используют чрезмерное сжатие для экономии трафика (Picasa, Imgur, Dropbox); обычно вы получаете то, за что платите.
  • попробуйте изменить размер фотографий самостоятельно и загрузить нужный размер (некоторые сервисы все равно повторно сожмут его, некоторые могут использовать ваш файл как загруженный)

JPEG фактически использует два типа сжатия: с потерями и без потерь. Сжатие без потерь не вызывает артефактов, поэтому мы можем игнорировать эту часть. Особый тип сжатия с потерями в JPEG, называемый дискретным косинусным преобразованием для математиков, позволяет найти компромисс между степенью сжатия и точностью. Большинство программ представляет это как значение «качества», обычно по шкале от 0 до 100, где 100 фактически означает отсутствие потерь или очень небольшие потери, и оттуда все идет вниз.

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

Вот область 200 x 300 большой фотографии с пикселями, воспроизведенными в 2 раза, чтобы лучше видеть их. Это использовало сжатие JPEG «качество» 100:

Качество 80, уменьшение размера файла на 79%:

Качество 60, снижение на 86%:

Качество 40, уменьшение 90%:

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

Обратите внимание, что вам нужно искать артефакты на втором изображении, хотя почти 4/5 исходной информации было отброшено. Артефакты сжатия JPEG обычно наиболее заметны на острых краях и в медленно меняющихся плоских областях. Поскольку штриховой рисунок состоит из острых краев, сжатие JPEG для этого не подходит.

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

Артефакты, характерные для сжатия JPEG с потерями, — это «блочность» в медленно меняющихся плоских областях и «грязь» вокруг высококонтрастных краев. Например, см. нижнюю правую область на картинке выше. Это содержит фон не в фокусе, поэтому значения меняются медленно. Блочность вполне очевидна. В качестве примеров «грязи» посмотрите на левый рог козла. Эти два типа артефактов обычно являются убедительным признаком того, что было задействовано сжатие JPEG. Также ищите их на других изображениях выше, чтобы понять, как они выглядят, когда только начинают появляться, и какую степень сжатия вы можете выдержать в различных обстоятельствах.

Видимые потери возникают не из-за самого ДКП, а из-за квантования коэффициентов ДКП после преобразования.

Сжатие JPG выполняется блоками пикселей. На сильно сжатом JPG-изображении видны края этих блоков: в исходном изображении два пикселя могли быть очень близки по яркости и цвету, но если они находятся в разных блоках, то после сжатия и распаковки (при просмотре) каждый из них их значения могут отличаться от исходных, поэтому вы теряете это постепенное смешивание и начинаете видеть эту «блочность».

введите описание изображения здесь

Вот типичный пример в небе - JPG сохранен с качеством 0.

Если вы загружены на сайт, который использует сжатие JPG, вы можете получить лучшие результаты, выполнив две вещи (вам нужно будет поэкспериментировать с сайтом, чтобы увидеть, что работает):

  • измените размеры вашего изображения, чтобы они находились в пределах максимальной высоты/ширины, разрешенной сайтом, поэтому веб-сайт не изменяет размер ваших изображений для вас

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

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

шум как артефакты jpg

Вот пример с качеством JPG 50%, с блочностью, но также более темными и яркими пикселями, которые напоминают шум.

У Topaz Labs есть продукт под названием DeJpeg , который работает специально с артефактами JPG. С этой задачей он справляется хорошо, без потери деталей. Плагин также может выполнять некоторую резкость и общее шумоподавление. Плагин совместим с Photoshop CS, Photoshop Elements и Paint Shop Pro. Я не думаю, что это работает с Lightroom или Aperture.

Можете ли вы привести пример артефакта JPEG, похожего на шум сенсора?
Добавлено изображение темного неба, сохраненное с качеством JPG 50%.

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

JPEG работает путем преобразования изображения в [серию] представления [s] частотного пространства (где X и Y представляют горизонтальную и вертикальную частоты, а «яркость» представляет амплитуду частоты). Частоты ниже определенной амплитуды игнорируются, что уменьшает объем сохраняемых данных и обеспечивает сжатие.

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

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

Вот пример увеличенного jpeg:

введите описание изображения здесь

Изображение пользователя Википедии FelixH. Это изображение находится под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.

На этом изображении хорошо видны так называемые «артефакты» в синей области. Обратите внимание, что изображение разделено на блоки, а границы блоков не совпадают.

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

  • Самое очевидное: не используйте jpeg. Вы можете работать со своими изображениями, используя формат сжатия без потерь, такой как RAW, PNG или TIFF без потерь. Вы только переходите к jpeg на последнем шаге, когда хотите загрузить изображение в Интернет, по электронной почте и т. д.

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

  • Избегайте повторного сохранения jpeg снова и снова, так как каждое поколение ухудшает качество еще больше.

Даже RAW и PNG могут получить артефакты из-за квантования пикселей. Пока вы не меняете никаких значений, это всего лишь разовый эффект, и никаких дальнейших потерь из-за оцифровки не происходит. Однако, если вы изменяете значения на любом этапе, например, затемняете или осветляете сцену, смешиваете с другими значениями и т. д., то сдвиги значений могут привести к новым артефактам при следующем сохранении (даже без сжатия) из-за квантования (возможно, форма сжатия) для сохранения нового рассчитанного изображения. Чтобы свести к минимуму эти эффекты, используйте максимально возможное количество битов на каждом шаге и сохраните весь рабочий процесс.
@Skaperen: здесь вы путаете две разные вещи. Этот вопрос касается потери деталей из-за сжатия JPEG. То, что вы описываете, - это потеря деталей, вызванная определенными алгоритмами обработки изображений. То, что вы описываете, верно, но никак не связано с форматами изображений, поэтому утверждение, что RAW и PNG связаны с квантованием пикселей, неверно, эти форматы файлов не вызывают потери качества.
Кстати, это изображение также демонстрирует другую проблему: оно показывает ореол от нерезкой маски.

Артефакты — это нежелательные побочные эффекты обработки изображения. В данном случае они являются результатом сжатия данных алгоритмом JPEG.

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

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

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

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

Лучший подход к уменьшению артефактов:

  1. Всегда сохраняйте исходное изображение — не сохраняйте сжатый JPEG, а затем повторно открывайте его позже и сохраняйте заново. Крайний пример этого смотрите в Generation Loss , видео, показывающем изображение, повторно сжатое в 600 раз.
  2. Сохраняйте в максимально возможном качестве, учитывая любые ограничения по размеру файла.
  3. Избегайте использования сервисов, которые сильно повторно сжимают ваши изображения — при необходимости размещайте их в другом месте и ссылайтесь на них напрямую.

Для получения дополнительной информации см. http://photo.net/learn/jpeg/