JPEG сжатие — это наиболее известный формат уменьшения объёма графических файлов, используемый при сохранении фотографий и других изображений.
Введение
Графические изображения в формате JPEG получили сегодня самое широкое распространение. Этот формат позволяет получить отличное качество изображения при минимальном размере сохранённого файла. Сегодня возможно легко и просто переслать кому-нибудь фотографию, независимо от того, какую операционную систему применяет получатель. Но такая возможности ранее не было. В начале восьмидесятых годов прошлого века компьютеры уже были способны сохранять и воспроизводить различную графику, но единого доступного и совершенного метода это выполнять тогда ещё не было. При пересылке графических файлов изображений между компьютерами всегда были риски не увидеть ничего на компьютере-получателе.
Чтобы покончить с этой проблемой в 1986-м году был создан международный экспертный совет, в который вошли ведущие мировые специалисты, названый «Объединённая группа экспертов по фотографии» (Joint Photographic Experts Group – JPEG). Эта группа была основана совместно Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC), головные офисы которых находятся в Женеве (Швейцария). Специалисты этой группы выработали в 1992-м году стандартизацию методов, позволяющих сжимать цифровые изображения. JPEG с тех пор превратился в самый популярный метод кодирования, пересылки и сохранения графических файлов. Сегодня его применяют практически везде, от электронной почты и социальных сетей до насыщенных страниц популярных веб–сайтов.
Структура JPEG
В памяти компьютера все файлы хранятся в виде набора двоичных чисел. Как правило, они сгруппированы в комплекты по восемь двоичных разрядов, то есть в байты. При распаковке JPEG, операционная система должна выполнить декодирование этой информации, что позволит восстановить первоначальное изображение в формате перечня цветов, подлежащих показу. Возьмём для примера эту фотографию кота:
Рисунок 1. Фотография кота. Автор24 — интернет-биржа студенческих работ
И загрузим этот файл в обычный текстовый редактор. Там мы увидим просто комплекс разнообразных символьных знаков.
Рисунок 2. Окно текстового редактора. Автор24 — интернет-биржа студенческих работ
В качестве редактора здесь использован Notepad++, поскольку он не меняет формата файла и не испортит изображение. Любая двоичная информация представляет собой набор нулей и единиц, основных элементов, которые могут быть носителями данных разных типов. Компьютерные программы определяют эти типы данных по различным подсказкам, одной из которых, является расширение файла. И выше было использовано расширение для текстовых файлов, вместо расширения для изображений. Для понимания процесса декодирования графики необходимо понять первоначальную двоичную информацию. JPEG обладает тремя степенями сжатия изображения:
- Субдискретизация цветов.
- Дискретное косинусное формирование и дискретизация.
- Кодирование длин серий, дельта и Хаффмана.
Для иллюстрации степени сжатия изображения, следует заметить, что выложенное выше фото, состоит из 79819 числовых кодов. Это составляет примерно 79 килобайт. Если сохранять этот файл без сжатия, то, чтобы записать один пиксель изображения, необходимо три числа для красного, зелёного и синего элемента, которые дают суммарный цвет. Это будет 917700 числовых кодов или примерно 917 килобайт. То есть JPEG позволил сжать результирующий файл более чем в десять раз. Но фактически изображение возможно сжимать гораздо больше. Ниже представлены две картинки, причём фотография справа подверглась сжатию до 16 килобайт. Это уже сжатие исходного файла в пятьдесят семь раз.
Рисунок 3. Сжатые фотографии. Автор24 — интернет-биржа студенческих работ
При детальном осмотре можно заметить отличия в изображениях. Обе фотографии подверглись процедуре сжатия JPEG, но фото справа меньшего объёма и видно, что оно немного хуже, по качеству (заметны квадраты цветов в фоне). По этой причине JPEG представляет собой сжатие с потерями, то есть при сжатии происходит изменение изображения с потерей некоторых деталей.
Цветовая субдискретизация
На этом этапе выполняется переход в другие цветовые гаммы, где выполнено подразделение на компоненту яркости и собственно цвета. Потери качества на этом этапе нет, поскольку пиксели так же кодируются тремя элементами. Но теперь это яркость и два цветных кода. Если говорить проще, то выполнено подразделение на чёрно – белое изображение и маску цветов к нему.
Следует заметить, что если удалить одно число из файла выше, то это разрушит цветовую гамму, но при удалении ровно шести чисел качество ухудшится незначительно. То есть числа в фале изображения JPEG практически являются списком цветов, где байт кодирует один пиксель, но занимаемый объём уменьшен в два раза. Числа уже не кодируют стандартные цветовые элементы, а именно красный, зелёный и синий, и если поставить там нули, то получится зелёный цвет, а не белый. Это происходит потому, что эти байты кодируют яркость (Y). Большинство современных дисплеев использует трёхцветную систему (RGB). То есть красный, зелёный и голубой цвета, и белый цвет получается при полной яркости всех трёх составляющих, а чёрный — при отключении их яркости. А глаз человека гораздо более чувствителен к изменению яркости, нежели цвета. То есть при отделении цвета от яркости, появляется возможность сжать немного цветовую составляющую без заметной потери качества с точки зрения его человеческого восприятия.
Дискретное косинусное преобразование
Этот этап сжатия является основным в JPEG. После разделения кода файла на яркостную и две цветовых составляющих, эти элементы подвергаются сжатию по отдельности. На этом этапе требуется определить примерное число компонентов в каждом участке изображения. К примеру, одноцветный участок неба возможно кодировать минимальным количеством байтов, а какая-нибудь расчудесная женская причёска может давать огромное количество градаций цвета и яркости. Этот анализ и выполняет дискретное косинусное преобразование. Оно является одной из разновидностей преобразования Фурье, которое кроме этого применяется и в mp3.