Сжатие данных, звука и изображений
.pdfГлава 3. Сэюатие изобраэюений
буются таблицы 3.53 и 3.54. Он приспосабливает схему кодирова ния к статистическим свойствам конкретного изображения по мере его обработки. С помощью арифметического кодирования можно улучшить показатели компрессии метода Хаффмана на 5-10% для типичного непрерывно-тонового изображения. Однако этот метод имеет весьма сложную реализацию по сравнением с методом Хаф фмана, поэтому он редко используется в приложениях.
3.7,6. Мода без потери данных
В этой моде метод JPEG использует комбинации разностей пиксе лов }\ля уменьшения их значений перед тем, как они будут сжаты. Эти разности называются прогнозами. Величины некоторых близ ких пикселов вычитаются из данного пиксела для получения малого числа, которое будет сжиматься по методу Хаффмана или с помо- щъю арифметического кодирования. На рис. 3.57а показан некото рый пиксел X и три соседних пиксела А, В и С. На рис. 3.57Ь даны восемь возможных линейных комбинаций (прогнозов) пиксела и его соседей. В моде без потерь пользователь может самостоятельно вы брать подходяш;ий прогноз, а декодер вычтет эту комбинацию из пиксела X. Результатом, как правило, является малое число, для ко торого будет производиться энтропийное кодирование, очень близ кое методу, использованному при кодировании коэффициентов DC в ^ 3.7.5.
|
|
Порядковый номер |
Прогноз |
|
|
0 |
нет прогноза |
|
|
1 |
А |
С |
В |
2 |
В |
3 |
С |
||
А |
X |
4 |
А+В-С |
|
|
5 |
А+(В-С)/2 |
|
|
6 |
В+(А-С)/2 |
|
|
7 |
(А+В)/2 |
|
(а) |
|
(Ь) |
Табл. 3.57. Предсказание пикселов в моде без потерь.
Прогноз О используется только в иерархической моде JPEG. Про гнозы 1, 2 и 3 называются «одномерными», а прогнозы 4, 5, 6 и 7 - «двумерными».
Следует отметить, что мода без потерь не может быть очень эф фективной. Ее фактор сжатия обычно находится около 2, и в этом
S.l. JPEG
OH значительно проигрывает другим методам сжатия изображений без потерь. По этой причине, многие популярные приложения, в ко торые встроен JPEG, не предусматривают возможность этой моды. Даже базелинная мода JPEG, если в ней задать в виде параметра ми нимальную потерю информации, работает недостаточно эффектив но. В результате основные приложения не позволяют устанавливать этот параметр в минимальное значение. Достоинство метода JPEG прежде всего заключается в произведении сильно сжатых изобра жений, которые практически невозможно отличить от оригинала. Поняв это, ISO решило выпустить другой стандарт для сжатия без потерь непрерывно-тоновых изображений. Это хорошо известный метод JPEG-LS, который будет описан в § 3.8.
|
|
Сжатый образ |
|
|
|
|
|
S({)I |
I Кадр I Е01 |
|
|
|
|
Кадр |
|
|
|
[Табл.] |
Заголовок |
Скан! |
DNL сегмент |
[Скан2] |
fCKanN] |
|
|
|
Скан |
|
|
[Табл.] |
Заголовок |
ECSO |
[RS[rO] |
ECS(M-n[RSTdM-l)] ECSM |
|
|
|
СегментО |
|
СегментМ |
|
|
мси мои —мои |
|
мои мси —мои |
Рис. 3.58. Формат файла JPEG.
3.7.7.Союатый файл
JPEG создает сжатый файл, в котором находятся все параметры, маркеры и, конечно, сжатые единицы данных изображения. Пара метры состоят из слов длины 4 бита (объединяемых в пары), из одного байта или из двух байт. Маркеры необходимы для разделе ния файла на части. Маркеры имеют длину 2 байта. Первый байт равен 'FF'X, а второй - не ноль и не 'FF'X. Перед маркером может стоять несколько байтов с 'FF'X.
В табл. 3.59 перечислены все маркеры JPEG (первые четыре группы состоят из маркеров начала кадра). Сжатые единицы дан ных комбинируются в минимальные единицы данных (MCU, mini-
Глава 3. Сжатие изображений
mal data unit), где MCU состоит или из одной единицы (мода без чередования) или из трех единиц данных всех цветных компонент (мода с чередованием).
На рис. 3.58 показаны все основные части выходного файла, сжа того по методу JPEG (части, заключенные в квадратные скобки, могут отсутствовать). Файл начинается с маркера SOI и кончается маркером EOI. Между этими маркерами сжатый образ делится на кадры. В иерархической моде может быть несколько кадров, а во всех других модах имеется только один кадр. В каждом кадре ин формация об изображении хранится в одном или нескольких сканах; у кадра также имеется заголовок, перед которым могут находиться таблицы (которые, в свою очередь, могут иметь маркеры). За пер вым сканом может следовать сегмент DNL (define number of lines, определение числа строк), который начинается маркером DNL. В нем записано число строк сжатого образа, содержащегося в кадре. Скан начинается с таблицы (которая может отсутствовать), за ко торой идет заголовок скана, после которого размещается несколько сегментов энтропийного кода (ECS, entropy-coded segment), кото рые разделяются маркерами рестарта RST (restart). Каждый ECS состоит из одного или нескольких МСи, где MCU - это или одна единица данных, или три такие единицы.
3.7.8.JFIF
Как уже отмечалось, JPEG является методом сжатия графических данных, а не графическим форматом. Поэтому в нем не опреде ляются такие специфические параметры изображения, как геомет рический размер пиксела, световое пространство или чередование битовых строк. Все это делается в формате JFIF.
JFIF (Jpeg File Interchange Format, формат обмена файлами стан дарта JPEG) является графическим форматом данных, который обеспечивает обмен сжатыми файлами JPEG между компьютера ми. Основные особенности этого формата заключаются в использо вании цветового пространства YCbCr из трех цветовых компонент цветных изображений (или одна компонента для полутоновых изо бражений), а также использование маркера для обозначения пара метров, отсутствующих в стандарте JPEG, а именно, разрешение изображения, геометрический размер пиксела и некоторые другие параметры, специфические для конкретных приложений.
Маркер JFIF (называемый еще АРРО) начинается строкой сим волов JFIF(NUL). Затем записаны информация о пикселах и другие
|
|
|
3.7. JPEG |
|
|
Значение |
Имя |
Описание |
|
|
Недифференциальное, кодирование Хаффмана |
|
||
|
FFCO |
SOFo |
Вазелина DCT |
1 |
|
FFC1 |
SOFi |
Расширенное последовательное DCT |
|
|
FFC2 |
SOF2 |
Прогрессирующее DCT |
|
|
FFC3 |
SOF3 |
Без потери (последовательное) |
| |
|
|
Д ифферен циальное, кодирование Хаффмана |
|
|
|
FFC5 |
SOFs |
Дифференциальное последовательное DCT |
1 |
|
FFC6 |
SOFe |
Дифференциальное прогрессирующее DCT |
|
|
FFC7 |
SOF7 |
Дифференциальное без потери (последов.) |
| |
|
Недифференциальное арифметическое кодирование |
|
||
|
FFC8 |
J P G |
Зарезервировано для расширения |
1 |
|
FFC9 |
SOF9 |
Расширенное последовательное DCT |
|
|
FFCA |
SOFio |
Прогрессирующее DCT |
|
1 |
FFCB |
SOFii |
Без потери (последов.) |
| |
Диф |
|
|
||
|
|
ференци*шьное, арифметическое кодирование |
|
|
|
FFCD |
SOFis |
Дифференциальное последовательное DCT |
| |
|
FFCE |
SOF14 |
Дифференциальное прогрессирующее DCT |
|
|
F F C F |
SOF15 |
Дифференциальное без потери (последов.) |
| |
|
|
Таблицы для метода Хаффмана |
|
|
|
FFC4 |
DHT |
Задание таблиц для метода Хаффмана |
| |
|
Cneiщфикаци и для арифметического кодирования |
|
||
|
FFCC |
DAC |
Задание условий арифм. кодирования |
| |
|
|
|
Начало нового интервала |
|
|
FFD0-FFD7 |
RSTm |
Рестарт по модулю 8 счетчика т |
\ |
|
|
|
Другие маркеры |
|
|
FFD8 |
SOI |
Начало образа |
1 |
|
FFD9 |
EOI |
Конец образа |
|
|
FFDA |
SOS |
Начало скана |
|
|
FFDB |
D Q T |
Задание таблиц квантования |
|
|
FFDC |
DNL |
Задание числа строк |
|
|
FFDD |
DRI |
Задание интервала рестарта |
|
|
F F D E |
DHP |
Задание иерархической прогрессии |
|
|
F F D F |
EXP |
Расширенная компонента ссьыки |
|
|
FFEO-FFEF |
APPn |
Зарезервировано для сегментов приложений |
|
|
FFFO-FFFD |
JPGn |
Зарезервировано для расширения J P E G |
|
|
F F F E |
COM |
Комментарий |
| |
|
|
3aiрезервированные маркеры |
|
|
|
FFOl |
ТЕМ |
Для временного использования |
1 |
1 FF02-FFBF |
RES |
Зарезервированы |
| |
Табл. 3.59. Маркеры JPEG.
Глава 3. Cofcamue изобраэюений
спецификации. Далее могут следовать дополнительные сегменты, описывающие расширения JFIF, в которых записывается платформенно ориентированная информация об изображении.
Каждое расширение начинается строкой JFXX(NUL). Далее следу ет 1 байт, идентифицирующий конкретное расширение. Расширение может содержать данные, используемые конкретными приложени ями. Тогда они могут начинаться другими строками или специаль ными идентифицирующими маркерами, отличными от JFIF и JFXX.
Формат первого сегмента маркера АРРО состоит из следующих полей:
1.Маркер АРРО (4 байта): FFD8FFE0.
2.Длина (2 байта): общая длина маркера, включая 2 байта поля «длина», но исключая сам маркер АРРО (поле 1).
3.Идентификатор (5 байтов): 4A46494600i6. Это строка JFIF(NUL), идентифицирующая маркер АРРО.
4.Версия (2 байта). Пример: 0102x6 обозначает версию 1.02.
5.Единица измерения (1 байт) плотности по координатам X и Y. Число О означает отсутствие этой единицы, поля Xdensity и Ydensity обозначают геометрический размер пиксела. Число 1 обозначает, что величины Xdensity и Ydensity измеряются в точках на дюйм, а
2- в точках на сантиметр.
6.Xdensity (2 байта), Ydensity (2 байта): плотность пикселов по го ризонтали и по вертикали (обе должны быть ненулевые).
7.Xthumbnail (1 байт), Ythumbnail (1 байт): Размер крохотного пик села по горизонтали и вертикали.
8.(RGB)n (Зп байт) упакованные (24-битовые) величины RGB рас краски крохотного пиксела, п =Xthumbnailx Ythumbnail.
Синтаксис сегмента расширения маркера АРРО имеет следую щий вид.
1.Маркер АРРО.
2.Длина (2 байта): общая длина маркера, включая 2 байта поля «длина» , но исключая сам маркер АРРО (поле 1).
3.Идентификатор (5 байтов): 4A46585800i6. Это строка JFXX(NUL), идентифицирующая расширение.
4.Код расширения (1 байт): lOie означает, что пиксел закодирован JPEG, 1116 - размер пиксел 1 байт/пиксел (монохроматический), 13i6 ~ размер пиксел 3 байт/пиксел (цветной).
5.Данные расширения (переменные): это поле зависит от конкрет ного приложения.
3.8. JPEG-LS
3.8. JPEG-LS
Метод сжатия JPEG-LS использует коды Голомба, поэтому мы да дим краткое описание этих мало известных кодов.
3.8.1, Коды Голомба
Код Голомба неотрицательного целого числа п [Golomb 66] может быть эффективным кодом Хаффмана. Этот код зависит от выбора некоторого параметра Ь. Прежде всего необходимо вычислить две величины q — \j^\ , т — п — qh — \ (где выражение \_х\ обозначает округление ж), а затем построить код из двух частей; первая часть - это число ^, закодированное с помощью унарного кода (см. стр. 195), а вторая - двоичное выражение для г, состоящее из [log2 Ъ\ бит (для малых остатков) или из [log2 6] бит (для больших). Если взять 6 = 3, то три возможных остатка О, 1 и 2 будут кодироваться как О, 10 и 11. Выбрав 6 = 5, получаем 5 остатков от О до 4, которые кодируются как 00, 01, 100, 101 и 110. В табл. 3.60 приведены некоторые коды Голомба при 6 = 3 и 6 = 5.
|
|
|
|
|
|
|
|
|
|
|
10 |
6 = |
3 |
0|0 |
0|10 |
0|11 |
10|0 |
10|10 |
10|11 |
110|0 |
110|10 |
110|11 |
1110|0 |
6 = |
5 |
0|00 |
0|01 |
0|100 |
0|101 |
10|110 |
lojoO |
10|01 |
10|100 |
10|101 |
110|110 |
Табл. 3.60. Некоторые коды Голомба при 6 = 3 и 6 = 5.
Предположим, что входной поток данных состоит из целых чи сел, причем вероятность числа п равна Р(п) = (1 —'рУ^~'^'р,Здесь р - некоторый параметр, О < р < 1. Можно показать, что коды Го ломба будут оптимальными кодами для этого потока данных, если 6 выбрать из условия
(1 - vf + (1 - р)*+1 < к (1 - р)"-' + (1 - р)\
Имея такие данные на входе, легко породить наилучшие коды пере менной длины, не прибегая к алгоритму Хаффмана.
3.8.2. Основы метода JPEG-LS
Мы уже отмечали в § 3.7.6, что мода без потерь данных метода JPEG весьма неэффективна, и часто ее даже не включают в кон кретные приложения, использующие JPEG. В результате ISO в ко операции с IEC разработали новый стандарт для сжатия без потерь
Глава 3. Сжатие изобраэюений
(и почти без потерь) непрерывно-тоновых изображений. Этот ме тод официально известен как рекомендация ISO/IEC CD 14495, но его принято называть JPEG-LS. Здесь рассматриваются основные принципы этого метода, который не является расширением или мо дификацией метода JPEG. Это совершенно новый метод, простой и быстрый. Он не использует ни DCT, ни арифметическое коди рование. Применяется слабое квантование и только в моде почти без потерь. JPEG-LS основан на идеях, развитых в [Weinberger и др. 96] для метода компрессии LOCO-I. JPEG-LS (1) изучает не сколько предыдущих соседей текущего пиксела, (2) рассматривает их как контекст этого пиксела, (3) использует контекст для про гнозирования пиксела и для выбора распределения вероятностей из нескольких имеющихся, и (4) применяет это распределение для ко дирования ошибки прогноза с помощью специального кода Голомба. Имеется также серийная мода, когда длина серии одинаковых пик селов кодируется подходящим образом.
Пикселы контекста а^Ь^с, d, используемые для прогнозирования текущего пиксела а;, показаны на рис. 3.61. Кодер изучает пиксе лы контекста и устанавливает, в какой моде кодировать данный пиксел X, в серийной или в регулярной. Если контекст указывает, что пикселы у и z, следующие за х, скорее всего будут совпадать, то выбирается серийная мода. В противном случае, используется регулярная мода. Если включена опция «почти без потерь», то вы бор моды делается несколько иначе. Если контекст предполагает, что следующие пикселы будут почти совпадать (в соответствии с параметром допустимого отклонения NEAR), то декодер выбирает серийную моду. Если нет, то берется регулярная мода. Дальнейшее кодирование зависит от выбранной моды.
с Ь d
аX У Z
Табл. 3.61. Контекст для прогноза х.
В регулярной моде кодер использует величины пикселов а, 6 и с для вычисления прогноза пиксела х. Этот прогноз вычитается из ж, в результате чего получается ошибка прогноза^ которая обозначает ся через Errval. Затем ошибка прогноза корректируется некоторым членом, зависящим от контекста (корректировка делается с целью
3.8. JPEG-LS
компенсирования систематического отклонения прогноза), и потом она кодируется с помощью кодов Голомба. Код Голомба зависит от всех четырех пикселов контекста, а также от ошибок прогноза этих же самых пикселов (эта информация хранится в массивах А и N, которые будут использоваться в § 3.8.3). При компрессии почти без потерь ошибка прогноза еще дополнительно квантуется перед ко дированием.
В серийной моде кодер начинает с пиксела х и находит в этой строке наибольшую длину серии пикселов, совпадающих с контекст ным пикселом о. Кодер не расширяет эту серию за пределы текущей строки. Поскольку все символы серии совпадают с а (а этот пиксел известен декодеру), то достаточно закодировать длину серии, что делается с помощью массива J из 32 элементов (см. § 3.8.3). (При сжатии почти без потерь, кодер выбирает серию пикселов, близких к а с помощью параметра NEAR.)
Декодер мало отличается от кодера, поэтому JPEG-LS можно считать почти симметричным методом сжатия. Сжатый файл со стоит из сегментов данных (содержащих коды Голомба и длины серий), сегментов маркеров (с информацией, необходимой декоде ру) и просто маркеров (в качестве которых используются некото рые зарезервированные маркеры JPEG). Маркером является байт из одних единиц, за которым следует специальный код, сигнализи рующий о начале нового сегмента. Если за маркером следует байт, у которого старший бит равен 1, то этот байт является началом сег мента маркеров. В противном случае, начинается сегмент данных.
3.8.3.Кодер
Обычно, JPEG-LS используется как метод сжатия без потери ин формации. В этом случае восстановленный файл изображения иден тичен исходному файлу. В моде почти без потерь исходный и ре конструированный образ могут отличаться. Будем обозначать ре конструированный пиксел Rp, а исходный пиксел - р.
При кодировании верхней строки контекстные пикселы с,Ь и d отсутствуют, поэтому их значения считаются нулевыми. Если теку щий пиксел находится в начале или конце строки, то пикселы а, с или d не определены. В этом случае для and используется реконстру ированное значение Rb пиксела b (или нуль для верхней строки), а для с используется реконструированное значение а при кодировании первого символа предыдущей строки. Все это означает, что кодер должен выполнить часть работы декодера, реконструируя некото рые пикселы.
Глава 3. Сжатие изобраоюений
Первый шаг при определении контекста заключается в вычисле нии значений градиентов
Dl-= RdRb, D2 = RbRe, D3 = ReRa.
Если все эти величины равны нулю (или в моде почти без потерь их абсолютные значения не превосходят порога NEAR), то кодер пере ходит в серийную моду и ищет наибольшую длину серии пикселов, совпадающих с Ra. На шаге 2 кодер сравнивает три градиента Di с некоторыми параметрами и вычисляет зонные числа Qi по некото рым правилам (эти правила здесь не обсуждаются). Каждое зонное число Qi может принимать одно из 9 целых значений в интервале [—4,4], поэтому имеется всего 9 x 9 x 9 = 729 троек зонных чисел. На третьем шаге используются абсолютные значения произведений зонных чисел Qi (всего разных троек будет 365, так как одна из 729 величин равна нулю) р^ля вычисления числа Q из интервала [0,364]. Детали этих вычислений не предписываются стандартом JPEG-LS, и кодер может делать это по любому правилу. Число Q становится контекстом текущего пиксела х. Используются индексные массивы А и N VL3 рис. 3.65.
После установления контекста Q, кодер прогнозирует пиксел х за два шага. На первом шаге вычисляется прогноз Рх с помощью правила края, как показано на рис. 3.62. На втором шаге произ водится корректировка прогноза (см. рис. 3.63) с помощью числа SIGN (зависящего от трех зонных чисел Qi), корректирующих ве личин C{Q) (выводимых из систематических смещений, и здесь не обсуждаемых) и параметра MAXVAL.
if(Rc>=max(Ra,Rb)) Px=min(Ra,Rb) |
if(SIGN=+l) Px=Px+C(Q) |
|
e l s e |
e l s e Px=Px-C(Q) |
|
i f (Rc<=min(Ra,Rb)) Px=max(Ra,Rb) |
endif; |
|
e l s e Px=Ra+Rb-Rc |
i f (Px>MAXVAL) Px=MAXVAL |
|
endif; |
e l s e |
i f ( P x < 0 ) Px=0 endif; |
endif; |
endif; |
|
Р и с . 3.62. Обнаружение угла. |
Р и с . 3 |
. 63 . Корректировка прогноза. |
Чтобы понять правило края, рассмотрим случай b < а. При этом условии правило края выбирает b в качестве прогноза х во многих случаях, когда вертикальный край изображения находится непо средственно слева от х. Аналогично, пиксел а выбирается в качестве прогноза X во многих случаях, когда горизонтальный край находит ся непосредственно над х. Если край не обнаруживается, то правило
3.8. JPEG-LS
края вычисляет прогноз в виде а -\- Ь — с^ что имеет простую гео метрическую интерпретацию. Если каждый пиксел является точкой трехмерного пространства, то прогноз а-\-Ь — с помещает Рх на ту
же плоскость, что и точки а, |
б и с . |
|
|
После того, |
как прогноз |
Рх найден, кодер вычисляет ошибку |
|
прогноза Errval |
в виде разности х — Ра;, но меняет знак, если вели |
||
чина SIGN отрицательная. |
|
|
|
В моде почти без потерь ошибка квантуется, и кодер исполь |
|||
зует это реконструированное |
значение Rx пиксела х |
так же, как |
|
это будет делать декодер. Основной шаг квантования |
заключается |
||
в вычислении |
|
|
|
При этом используется параметр NEAR, однако имеются некоторые детали, которые здесь не приводятся. Основной шаг реконструкции состоит в нахождении
Rx^ РхЛ- SIGN X Errval х (2 х NEAR+1).
Ошибка прогноза (после возможного квантования) претерпева ет сокращение области (здесь эта процедура опущена). Теперь она готова для главного этапа кодирования.
Коды Голомба были введены в § 3.8.1, где основной параметр был обозначен через Ь. В JPEG-LS этот параметр обозначается т. Если число т уже выбрано, то код Голомба неотрицательного целого чи сла п состоит из двух частей: унарного кода целой части числа п/т и двоичного представления nmodm . Этот код является идеальным ^\ля целых чисел, имеющих геометрическое распределение (то есть, когда вероятность числа п равна (1 — г)г^, 0 < г < 1 ) . Для каждого геометрического распределения найдется такое число т , что код Го ломба, построенный по т , имеет наименьшую возможную среднюю длину. Простейший случай, когда т равно степени 2 ( т = 2^), при водит к простым операциям кодирования/декодирования. Код чи сла п состоит в этом случае из к младших разрядов числа п, перед которыми стоит унарный код числа, составленного из остальных старших разрядов числа п. Этот специальный код Голомба обозна чается через G{k).
Для примера вычислим код G{2) числа п = 19 = IOOII2. Посколь ку /с = 2, то m = 4. Начнем с двух младших разрядов, II2, числа п. Они равны 3, что то же самое, что n m o d m (3 = 19mod4). Остав шиеся старшие разряды, IOO2 дадут число 4, которое равно целой