Цифровая обработка графикиРефераты >> Программирование и компьютеры >> Цифровая обработка графики
Таким образом, любое число в диапазоне [0.18989472 0.1898954112] однозначно кодирует исходный массив. В двоичном дробном виде как 0.XXXXXXXX .Для хранения такого числа хватит n бит (размерность XXXXXXXX ), где n ближайшее целое, удовлетворяющее неравенству: 2n > Интервал-1=0.0000006912-1. Искомое n равно 21. То есть мы можем закодировать исходный массив 21 битом. В данном примере - 001100001001110111111. Процедура декодирования обратная и состоит в выполнении n раз следующего:
1. Ищем в таблице интервал, в который попадает наше число Ч, и выдаем символ в него входящий в декодируемый массив.
2. Интервал И = ВГ символа - НГ символа (оба значения - из таблицы).
3. Ч = (Ч - НГ) / И.
Шаг |
Число |
Символ |
НГ |
ВГ |
Интервал |
1 |
0.18989472 |
К |
0 |
0.4 |
0.4 |
2 |
0.4747368 |
З |
0.4 |
0.5 |
0.1 |
3 |
0.747368 |
С |
0.5 |
0.8 |
0.3 |
4 |
0.82456 |
Г |
0.8 |
0.9 |
0.1 |
5 |
0.2456 |
К |
0 |
0.4 |
0.4 |
6 |
0.614 |
С |
0.5 |
0.8 |
0.3 |
7 |
0.38 |
К |
0 |
0.4 |
0.4 |
8 |
0.95 |
Б |
0.9 |
1 |
0.1 |
9 |
0.5 |
С |
0.5 |
0.8 |
0.3 |
10 |
0 |
К |
0 |
0.4 |
0.4 |
В данном примере арифметический кодер «обогнал» метод Хаффмана на 1 бит. В отличие от метода Хаффмана трудоемкость алгоритма значительна. В чем же тогда «полезность» алгоритма? Рассмотрим последовательность КККККККС. При кодировании методом Хаффмана получим выходную последовательность длиной в 9 бит (можно и в 8, так как массив состоит из 2 разных байт). При арифметическом кодировании данную последовательность можно закодировать числом 0.4375 или в двоичном виде как 0111, занимающей 4 бита. То есть при арифметическом кодировании возможно получать плотность кодирования меньше бита на символ. Это свойство проявляется, когда во входном массиве частоты некоторых символов значительно выше остальных.
Обработка графической информации.
Для простоты изложения пусть изображение хранится в квадратной матрице X с элементами xi,j N строк на N столбцов. Для некоторых методов применяют разбивку исходного изображения на блоки. Обрабатывая матрицу, мы будем иметь временную сложность алгоритма как минимум кратной N3 . Для ее уменьшения поступают следующим образом: разбивают изображение на несколько малых размером n на n, n << N, каждое малое изображение будем обрабатывать отдельно. Тогда, вместо N3 будем иметь N2n сложность алгоритма.
В данном разделе будем рассматривать сжатие графической информации с потерями. То есть из сжатого выходного массива невозможно при декодировании получить исходный. Но будем сжимать таким образом, чтобы потери как можно меньше воспринимались глазом при демонстрации данной графической информации.
Самый первый способ, который приходит в голову, следующий. Уменьшим количество бит для хранения одного пикселя (элемента исходной матрицы). Пусть пикселы исходного изображения имеют формат RGB Truecolor 8:8:8 (на каждую цветовую составляющую отводится по 8 бит). Перекодируем изображение в формат 5:5:5 (то есть каждая цветовая составляющая будет иметь 25 =32 градации), отбрасывая младшие четыре бита изображения. Мы также можем использовать свойство глаза наиболее хорошо различать цвет в области зеленого и кодировать изображение в формат RGB 4:5:4 и каждый пиксел будет занимать два байта.
Можно пойти еще дальше: перевести исходное изображение в другую цветовую модель и отформатировать его. Например, в YIQ 6:3:3 - отводим на яркость 6 бит, на синфазный и интегрированный каналы по 3, используя то, что человеку более важна информация об интенсивности, нежели о цвете. При «жадном» кодировании, когда используем малое количество бит на пиксел, сразу после декодирования, перед выводом изображения можно провести так называемый anti-aliasing - сгладить резкие цветовые переходы, возникшие из-за малого числа градаций цветовых составляющих. Дальнейшее усовершенствование заключается в индексировании цветов. RGB Truecolor формат может поддерживать более 16 млн. цветов. Выберем n (обычно n - степень 2 ) индексных цветов cK так, чтобы минимизировали сумму:
.
Далее создаем выходной массив B N на N, элемент которого bi,j равен k, где k= m - номер цвета такой, что выполняется . Выходная информация - массив B и собственно таблица индексных цветов c. Результаты данного подхода можно посмотреть в разделе «Форматирование и индексирование изображений».
Рассмотрим семейство кодеров изображения, основанных на отбросе коэффициентов преобразования. Все они используют разбивку на блоки. Пусть Y - получаемое изображение, A - матрица преобразования.