Опрос

Какой архиватор наиболее эффективный?:

Новички

Виктор Васильев
Юрий Антонов
Сергей Андреевич
Генадий
Avanasy

Квантование

После вычисления всех коэффициентов DCT их необходимо про-квантовать. На этом шаге происходит отбрасывание части информации (небольшие потери происходят и на предыдущем шаге из-за конечной точности вычислений на компьютере). Каждое число из матриц коэффициентов DCT делится на специальное число из «таблицы квантования», а результат округляется до ближайшего целого. Как уже отмечалось, необходимо иметь три такие таблицы для каждой цветовой компоненты. Стандарт JPEG допускает использование четырех таблиц, и пользователь может выбрать любую из этих таблиц для квантования компонентов цвета. Все 64 числа из таблицы квантования являются параметрами JPEG. В принципе, пользователь может поменять любой коэффициент для достижения большей степени сжатия. На практике весьма сложно экспериментировать с таким большим числом параметров, поэтому программное обеспечение JPEG использует два подхода:

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

2. Вычисляется простая таблица коэффициентов квантования, зависящая от параметра Л, который задается пользователем. Простые выражения типа Qij = 1 + (i; + j) x R гарантируют убывание коэффициентов из левого верхнего угла в правый нижний.

16

11

10

16

24

40

51

61

12

12

14

19

26

58

60

55

14

13

16

24

40

57

69

56

14

17

22

29

51

87

80

62

18

22

37

56

68

109

103

77

24

35

55

64

81

104

113

92

49

64

78

87

103

121

120

101

72

92

95

98

112

100

103

99

17 18 24 47 99 99 99 99

18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99

Светимость Цветность

Табл. 3.50. Рекомендуемые таблицы квантования.

Если квантование сделано правильно, то в блоке коэффициентов DCT останется всего несколько ненулевых коэффициентов, которые будут сконцентрированы в левом верхнем углу матрицы. Эти числа являются выходом алгоритма JPEG, но их следует еще сжать перед записью в выходной файл. В литературе по JPEG это сжатие называется «энтропийным кодированием», детали которого будут разбираться в § 3.7.5. Три технических приема используется при энтропийном кодировании для сжатия целочисленных матриц 8x8. 1. 64 числа выстраиваются одно за другим как при сканировании зигзагом (см. рис. 3.5а). В начале стоят ненулевые числа, за которыми обычно следует длинный хвост из одних нулей. В файл выводятся только ненулевые числа (после надлежащего кодирования) за которыми следует специальный код ЕОВ (end-of-block, конец блока). Нет необходимости записывать весь хвост нулей (можно также сказать, что ЕОВ кодирует длинную серию нулей).

Пример: В табл. 3.51 приведен список гипотетических коэффициентов DCT, из которых только 4 не равны нулю. При зигзагообразном упорядочении этих чисел получается последовательность коэффициентов: 1118, 2,0, -2,0,... , 0, -1,0,..., 0..

1346

1118

2

0

0

0

0

0

0

0

0

0

0

0

0

0

0

-2

0

0

-1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Табл. 3.51. Квантованные коэффициенты.

А как написать подпрограмму для считывания элементов матрицы по зигзагу? Простейший способ состоит в ручном прослеживании этого пути и в записи результата в массив структур zz, в котором каждая структура состоит из пары координат клеток, через которые проходит зигзагообразный путь (см. рис. 3.52).

Если компоненты структуры zz обозначить zz. г и zz. с, то путь по зигзагу можно совершить с помощью следующего цикла

for (i=0; i<64; i++){

row:=zz[i].r; col:=zz [i]

. . .data.unit[row] [col]...}

2. Ненулевые коэффициенты преобразования сжимаются по методу Хаффмана (см. § 3.7.5).

3. Первое из этих чисел (коэффициент DC, см. стр. 145) обрабатывается отдельно от других чисел (коэффициентов АС).

(0,0) (0,1) (1,0) (2,0) (1,1) (0,2) (0,3) (1,2)

(2.1) (3,0) (4,0) (3,1) (2,2) (1,3) (0,4) (0,5)

(1.4) (2,3) (3,2) (4,1) (5,0) (6,0) (5,1) (4,2) (3,3) (2,4) (1,5) (0,6) (0,7) (1,6) (2,5) (3,4) (4,3) (5,2) (6,1) (7,0) (7,1) (6,2) (5,3) (4,4)

(3.5) (2,6) (1,7) (2,7) (3,6) (4,5) (5,4) (6,3)

(7.2) (7,3) (6,4) (5,5) (4,6) (3,7) (4,7) (5,6) (6,5) (7,4) (7,5) (6,6) (5,7) (6,7) (7,6) (7,7)

Рис. 3.52. Координаты зигзагообразного пути.