Алгоритмы сжатия
Алгоритмы сжатия работаю по разному на разных изображениях. Есть попытки создать некоторые классы изображения. Классы изображения:
Небольшое количество цветов (4-16), области с одним цветом. Используется часто в деловой графике.
Плавные переходы - презентации, модели в САПР, изображения, полученные заливкой методом Гуро.
Фотореалистические изображения - отсканированные фотографии
Фото + деловая графика.
Отдельная большая группа для изображений - рентгенограмма (фас и профиль). Фотографии преступников.
V
Wide Gamut RGB - расширенный диапазон RGB
Adobe RGB - в телевидении широкого разрешения
RGB
Так же существует модель HSB H - определяет цветовой тон
S - насыщенность Saturation - используется белая краска (забеливание) B - определяет освещённость или затемнённость - чёрная краска
Характеристики алгоритмов:
Худший, средний и лучший коэффициент сжатия. Коэф. сжатия - отношение исходного материала, как изображения к сжатому.
Симметричность характеризует ресурсоёмкость процессов кодирования и декодирования. Например, алгоритм jpeg имеет симметричность порядка 1. Кодирование и декодирование происходит примерно за 1 время. Некоторые алгоритмы имеют коэффициент 1000. Это означает, что кодирование в 1000 раз медленнее, чем декодирование.
С потерями/без потерь. Без потерь означает, что мы до пикселя сможем восстановить изображение и оно не будет отличаться от исходного. С потерями - может быть что-то потеряно. Сжатие в 1000 раз - с потерями, без потерь- до 6 раз. Разработчики JPEG рассуждали, что часто потеря высокочастотных элементах на фотографии (пыль или ещё что-то) улучшает фотографию.
Критерии качества. Были попытки использовать математические критерии (среднеквадратическое отклонение). Математические критерии качества почти не работают.
Пример: среднеквадратическое отклонение =5%. Эта цифра очень маленькая. Настройка мониторов допускает больше, около 7 %. Снег, как некоторое суммируемое отклонение, будет <5% и снимок будет ужасен.
Критерий качество выбирается на глаз. Берётся изображение до сжатия и после. Имеются некие потери. Оценим изображение как плохое - когда глядя на разжатое изображение и не глядя до сжатия, мы сразу говорим, что качество испортилась. Хорошее - говорим, что второе лучше, но держим фотографию да сжатия. Отличное качество, когда мы не можем отличить какой до, какой после.
Алгоритм сжатия без потерь
Алгоритмы:
RLE (Run LENGTH ENCODING) - групповое кодирование
Коэффициенты сжатия - Лучший, средний, худший соответственно 1/32, 1/2, 2/1 (изображение может стать больше). 120 (13, 250,10) означает, что пиксель встречается 120 раз и не надо его каждый раз кодировать. Достаточно 1 раза. Сложность в том, что заранее неизвестно длина слова "120". Используется в форматах PCX, TIFF,BMP.
Были работы по применению этого алгоритма в картографии. Использование на первый взгляд такого простого алгоритма на самом деле не так просто.
Модификация группового сжатия - LZW. Ограничена длина слова 8-12 бит.
Лучший, средний, худший соответственно 1/1000, 1/4,7/5. GIF использует 8 бит. TIFF - размер плавает.
Алгоритм Хаффмана - используется не самостоятельно, а как некоторое дополнение. Алгоритм является математически красивым. Работа алгоритма в том, что для разных символах в тексте или изображения используются слова различной длины (находят длину слова для каждого символа). Создаётся дерево, при создании его учитывается, сколько раз символ встречается в тексте. Чем чаще встречается символ, тем меньше слово, которым он кодируется. Если символ встречается 1 раз, то последовательность будет длиннее, а если символ встречается чаще, то последовательность короче.
Лучший, средний, худший соответственно 1/8, 2/3, 1.
Используется и в JPEG, TIFF, в некоторых алгоритмах музыкально сжатия.
Лекция №7 Алгоритм Хаффмана
13 октября 2011 г. 12:09
Кодирующее дерево является двоичным деревом с единичным листом для каждого символа. Компрессор начинает с 2 символов наименьшей вероятности. Он объединяет их как 2 листа двумя ветвями в узел. Этому узлу назначается сумма двух вероятностей. Этот узел запоминается вместе с символами в списке вероятностей. Затем снова выбирается 2 наименее вероятных элемента. Процесс продолжается, пока вероятность не станет равной 1. Для кодировки компрессор проходит путь от корня дерева к листу символа. Последовательность 0 и 1, описывающих узлы, и составляют код символа. Символы с большей вероятностью находятся ближе к корню, с малой вероятностью - дальше от корня. Их коды будут длиннее.
Алгоритмы Хаффмана:
Статический- сначала просматриваем информацию, потом строим дерево.
Динамический - преобразование, построение и кодирование дерева производится одновременно. Алгоритм Хаффмена применяется отдельно для каждого цвета и каждое слово будет от 0 - 255. Есть система Эльбрус, из которой сейчас многие разработчики берут идеи.
Сжатие с потерями: • JPEG
Изображение разбивается на блоки 8х8 пикселей чаще всего.
Производится преобразование цветности RGB в модель YUV (LAB). Y интенсивность U и V хроматические.
= 0.299R + 0.587G + 0.114B U = 0.1687R - 0.3313G + 0.5B
= 0.5R -01187G + 0.081B
3 применение дискретного косинусоидальнного преобразования. Превращает массив данных интенсивности в массив данных частот. Применяется отдельно для каждого цвета и внутри области 8х8.
F(u,v)=
C(u)C(v)
Наибольшее значение при формировании изображения имеет низкая частота, она отвечает за крупные детали, высокая частота отвечает за мелкие. Высокие частоты мы убираем, это и есть наши потери. Уменьшение информации в JPEG за счет частот.
4 деление на матрицу квантования.
Эта матрица задается пользователем, через задачу качества.
Пример матрицы квантования из mpeg
Потом матрица 8х8
вытягивается в вектор. Зигзагообразно.
порядок обхода.
Потом удаляем 0.
Кодируем хафманом.
