2.2.3 Этап Вторичного Сжатия
Самым распространенным методом вторичного сжатия является метод Хаффмана и его разновидности.
Сжатие Хаффмана - статистический метод сжатия, который уменьшает среднюю длину кодового слова для символов алфавита. Код Хаффмана является примером кода, оптимального в случае, когда все вероятности появления символов в сообщении - целые отри- цательные степени двойки. Код Хаффмана может быть построен по следующему алгоритму:
1.Выписываем в ряд все символы алфавита в порядке возрастания или убывания вероятности их появления в тексте;
2.Последовательно объединяем два символа с наименьшими веро- ятностями появления в новый составной символ, вероятность появ- ления которого полагается равной сумме вероятностей составляю- щих его символов. В конце концов, мы построим дерево, каждый узел которого имеет суммарную вероятность всех узлов, находя- щихся ниже него;
3.Прослеживаем путь к каждому листу дерева помечая направление к каждому узлу (например, направо - 1, налево - 0).
Подведя итог над вышесказанным покажем обобщенную структуру компрессора и декомпрессора по стандарту JPEG:
Рисунок 2.2.1 - Компрессор и декомпрессор JPEG
3. РАЗРАБОТКА ПРОГРАММНО-АППАРАТНЫХ МОДУЛЕЙ
3.1 Разработка программного модуля на языке MatLab
Прежде, чем приступить к разработке программ по обработке изображений для цифровых сигнальных процессоров, необходимо выбрать и алгоритм обработки, провести их всесторонние исследования и определить оптимальные параметры процедур. Затем эти процедуры должны быть реализованы в виде программных модулей, написанных на языке С конкретного сигнального процессора. С практической точки зрения представляется наиболее целесообразным проводить выше указанные исследования в области обработки изображений с использованием системы MatLab, которая является удобным и достаточно простым инструментом исследования и, кроме того, в ее состав входит компилятор языка MatLab на язык С и библиотека математических функций на C++. Таким образок процедуры обработки изображений, написанные в системе МАТLАВ, без особых трудностей преобразуются в исполняемые модули для цифровых сигнальных процессоров семейств ТМS и АDSР. Для исследования методов обработки изображений в системе МАТLАВ 5.2 разработан пакет Image Processing Toolbox, включающий широкий набор функций, который мог быть дополнен путем написания пользователем собственных нетиповых функций.
Базовым типом данных в МАТLАВ является прямоугольная матрица упорядоченного множества действительных или комплексных элемент изображения. Поэтому доступ к произвольному пикселю изображения осуществляется как к элементу матрицы.
МАТLАВ 5.2 поддерживает четыре типа изображений:
1) цветное индексированное;
2) полутоновое яркостное;
3) бинарное изображение;
4) цветное RGB,
Для индексированного цветного изображения требуется наличие двух матриц, таблицы цветности и матрицы индексов. Таблица цветности (со1огтар) представляет собой набор используемых в изображении цветов, а матрица индексов - набор номеров (индексов) от 0 до п-1 соответствующих цветов таблицы цветности. Размер таблицы цветности зависит от количества Nц используемых в изображении цветов и равен Nц *3 , Каждому индексу таблицы соответствуют значения трех RGВ цветов. Для отображения каждого из этих цветов используются действительные числа с двойной точностью в диапазоне от 0,0 (уровень черного) до 1,0 (максимальная интенсивность).
В яркостном типе изображения используется только одна матрица, содержащая значения интенсивности q (уровней серого) каждого из пикселов. Значения интенсивности представляются реальными числами с двойной точностью в диапазоне от 0,0 до 1.0, где уровень 0,0 соответствует черному а 1,0 - белому цвету.
Инструментальные средства MATLAB позволяют обрабатывать изображения отдельными фрагментами (по терминологии MATLAB - блоками) с использованием оконных функций. Это позволяет снизить расход памяти компьютера и повысить скорость обработки. При этом нет необходимости программно задавать перемещения окна (блока) по изображению. Заданная функция автоматически выполняется для каждого фрагмента всего обрабатываемого изображения. Отдельные блоки поочередно покрывают матрицу изображения начиная с левого верхнего угла. Если блоки не укладываются в границах изображения, то недостающие пикселы автоматически заполняются нулями. Аналогичное заполнение нулями производится при обработке пикселов, расположенных на краях изображения.
Для чтения изображения из графического файла применяется функция IMREAD. Ее синтаксическое представление
img_rgb = imread('astrologer.bmp');
В составе MATIAB имеется широкий набор функций для различных преобразований изображений (Image transforms), в частности:
DCT2 и IDCT2 - вычисление двумерного прямого и обратного дискретно-косинусного преобразования соответственно;
FFT2 , FFTn, IFFT2 , IFFTn- прямое и обратное, двумерное и n-мерное быстрые преобразования Фурье;
rgb2ycbcr(in) – Стакндартная функция преобразования, изображения из RGB в YCbCr. В качестве параметра функции передается RGB-изображение, а на выходе - преобразованное изображение.
ycbcr2rgb(in) – функция MatLabа отвечает за преобразования, изображения из YCbCr в RGB. В качестве параметра функции передается YCbCr-изображение, а на выходе - преобразованное изображение.
Текст программы приведен в Приложении А.
Do'stlaringiz bilan baham: |