Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

JPG

JFIF (Jpeg Формат Взаимозаменяемого Файла) файл

JPEG стандарт (что в файле itu-1150.ps) как-нибудь очень обобщенный, JFIF реализация является конкретным случаем этого стандарта (и он является, конечно, совместимым со стандартом). JPEG стандарт определяет некоторые маркеры, зарезервированные для приложений (под приложениями я подразумеваю конкретные случаи осуществления стандарта) Эти маркеры названы APPn, где n изменяется от 0 до 0xF; APPn = FFEn. JFIF спецификация использует маркер APP0 (FFE0), чтобы идентифицировать файл JPG, который использует эту спецификацию. Вы увидите в JPEG стандарте, что он имеет отношение к "компонентам образа". Эти компоненты образа могут быть (Y,Cb,Cr) или (YIQ) или все, что угодно. JFIF реализации использует только (Y,Cb,Cr) для цветного JPG, или только Y для монохромного JPG.

Показатели (факторы) дискретизации

Примечание: следующее объяснение раскрывает кодировку цветных (3 компонента) JPG-файлов; для черно-белых JPG-файлов есть один компонент (Y), который - обычно никак необработанный совсем, и не требует любого обратного преобразования подобно инверсии (Y,Cb,Cr) -> (R,G,B). Впоследствии, черно-белые JPG-файлы - самые простейшие для декодирования: для каждого блока 8x8 в изображении Вы делаете декодирование Хаффмана кодированного вектора RLC, который затем Вы преобразовываете из зигзага, деквантуете 64 вектор и, наконец, Вы применяете к нему обратное DCT и прибавляете 128 (сдвиг уровня) к новым величинам 8x8.

Я сообщил Вам, что компоненты изображения обработаны. Обычно Y взято для каждый пикселя, и Cb, Cr взяты для блока пикселей 2x2. Но есть некоторые JPG-файлы, в которых Cb, Cr взяты для каждого пикселя, или некоторые JPG-файлы где Cb, Cr взяты для каждых 2 пикселей (горизонтальная дискретизация на 2 пикселях, и вертикальная дискретизация на каждом пикселе) Показатели дискретизации для компонента образа в файле JPG определяются в отношении (относительном) в самом высшем показателе дискретизации.

Вот показатели дискретизации для наиболее обычного примера: Y взято на каждый пиксель, и Cb, Cr взяты для блока пикселей 2x2 (JFIF спецификация дает формулу для показателей дискретизации, которая я думаю, что работает только когда максимальный показатель дискретизации для каждого измерения X или Y <=2) JPEG стандарт не определяет показатели дискретизации.

Вы видите, что Y будет иметь самую высшую частоту дискретизации:

	          Горизонтальный показатель дискретизации = 2 = HY
	          Вертикальный показатель дискретизации   = 2 = VY
	Для Cb,   Горизонтальный показатель дискретизации = 1 = HCb
	          Вертикальный показатель дискретизации   = 1 = VCb
	Для Cr,   Горизонтальный показатель дискретизации = 1 = HCr
	          Вертикальный показатель дискретизации   = 1 = VCr

Действительно эта форма определения показателей дискретизации вполне полезна. Вектор 64 коэффициентов для компонента изображения, кодированных Хаффманом, назван

DU = Единица Данных (стандартная терминология JPEG)

В файле JPG, порядок кодировки Единиц Данных:

	1) закодируйте Единицу Данных для первого компонента изображения:
	   для (счетчик_y=1; счетчик_y<=VY; счетчик_y++)
	     для (счетчик_x=1; счетчик_x<=HY; счетчик_x++)
	       { кодировать Единицу Данных для Y }
	2) закодируйте Единицу Данных для второго компонента изображения:
	   для (счетчик_y=1; счетчик_y<=VCb ; счетчик_y++)
	     для (счетчик_x=1; счетчик_x<=HCb; счетчик_x++)
	       { кодировать Единицу Данных для Cb }
	3) наконец, для третьего компонента, аналогично:
	   для (счетчик_y=1; счетчик_y<=VCr; счетчик_y++)
	     для (счетчик_x=1; счетчик_x<=HCr; счетчик_x++)
	       { кодировать Единицу Данных для Cr }

Для примера я дал Вам (HY=2, VY=2; HCb=VCb =1, HCr, VCr=1)

