Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы сжатия изображений.doc
Скачиваний:
92
Добавлен:
02.05.2014
Размер:
3.2 Mб
Скачать

Алгоритм Хаффмана с фиксированной таблицей ccittGroup 3

Близкая модификация алгоритма используется при сжатии черно-белых изображений (один бит на пиксел). Полное название данного алгоритма CCITT Group 3. Это означает, что данный алгоритм был предложен третьей группой по стандартизации Международного Консультационного Комитета по Телеграфии и Телефону(Consultative Committee International Telegraph and Telephone). Последовательности подряд идущих черных и белых точек в нем заменяются числом, равным их количеству. А этот ряд уже, в свою очередь, сжимается по Хаффману с фиксированной таблицей.

Определение:Набор идущих подряд точек изображения одного цвета называетсясерией. Длина этого набора точек называетсядлиной серии.

В таблице приведенной ниже заданы два вида кодов:

  • Коды завершения серий— заданы с 0 до 63 с шагом 1.

  • Составные (дополнительные) коды— заданы с 64 до 2560 с шагом 64.

Каждая строка изображения сжимается независимо. Мы считаем, что в нашем изображении существенно преобладает белый цвет, и все строки изображения начинаются с белой точки. Если строка начинается с черной точки, то мы считаем, что строка начинается белой серией длины 0. Например, последовательность длин серий 0, 3, 556, 10, ... означает, что в этой строке изображения идут сначала 3 черных точки, затем 556 белых, затем 10 черных и т.д.

На практике в тех случаях, когда в изображении преобладает черный цвет, мы инвертируем изображение перед компрессией и записываем информацию об этом в заголовок файла.

Алгоритм компрессии выглядит так:

for(по всемстрокам изображения) {

Преобразуем строку в набор длин серий;

for(по всем сериям) {

if(серия белая) {

L= длина серии;

while(L > 2623) { // 2623=2560+63

L=L-2560;

ЗаписатьБелыйКодДля(2560);

}

if(L > 63) {

L2=МаксимальныйСостКодМеньшеL(L);

L=L-L2;

ЗаписатьБелыйКодДля(L2);

}

ЗаписатьБелыйКодДля(L);

//Это всегда код завершения

}

else {

[Код аналогичный белой серии,

с той разницей, что записываются

черные коды]

}

}

// Окончание строки изображения

}

Поскольку черные и белые серии чередуются, то реально код для белой и код для черной серии будут работать попеременно.

В терминах регулярных выражений мы получим для каждой строки нашего изображения (достаточно длинной, начинающейся с белой точки) выходной битовый поток вида:

((<Б-2560>)*[<Б-сст.>]<Б-зв.>(<Ч-2560>)*[<Ч-сст.>]<Ч-зв.>)+

[(<Б-2560>)*[<Б-сст.>]<Б-зв.>]

Где ()* — повтор 0 или более раз, ()+.— повтор 1 или более раз,[]— включение 1 или 0 раз.

Для приведенного ранее примера: 0, 3, 556, 10... алгоритм сформирует следующий код: <Б-0><Ч-3><Б-512><Б-44><Ч-10>, или, согласно таблице, 001101011001100101001011010000100(разные коды в потоке выделены для удобства). Этот код обладает свойством префиксных кодов и легко может быть свернут обратно в последовательность длин серий. Легко подсчитать, что для приведенной строки в 569 бит мы получили код, длиной в 33 бита, т.е. коэффициент сжатия составляет примерно 17 раз.

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

Изображение, для которого очень выгодно применение алгоритма CCITT-3(Большие области заполнены одним цветом.)

Изображение, для которого менее выгодно применение алгоритма CCITT-3. (Меньше областей, заполненных одним цветом. Много коротких “черных” и “белых” серий.)

Заметим, что единственное “сложное” выражение в нашем алгоритме: L2=МаксимальныйДопКодМеньшеL(L)— на практике работает очень просто:L2=(L>>6)*64, где>> — побитовый сдвигL влево на 6 битов (можно сделать то же самое за одну побитовую операцию& — логическое И).

Упражнение:Дана строка изображения, записанная в виде длин серий — 442, 2, 56, 3, 23, 3, 104, 1, 94, 1, 231 размером 120 байт ((442+2+..+231)/8). Подсчитать коэффициент компрессии этой строки алгоритмомCCITTGroup 3.

Приведенные ниже таблицы построены с помощью классического алгоритма Хаффмана (отдельно для черных и белых длин серий). Значения вероятностей появления конкретных длин серий были получены путем анализа большого количества факсимильных изображений.

Таблица кодов завершения:

Длина серии

Код белой подстроки

Код черной подстроки

Длина серии

Код белой подстроки

Код черной подстроки

0

00110101

0000110111

32

00011011

000001101010

1

00111

010

33

00010010

000001101011

2

0111

11

34

00010011

000011010010

3

1000

10

35

00010100

000011010011

4

1011

011

36

00010101

000011010100

5

1100

0011

37

00010110

000011010101

6

1110

0010

38

00010111

000011010110

7

1111

00011

39

00101000

000011010111

8

10011

000101

40

00101001

000001101100

9

10100

000100

41

00101010

000001101101

10

00111

0000100

42

00101011

000011011010

11

01000

0000101

43

00101100

000011011011

12

001000

0000111

44

00101101

000001010100

13

000011

00000100

45

00000100

000001010101

14

110100

00000111

46

00000101

000001010110

15

110101

000011000

47

00001010

000001010111

16

101010

0000010111

48

00001011

000001100100

17

101011

0000011000

49

01010010

000001100101

18

0100111

0000001000

50

01010011

000001010010

19

0001100

00001100111

51

01010100

000001010011

20

0001000

00001101000

52

01010101

000000100100

21

0010111

00001101100

53

00100100

000000110111

22

0000011

00000110111

54

00100101

000000111000

23

0000100

00000101000

55

01011000

000000100111

24

0101000

00000010111

56

01011001

000000101000

25

0101011

00000011000

57

01011010

000001011000

26

0010011

000011001010

58

01011011

000001011001

27

0100100

000011001011

59

01001010

000000101011

28

0011000

000011001100

60

01001011

000000101100

29

00000010

000011001101

61

00110010

000001011010

30

00000011

000001101000

62

00110011

000001100110

31

00011010

000001101001

63

00110100

000001100111

Таблица составных кодов:

Длина серии

Код белой подстроки

Код черной подстроки

Длина серии

Код белой подстроки

Код черной подстроки

64

11011

0000001111

1344

011011010

0000001010011

128

10010

000011001000

1408

011011011

0000001010100

192

01011

000011001001

1472

010011000

0000001010101

256

0110111

000001011011

1536

010011001

0000001011010

320

00110110

000000110011

1600

010011010

0000001011011

384

00110111

000000110100

1664

011000

0000001100100

448

01100100

000000110101

1728

010011011

0000001100101

512

01100101

0000001101100

1792

00000001000

совп. с белой

576

01101000

0000001101101

1856

00000001100

— // —

640

01100111

0000001001010

1920

00000001101

— // —

704

011001100

0000001001011

1984

000000010010

— // —

768

011001101

0000001001100

2048

000000010011

— // —

832

011010010

0000001001101

2112

000000010100

— // —

896

011010011

0000001110010

2176

000000010101

— // —

960

011010100

0000001110011

2240

000000010110

— // —

1024

011010101

0000001110100

2304

000000010111

— // —

1088

011010110

0000001110101

2368

000000011100

— // —

1152

011010111

0000001110110

2432

000000011101

— // —

1216

011011000

0000001110111

2496

000000011110

— // —

1280

011011001

0000001010010

2560

000000011111

— // —

Если в одном столбце встретятся два числа с одинаковым префиксом, то это опечатка.

Этот алгоритм реализован в формате TIFF.

Характеристики алгоритма CCITT Group 3

Коэффициенты компрессии:лучший коэффициент стремится в пределе к 213.(3), средний 2, в худшем случае увеличивает файл в 5 раз.

Класс изображений:Двуцветные черно-белые изображения, в которых преобладают большие пространства, заполненные белым цветом.

Симметричность:Близка к 1.

Характерные особенности:Данный алгоритм чрезвычайно прост в реализации, быстр и может быть легко реализован аппаратно.

JBIG

Алгоритм разработан группой экспертов ISO (Joint Bi-level Experts Group) специально для сжатия однобитных черно-белых изображений [5]. Например, факсов или отсканированных документов. В принципе может применяться и к 2-х, и к 4-х битовым картинкам. При этом алгоритм разбивает их на отдельные битовые плоскости. JBIG позволяет управлять такими параметрами, как порядок разбиения изображения на битовые плоскости, ширина полос в изображении, уровни масштабирования. Последняя возможность позволяет легко ориентироваться в базе больших по размерам изображений, просматривая сначала их уменьшенные копии. Настраивая эти параметры, можно использовать описанный выше эффект “огрубленного изображения” при получении изображения по сети или по любому другому каналу, пропускная способность которого мала по сравнению с возможностями процессора. Распаковываться изображение на экране будет постепенно, как бы медленно “проявляясь”. При этом человек начинает анализировать картинку задолго до конца процесса разархивации.

Алгоритм построен на базе Q-кодировщика [6], патентом на который владеет IBM. Q-кодер так же, как и алгоритм Хаффмана, использует для чаще появляющихся символов короткие цепочки, а для реже появляющихся — длинные. Однако, в отличие от него, в алгоритме используются и последовательности символов.