суббота, 9 июня 2012 г.

Ребятам о форматах: Формат JPEG - друг фотографа и интернета


JPEG является очень изощренным методом сжатия изображений с потерей и без потери информации. Он применим как к цветным, так и к полутоновым изображениям (но не к мультфильмам и анимациям). 
формат jpegЭтот алгоритм не очень хорошо сжимает двухцветные черно-белые образы, но он прекрасно обрабатывает изображения с непрерывными тонами, в которых близкие пикселы обычно имеют схожие цвета. Важным достоинством метода JPEG является большое количество настраиваемых параметров, которые пользователь может выбирать по своему усмотрению, в частности, он может регулировать процент теряемой информации, а, значит, и коэффициент сжатия, в широком диапазоне. Обычно глаз не в состоянии заметить какого-либо ущерба даже при сжатии этим методом в 10 или 20 раз. Имеется два основных режима сжатия: с потерей и без потерь информации (которая не слишком эффективна и обычно дает фактор сжатия около 2). 

Большинство приложений прежде всего используют режим с потерей данных, поскольку JPEG является прежде всего методом сжатия и его нельзя рассматривать в качестве полноценного стандарта представления изображений. Поэтому в нем не задаются такие специфические параметры изображения как геометрический размер пиксела, пространство цветов или чередование битовых строк. JPEG был разработан как метод сжатия непрерывно-тоновых образов. Основные цели метода JPEG состоят в следующем:
1.     Высокий коэффициент сжатия, особенно для изображений, качество которых расценивается как хорошее или отличное.
2.     Большое число параметров, позволяющих искушенному пользователю экспериментировать с настройками метода и добиваться необходимого баланса сжатие/качество.
3.     Хорошие результаты для любых типов непрерывно-тоновых изображений независимо от их разрешения, пространства цветов, размера пикселов или других свойств.
4.     Достаточно изощренный метод сжатия, но не слишком сложный, позволяющий создавать соответствующие устройства и писать программы реализации метода для компьютеров большинства платформ.
5.     Несколько режимов сжатия: 
(а)Последовательный режим: все цветные компоненты сжимаются в виде простого сканирования слева неправо и сверху вниз;  
(b)Прогрессирующий режим: изображение сжимается в виде нескольких блоков (называемых «сканами»), позволяющими делать декомпрессию и видеть сначала более четкие детали изображения; 
(с)Режим без потерь информации (нужная на случай, если пользователь желает сохранить пикселы без изменений; при этом приходится расплачиваться низкой степенью сжатия);
(d) Иерархический режим, когда изображение сжимается со множеством разрешений, позволяющая создавать блоки низкого разрешения, которые можно наблюдать перед блоками высокого разрешения.
формат jpeg
Схема работы алгоритма сжатия JPEG
Сокращение JPEG произведено от Joint Photographic Experts Group (объединенная группа по фотографии). Проект JPEG был инициирован совместно комитетом CCITT и ISO (the  International Standard Organization, международная организация по стандартам).
Он начался в июне 1987 года, а первый черновой алгоритм JPEG был разработан в 1991 году. Стандарт JPEG доказал свою эффективность и стал широко применяться для сжатия изображений.
Основные шаги сжатия метода JPEG состоят в следующем.
1.     Цветное изображение преобразуется из RGB в представление светимость/цветность (для полутоновых черно-белых изображений этот шаг опускается). Глаз чувствителен к малым изменениям яркости пикселов, но не цветности, поэтому из компоненты цветности можно удалить значительную долю информации для достижения высокого сжатия без заметного визуального ухудшения качества образа. Этот шаг не является обязательным, но он очень важен, так как остальная часть алгоритма будет независимо работать с каждым цветным компонентом. Главной международной организацией, занимающейся проблемами света и цвета, является Международный Комитет по Освещению (Commission Internationale de I'Eclairage, CIE). Эта организация отвечает за развитие стандартов и употребление терминов в этой области. Было показано, что для правильного отображения цвета достаточно трех компонент. Выражение некоторого цвета в виде триплета [x^y^z] похоже на обозначение точки в трехмерном пространстве, которое по аналогии называется цветовым пространством. Наиболее известным цветовым пространством является пространство RGB, в котором тремя параметрами являются интенсивности красного, синего и зеленого в данном цвете. Наш глаз очень чувствителен к малым изменениям светимости, поэтому удобно иметь цветовое пространство, в котором число Y (значение светимости) является одним из трех компонентов. Простейший способ такого построения - это вычесть компоненту Y из красной и синей компонент RGB и использовать новое цветовое пространство Y, Cb = В - Y и   Сr = R — Y. Последние две компоненты называются хроматическими (от греческого chroma - цвет, краска). Они выражают цвет в терминах присутствия или отсутствия синего (Сb) и красного (Cr) при данном значении светимости. 
2.     Цветное изображение разбивается на крупные пикселы (этот шаг делается, если необходимо иерархическое сжатие; он всегда опускается для полутоновых изображений). 
формат jpeg
Порядок передачи оцифрованных параметров
изображения в рамках стандарта JPEG
 
 Эта операция не делается для компонентов яркости. Укрупнение пикселов делается или в соотношении 2:1 по горизонтали и вертикали (так называемое укрупнение 2h2v или «4:1:1» ) или в пропорциях 2:1 по горизонтали и 1:1 по вертикали (укрупнение 2hlv или «4:2:2» ). Компонента светимости не затрагивается, поэтому не происходит заметной потери качества изображения.
3.     Пикселы каждой цветной компоненты собираются в блоки 8 x 8 , которые называются единицами данных. Если число строк или столбцов изображения не кратно 8, то самая нижняя строка и самый правый столбец повторяются нужное число раз. Если мода с чередованием выключена, то кодер сначала работает со всеми единицами данных первой цветной компоненты, затем второй компоненты, а потом третьей компоненты. Если мода с чередованием включены, то кодер обрабатывает три самых верхних левых единицы данных трех компонентов, затем три единицы данных справа от них и так далее.
4.     Затем применяется дискретноекосинус-преобразование (ДКП) к каждой единице данных, в результате чего получаются блоки 8 x 8 частот единиц данных. 
5.     Каждая из 64 компонент частот единиц данных делится на специальное число, называемое коэффициентами квантования (QC), которая округляется до целого.
Здесь информация невосполнимо теряется. На этом шаге происходит отбрасывание части информации (небольшие потери происходят и на предыдущем шаге из-за конечной точности вычислений на компьютере). Стандарт JPEG допускает использование четырех таблиц квантования, и пользователь может выбрать любую из этих таблиц для квантования компонентов цвета. Все 64 числа из таблицы квантования являются параметрами JPEG. В принципе, пользователь может поменять любой коэффициент для достижения большей степени сжатия. На практике весьма сложно экспериментировать с таким большим числом параметров, поэтому программное обеспечение JPEG использует два подхода:
·        Таблица квантования, принятая по умолчанию. Две такие таблицы, одна для компоненты светимости (и для градации серого цвета), а другая - для хроматических компонент, являются результатом продолжительного исследования со множеством экспериментов, проделанных комитетом JPEG.
·        Вычисляется простая таблица коэффициентов квантования, зависящая от параметра R, который задается пользователем.
Простые выражения типа Qij = 1 + (i + j) x R гарантируют убывание коэффициентов из левого верхнего угла в правый нижний.
Если квантование сделано правильно, то в блоке коэффициентов DСT останется всего несколько ненулевых коэффициентов, которые будут сконцентрированы в левом верхнем углу матрицы. Эти числа являются выходом алгоритма JPEG, но их следует еще сжать перед записью в выходной файл.
6.     Все 64 квантованных частотных коэффициента (теперь это целые числа) каждой единицы данных кодируются с помощью комбинации RLE и метода Хаффмана. Первое из этих чисел (коэффициент DC) обрабатывается отдельно от других чисел. Вместо кодирования Хаффмана может также применяться вариант арифметического кодирования, известный как кодер QM.
7.     На последнем шаге добавляется заголовок из использованных параметров JPEG и результат выводится в сжатый файл. JPEG создает сжатый файл, в котором находятся все параметры, маркеры и, конечно, сжатые единицы данных изображения. Параметры состоят из слов длины 4 бита (объединяемых в пары), из одного байта или из двух байт. Маркеры необходимы для разделения файла на части. Маркеры имеют длину 2 байта. Первый байт равен 'FF', а второй - не ноль и не 'FF'. Перед маркером может стоять несколько байтов с 'FF'. Далее в таблице перечислены все маркеры JPEG (первые четыре группы состоят из маркеров начала кадра).

Значение
Имя
Описание
Недифференциальное, кодирование Хаффмана
FFCO
SOF0
Базелина DCT
FFC1
SOF1
Расширенное последовательное DCT
FFC2
SOF2
Прогрессирующее DCT
FFC3
SOF3
Без потери (последовательное)
Дифференциальное кодироваие Хаффмана
FFCO
SOF5
Дифференциальное последовательное DCT
FFCO
SOF6
Дифференциальное прогрессирующее DCT
FFCO
SOF7
Дифференциальное без потери (последовательное)
Недифференциальное, арифметическое кодирование
FFCO
JPG
Зарезервировано для расширения
FFCO
SOF9
Расширенное последовательное DCT
FFCO
SOF10
Прогрессирующее DCT
FFCO
SOF11
Без потери (последовательное)
Дифференциальное, арифметическое кодирование
FFCO
SOF13
Дифференциальное последовательное DCT
FFCO
SOF14
Дифференциальное прогрессирующее DCT
FFCO
SOF15
Дифференциальное без потери (последовательное)
Таблицы для метода Хаффмана
FFCO
DHT
Задание таблиц для метода Хаффмана
Спецификации для арифметического кодирования
FFСС
DAC
Задание условий арифм. кодирования
Начало нового интервала
FFCO
RSTm
Рестарт по модулю 8 счетчика m
Другие маркеры
FFD8
SOI
Начало образа
FFD9
EOI
Конец образа
FFDA
SOS
Начало скана
FFDB
DQT
Задание таблиц квантования
FFDC
DNL
Задание числа строк
FFDD
DRI
Задание интервала рестарта
FFDE
DHP
Задание иерархической прогрессии
FFDF
EXP
Расширенная компонента ссьыки
FFE0-FFEF
APPn
Зарезервировано для сегментов приложений
FFF0-FFFD
JPGn
Зарезервировано для расширения JPEG
FFFE
COM
Комментарий
Зарезервированные маркеры
FF01
TEM
Для временного использования
FF02-FFBF
RES
Зарезервированы



Декодер JPEG совершает обратные действия.

Комментариев нет:

Отправить комментарий