- •Шаги jpeg
- •2) Дискретизация
- •3) Сдвиг Уровня
- •4) 8Х8 Дискретное Косинусоидальное Преобразование (dct)
- •5) Зигзагообразная перестановка 64 dct коэффициентов
- •6) Квантование
- •7) RunLength кодирование нулей (rlc)
- •8) Конечный шаг - кодирование Хаффмана
- •Величины Категория Биты для величины
- •Кодирование коэффициента dc
- •Задание
Лабораторная работа №6
Формат JPEG
Цель работы: изучение структуры формата графических файловJPEG.
В алгоритме JPEG исходное изображение представляется двумерной матрицей размера N*N, элементами которой являются цвет пиксела. Упаковка значений матрицы выполняется за три этапа:
• дискретное косинус преобразование,
• квантование,
• вторичное сжатие.
Высокая эффективность сжатия, которую дает этот алгоритм, основана на том факте, что в матрице частотных коэффициентов, образующейся из исходной матрицы после дискретного косинусного преобразования, низкочастотные компоненты расположены ближе к левому верхнему углу, а высокочастотные - внизу справа. Это важно потому, что большинство графических образов на экране компьютера состоит из низкочастотной информации, так что высокочастотные компоненты матрицы можно безболезненно выбросить, что выполняется путем округления частотных коэффициентов. После округления отличные от нуля значения низкочастотных компонент остаются, главным образом, в левом верхнем углу матрицы. Округленная матрица значений кодируется с учетом повторов нулей. В результате графический образ сжимается, теряя немного в качестве изображения только на этапе округления.
Шаги jpeg
1) Преобразование цветового пространства: [RGB] -> [Y Cb Cr]
(R,G,B - 8-битовые величины без знака)
Y 0.299 0.587 0.114 R 0
Cb = -0.1687 -0.3313 0.5 * G + 128
Cr 0.5 -0.4187 -0.0813 В 128
Новая величина Y = 0.299*R + 0.587*G + 0.114*В является яркостью. Эта величина используется монохромными мониторами, чтобы представить цвет в RGB модели и физиологически передает интенсивность цвета, воспринятого глазом. Формула для Y, подобно средневзвешенному значению с разным весом для каждого спектрального компонента: глаз наиболее чувствителен на Зеленый цвет, затем следует Красный компонент и в последнюю очередь - Синий.
Величины Cb=0.1687*R-0.3313*G+0.5*В+128 и Cr=0.5*R-0.4187*G-0.0813*B+128 названы цветовыми величинами и представляют 2 координаты в системе, которая измеряет оттенок и насыщение цвета, эти величины указывают количество синего и красного в этом цвете). Эти 2 координаты названы цветоразностью.
Преобразование [Y.Cb.Cr] в [R.G.B] (обратно предыдущему преобразованию)
RGB-цвет может быть определен непосредственно из YCbCr (8-битовые величины без знака) следующим образом:
R = Y+1.402*(Сг-128)
G = Y-0.34414*(СЬ-128)-0.71414*(Сг-128)
В = Y+1.772*(Cb-128)
2) Дискретизация
JPEG Стандарт принимает во внимание то, что глаз более чувствителен к яркости цвета, чем к оттенку этого цвета.
Поэтому для JPEG, яркость взята для каждого пикселя, тогда как цветоразность - как средняя величина для блока 2х2 пикселей. При этом достигаются хорошие результаты сжатия, с незначительным потерями в визуальном восприятии нового изображения, полученного в результате применения JPEG.
Примечание: JPEG стандарт определяет, что для каждого компонента образа (подобно, например Y) должно быть определено 2 коэффициента дискретизации: один для горизонтальной дискретизации и один для вертикальной дискретизации. Эти коэффициенты дискретизации определяются в файле JPEG относительно максимального коэффициента дискретизации.
3) Сдвиг Уровня
Все 8-битовые величины без знака (Y,Cb,Cr) в изображении "смещенны по уровню": они преобразовываются в 8-битовое знаковое представление вычитанием 128 из их значения.
4) 8Х8 Дискретное Косинусоидальное Преобразование (dct)
Изображение делится на блоки 8х8 пикселов, затем для каждого блока 8х8 применяется DCT (если размер Х исходного образа не делится на 8, шифратор должен сделать его делимым, дополняя правые столбцы). Аналогично, если размер по Y не делится на 8, шифратор должен дополнить строки. Блоки 8х8 обрабатываются слева направо и сверху вниз.
Примечание: Поскольку каждый пиксел в блоке 8х8 имеет 3 компонента (Y,Cb,Cr), DCT применяется отдельно к трем блоках 8х8: Первый блок 8х8 является блоком, который содержит яркость пикселов в исходном блоке изображения; второй блок 8х8 является блоком, который содержит величины СЬ; и, аналогично, третий блок 8х8 содержит величины Сг.
Цель DCT в том, что для обработки исходных изображений перейти в пространство частот изменения яркости и цвета. Эти частоты связаны с уровнем детализации изображения (высокие значения частоты соответствуют высокому уровню детализации).
DCT похоже на 2-мерное преобразование Фурье, которое получает из временного интервала (исходный блок 8х8) частотный интервал (новые коэффициенты 8х8=64, которые представляют амплитуды частотной характеристики сигнала)
Математическое определение прямого DCT (FDCT) и обратного DCT (IDCT):
c(u,v)=l/2, когда u=v=0;
c(u,v)= 1 - в остальных случаях.
IDCT:
Применение этих формул непосредственно в вычислениях связана с значительными затратами компьютерных ресурсов, в тоже время имеются разработанные быстрые алгоритмы для прямого или обратного DCT.
Таким образом, основным этапом работы алгоритма является DCT, представляющее собой разновидность преобразования Фурье. Оно позволяет переходить от пространственного представления изображения к его спектральному представлению и обратно. Поэтому следует создать DCT матрицу, используя формулу:
DCT == l/sqr(N), если i=0
DCT = sqr(2/N)*cos[(2j+l)*i*3.14/2N], если i > 0
iJ N = 8, 0<i<7,0<j<7
в результате имеем:
.353553 .353553 .353553 .353553 .353553 .353553 .353553 .353553
. 490393 .415818 .277992 .097887 -.097106 -.277329 -.415375 -.490246
.461978 .191618 -.190882 -.461673-.462282 -.192353 .190145 .461366
DCT= .414818 -.097106 -.490246 -.278653 .276667 .490710 .099448 .414486
.353694 -.353131 -.354256 .352567 .354819 -.352001 -.355378 .351435
.277992 -.490246 .096324 .416700 -.414486 -.100228 .491013 -.274673
.191618 -.462282 .461366 .189409 -.193822 .463187 -.460440 .187195
.097887 -.278653 .416700 -.490862 .489771 -.413593 .274008 -.092414
например, нам нужно сжать следующий фрагмент изображения:
-
95
88
88
87
95
88
95
95
143
144
151
151
153
170
183
181
153
151
162
166
162
151
126
117
143
144
133
130
143
153
159
175
123
112
116
130
143
147
162
189
133
151
162
166
170
188
166
128
160
168
166
159
135
101
93
98
154
155
153
144
126
106
118
133
-
-33
-40
-40
-41
-33
-40
-33
-33
15
16
23
23
25
42
55
53
25
23
34
38
34
23
-2
-11
15
16
5
2
15
25
31
47
-5
-16
-12
2
15
19
34
61
5
23
34
38
42
60
38
0
32
40
38
31
7
-27
-35
-30
26
27
25
16
-2
-22
-10
5
Т
-103 |
-3 |
1 |
2 |
4 |
0 |
-1 |
5 |
89 |
-40 |
12 |
-2 |
-7 |
5 |
1 |
0 |
57 |
31 |
-30 |
6 |
2 |
0 |
5 |
0 |
55 |
-28 |
24 |
1 |
0 |
-8 |
0 |
0 |
32 |
-60 |
18 |
-1 |
14 |
0 |
-8 |
1 |
84 |
-11 |
-37 |
17 |
-24 |
4 |
0 |
-4 |
19 |
81 |
-16 |
-20 |
8 |
-3 |
4 |
0 |
22 |
40 |
11 |
-22 |
8 |
0 |
-3 |
2 |
|
|
|
|
|
|
|
|
умножаем ее на DCT матрицу: RES = TMP*DCT и получаем
-
! 91
3
-5
-6
2
0
1
[-38
-57
9
17
-2
2
2
!-80
58
0
-18
4
3
4
1-52
-36
-11
13
-9
3
0
-86
-40
44
-7
17
-6
4
•-62
64
-13
-1
3
-8
0
-16
14
-35
17
-11
2
-1
-53
32
-9
-8
22
0
2