Эта история была написана Лаик Аслам, членом группы технического контента Educative.

Введение в цифровые изображения

В этом блоге обсуждаются цифровые изображения и некоторые методы сжатия для их эффективного представления. Мы можем создавать изображения графическими методами или захватывая естественное изображение, поэтому изображение может быть синтетическим или естественным. Естественное изображение, снятое с помощью камеры, может быть аналоговым или цифровым. Цифровое изображение — это дискретный сигнал, который можно представить в виде матрицы значений. Эти значения называются сэмплами, и разные камеры могут снимать разное количество сэмплов на единицу пространства. Изображения, снятые цифровыми камерами, называются растровыми изображениями, а значения, представляющие эти изображения, в совокупности называются пространственными данными.

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

Мотивация и преимущества сжатия

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

Допустим, мы хотим поделиться этим изображением с другом в WhatsApp. Сколько времени это займет? У нас есть интернет-соединение со скоростью загрузки 5 Мбит/с. Предполагая хорошее качество обслуживания, посчитаем необходимое время.

Увеличение скорости загрузки в два раза по-прежнему сохраняет время, необходимое для отправки изображения в минутах, что довольно много. Здесь очевидна необходимость сжатия, и оно может принести нам пользу тремя способами:

  • Это может сократить время общения.
  • Это может снизить стоимость связи.
  • Это может уменьшить необходимое пространство для хранения.

Давайте теперь посмотрим на типы сжатия изображений.

Типы сжатия

В основном существует два типа методов сжатия — без потерь и с потерями.

Сжатие без потерь

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

Сжатие с потерями

Методы сжатия изображений с потерями по существу теряют некоторую информацию с приемлемым компромиссом в отношении качества изображения. Важной частью таких методов является отделение частей информации, которые очень полезны или важны для представления изображения, от частей, которые менее полезны. Критическая часть информации зависит от контекста и использования изображения. Например, в селфи та часть информации, которая не важна для зрительной системы человека, не является критичной, а в рентгеновском снимке, который необходимо передать программе для анализа, маловажной информации нет. В приложении, в котором регистрируются номерные знаки транспортных средств, символы и цифры на номерном знаке имеют решающее значение. Метод сжатия изображений с потерями обычно состоит из двух этапов. Данные изображения преобразуются в частотную область на первом этапе. Целью этого преобразования является декорреляция данных изображения. Часть информации отбрасывается в качестве второго шага для получения компактного представления данных. На первом этапе используются дискретные косинусные преобразования, преобразования Уолша-Адамара или Карунена-Лоэва. На втором этапе выполняется какая-либо техника квантования. Этот двухэтапный процесс также называется кодированием преобразования.

Процесс сжатия цифрового изображения

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

Необходимость стандартизации

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

Стандарт JPEG получил широкое признание с момента его создания в 1992 году для естественных изображений, содержащих растровые данные. Это лучший выбор для цифровой фотографии. Аббревиатура JPEG расшифровывается как Joint Photographic Experts Group, команда, разработавшая этот стандарт. Эта группа состоит из двух подгрупп: одна из Международной организации по стандартизации (ISO) и одна из Сектора стандартизации электросвязи Международного союза электросвязи (МСЭ-Т).

Известные стандартные форматы изображений

Файлы изображений, сжатые с помощью JPEG, могут иметь расширение .jpg, .jpeg, .jfif или .pjpeg. В следующей таблице приведены основные сведения о различных типах файлов изображений.

В стандарте JPEG подвыборка цветности и кодирование с преобразованием выполняются с потерями, тогда как методы без потерь включают кодирование длин серий и энтропийное кодирование. В других стандартах, упомянутых в таблице, используется Lempel–Ziv–Welch (LZW), основанный на словаре метод кодирования без потерь, отдельно или в сочетании с методами энтропийного кодирования.

Стандартный кодек JPEG

Кодек JPEG также называют блочным кодированием изображения. Это связано с тем, что он делит изображение на блоки размером 8 × 8 пикселей после согласования размеров изображения, используя при необходимости заполнение нулями. Блочный подход делает отдельные методы сжатия более эффективными и обеспечивает локализацию ошибок. Если изображение цветное, цветовое пространство RGB преобразуется в пространство YCbCr с возможностью субдискретизации Cb и Cr. В формате YCbCr буква Y представляет компонент яркости или яркости, тогда как Cb и Cr представляют собой компоненты цветности, представляющие часть цвета. Каждая компонентная плоскость или канал кодируются отдельно, обрабатывая один блок 8×8 пикселей за раз. Общая блок-схема кодека JPEG показана ниже, чтобы дать абстрактное представление о его рабочем механизме:

На блок-схеме, показанной выше, каждый блок заслуживает отдельной записи в блоге, чтобы узнать все подробности о том, как каждый из них работает. Цель этого сообщения в блоге состояла в том, чтобы дать абстрактное глобальное представление. Чтобы начать программировать свой собственный кодек изображений на Python, вы можете начать со следующих практических проектов:

Удачного обучения!