здесь это – цифра:

	YDU YDU   CbDU   CrDU
	YDU YDU

(YDU - Единица Данных (DU) для Y, и аналогично CbDU DU для Cb, CrDU = DU для Cr) Эта обычная комбинация показателей дискретизации обозначается 2:1:1 как для вертикальных, так и для горизонтальных показателей дискретизации.

И, конечно, в файле JPG порядок кодирования будет:

YDU,YDU,YDU,YDU,CbDU,CrDU

Вы знаете, что DU (64 коэффициента) определяют блоквеличин 8x8, таким образом, здесь мы определили кодирующий порядок для блока пикселей изображения 16x16 (Пиксель изображения (Y,Cb,Cr)): Четыре блока 8x8 величин Y (4 YDUs), один блок 8x8 величин Cb (1 CbDU) и один блок 8x8 величин Cr (1 CrDU)

(Hmax = Максимальный горизонтальный показатель дискретизации, Vmax = максимальный вертикальный показатель дискретизации) Впоследствии для этого примера показателей дискретизации (Hmax = 2, Vmax=2), шифратор должен обрабатывать ОТДЕЛЬНО каждый 16x16 = блок пикселей образа (Hmax*8 x Vmax*8) в упомянутом порядке.

Этот блок пикселей изображения размерами (Hmax*8,Vmax*8) называется, в стандартной терминологии JPG, MCU = Минимальная Кодированная Единица.

Для предшествующего примера: MCU = YDU,YDU,YDU,YDU,CbDU,CrDU

Другой пример показателей дискретизации:

      HY =1, VY =1
      HCb=1, VCb=1
      HCr=1, VCr=1
Цифра/порядок: YDU CbDU CrDU

Вы видите, что здесь определены пиксель образа блока 8x8 (MCU) с 3 8x8 блоками:

один для Y, один для Cb и один для Cr (Совсем нет обработки)

Здесь (Hmax=1, Vmax=1) MCU имеет измерение (8,8), и MCU = YDU,CbDU,CrDU

In the JPG file, the sampling factors for every image component are defined after the marker SOF0 = Start Of Frame 0 = FFC0

Для черно-белых JPG-файлов Вы не должны побеспокоиться о порядке кодировки единиц данных в MCU. Для этих JPG, MCU = 1 Единица Данных (MCU = YDU)

В файле JPG, показатели дискретизации для каждого компонента образа определены после маркера SOF0 = Начало Кадра 0 = FFC0

Краткая схема декодирования файла JPG

Дешифратор читает из файла JPG показатели дискретизации, он обнаруживает размеры MCU (Hmax*8,Vmax*8) => сколько MCU - в целом изображении, затем декодирует каждую MCU, присутствующую в исходном изображении (цикл для всех этих блоков, или пока не обнаружится маркер EOI [это должно обнаружиться, когда кончится цикл, в противном случае Вы получите неполное изображение]) - он декодирует MCU, декодируя каждую Единицу Данных в MCU в порядке упомянутом перед этим, и наконец, пишет расшифрованный цветной блок пикселей (Hmax*8 x Vmax*8) в (R,G,B) буфер изображения.

Видео MPEG-1 и JPEG

Интересная часть спецификации MPEG-1 (и вероятно MPEG-2) - то, что она полагается сильно на JPEG спецификацию. Он использует много понятий, представленных здесь. Причина в том, что каждые 15 кадров, или, когда это нужно, есть независимый кадр названный I-кадр (Интра фрейм), который JPEG закодирован. (Между прочим, блок 16x16 пикселей изображения в примере, который я Вам дал, называется, в стандартной терминологии MPEG, макроблок) За исключением алгоритмов для компенсации движения, видео MPEG-1 положились во многом на спецификацию JPG (DCT-преобразование, квантование, и т.п.)

Надеюсь, Вы готовы теперь начать программирование вашего просмотрщика JPG или шифратора.

Об авторе этого документа

Автором этого документа является Cristi Cuturicu, студент Политехнического Университета в Бухаресте (UPB), Отделе Информатики. Вы можете связаться с ним по электронной почте: cccrx@kermit.cs.pub.ro; cryx@ulise.cs.pub.ro

И если Вы – компания по программированию, требующая программиста, тогда свяжитесь.

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

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог