Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций по КГ.doc
Скачиваний:
19
Добавлен:
12.09.2019
Размер:
17.06 Mб
Скачать

Алгоритм лемпела–зива-велча ( Lempel- Ziev-Welch, lzw )

Суть метода в том, что сначала методами дискретной математики по исходной последовательности строится так называемая библиотека подпоследовательностей, причем никакой более короткий элемент библиотеки не является началом никакого более длинного элемента.

Далее строится выходной (сжатый) файл, в котором обнаруженные в исходном файле подпоследовательности – элементы библиотеки заменяются их смещениями в библиотеке.

Рассмотрим нестрогий пример, построенный на предельно упрощенной последовательности.

Исходная последовательность: ломмолотоклопаталомломкиркалопаталомлопаталопата

1) Справочник (смещение-элемент): 0-лом,3-молоток,10-лопата,16-кирка

2) Ссылки на элементы справочника:

0,3,10,0,0,16,10,0,10,10

Модель сжатого файла: 0-лом,3-молоток,10-лопата,16-кирка#0,3,10,0,0,16,10,0,10,10

Степень сжатия: средняя (около 2).

Битовые коды переменной длины (метод хаффмана)

Этот метод использует тот факт, что байты с разными значениями встречаются в исходной последовательности с разной частотой. Исходная последовательность рассматривается как сплошной массив битов. Предлагается получить сжатие за счет того, что наиболее частые байты изображаются в выходной последовательности не восемью битами, а меньшим их количеством.

Метод не даст никакого сжатия, если все значения байтов встретятся одинаковое число раз. В этом случае изображение любого байта должно будет занять восемь бит, что означает отсутствие выигрыша по объему хранения.

Рассмотрим пример некоторого условного файла:

Результат работы алгоритма Хаффмана приведен на следующем рисунке. Видно, что наиболее часто встречающиеся байты изображаются в выходном файле двух- и трехбитными последовательностями.

Для сравнения приведем фрагмент исходной последовательности байтов и возможное ее представление после сжатия.

Степень сжатия: выше средней (до 3).

Методы энтропийнного сжатия

(Сжатие с потерями)

Как мы видели выше, методы точного сжатия обеспечивают таковое в среднем в 2 – 2,5 раза, что, объективно говоря, немного. Вместе с тем, растровые изображения несут в себе много избыточной информации, которая зрением человека воспринимается плохо или не воспринимается вообще. Отсюда возникает идея поступиться при сжатии частью качества картинки, но получить за счет этого много большую эффективность сжатия. Причем жертвуют в данных обычно той частью, которая наименее важна для человеческого зрения.

Индексирование цвета

Индексирование цвета состоит в том, что в пикселах картинки хранят не описание цвета, а номер этого цвета в палитре, сохраняемой вместе с растром картинки.

Исходная картинка – это RGB-изображение, описанное в модели 24 бита на пиксел.

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

Здесь палитра из 16 цветов, индекс (номер) цвета 4хбитный. Объем сжатого файла больше, чем в первом случае, но и качество картинки выше.

Здесь палитра из 128 цветов, индекс семибитный, качество картинки на глаз практически неотличимо от исходной.

УПРОЩЕННАЯ СТРУКТУРА ФАЙЛА ТИПА .GIF

Метод сжатия за счет применения индексации цветов применяется в форматах GIF и PNG. Ниже приводится схематичное описание структура файла формата GIF.

АЛГОРИТМ JPEG СЖАТИЯ РАСТРОВОГО ИЗОБРАЖЕНИЯ

Это НЕ ФОРМАТ файлов, а АЛГОРИТМ СЖАТИЯ растровых изображений.

Предложен Joint Photographic Expert Group в 1991 г.

Идея алгоритма базируется на том наблюдении, что зрение человека лучше всего воспринимает яркость пикселов (примерно 80%информации) и много хуже – цветовую компоненту изображения.

Алгоритм JPEG cостоит из нескольких последовательно применяемых к изображению преобразований.

0. ИСХОДНАЯ ТОЧКА:

Изображение в формате ВМР. Каждый пиксел = 3 байта (R, G, B).

1. ПЕРВОЕ ПРЕОБРАЗОВАНИЕ:

Из модели RGB картинку переводят в модель Y Cb Cr, в которой яркостная компонента Y отделена от цветовых координат Cr и Cb:

2. ВТОРОЕ ПРЕОБРАЗОВАНИЕ:

Изображение разбивается на блоки 8 х 8 пикселов.

Дальше вся работа делается С КАЖДЫМ БЛОКОМ В ОТДЕЛЬНОСТИ.

3. ТРЕТЬЕ ПРЕОБРАЗОВАНИЕ:

Прореживаются и совмещаются цветовые каналы. Это схематично показано на рисунке ниже:

4. ЧЕТВЕРТОЕ ПРЕОБРАЗОВАНИЕ:

Блоки Y[0..7,0..7] и CrCb[0..7,0..7] (каждый в отдельности) подвергаются ДИСКРЕТНОМУ КОСИНУСНОМУ ПРЕОБРАЗОВАНИЮ (ДКП) и затем КВАНТОВАНИЮ. Результат – 2 матрицы по 64 байта, в которых МНОГО НУЛЕЙ. Например:

5. ПЯТОЕ ПРЕОБРАЗОВАНИЕ:

Блоки Y[0..7,0..7] и CrCb[0..7,0..7] (каждый в отдельности) РАЗВОРАЧИВАЮТСЯ В ЛИНЕЙНЫЙ МАССИВ способом «перечисления вдоль диагоналей» (способ Коши):

30, 0, -7, -11,8,0,0,1,6,-5,-7,-3,0,1,0,0,0,1,0,-3,-4,-1,4,2,0,0,0,0,0,0,0,0,0,0,-3, …

6. ШЕСТОЕ ПРЕОБРАЗОВАНИЕ:

Каждый из массивов Y[0..63] и CrCb[0..63] ПРОРЕЖИВАЕТСЯ: оставляют лишь первый из каждых 4х элементов:

Из каждого массива в 64 байта вроде такого

30,0,-7,-11,8,0,0,1,6,-5,-7,-3,0,1,0,0,0,1,0,-3,-4,-1,4,2,0,0,0,0,0,0,0,0,0,0,-3, . . .

делают такой, размером 16 байт:

30, 8, 6, 0, 0,-4, 0, 0, 0, 0,-3, 0, 0, 0, 0, 0

ИТАК, из начального описания блока 64*3 = 192 байта остались 2 массива по 16 байт, то есть 32 байта. Уже сжали в 6 раз.

Но и это еще не всё.