Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12652.rtf
Скачиваний:
11
Добавлен:
08.09.2019
Размер:
2 Mб
Скачать

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-изображение, а на выходе - преобразованное изображение.

Текст программы приведен в Приложении А.

3.2 Разработка программно-аппаратного модуля на языке С++

Язык программирования часто можно определить, просто взглянув на исходный текст программы. Так, программа на языке APL напоминает иероглифы, текст на языке ассемблера представляется столбцами мнемоник, язык Pascal выделяется своим читабельным синтаксисом. А что можно сказать о языке С? Многие программисты, впервые столкнувшиеся с ним, находят его слишком замысловатым и пугающим. Конструкции, напоминающие выражения на английском языке, которые характерны для многих языков программирования, в С встречаются довольно редко. Вместо этого программист сталкивается с необычного вида операторами и обилием указателей. Многие возможности языка уходят своими корнями к особенностям программирования на компьютерах, существовавших на момент его появления.

В основу С положено значительно меньше синтаксических правил, чем у других языков программирования. В результате для эффективной работы компилятора языка достаточно всего 256 Кб оперативной памяти. Действительно, список операторов и комбинаций в языке С обширнее, чем список ключевых слов.

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

Язык С содержит все управляющие конструкции, характерные для современных языков программирования, в том числе инструкции for, if/else, switch/case,while и другие. На момент появления языка это было очень большим достижением.

Язык С также позволяет создавать изолированные программные блоки, в пределах которых переменные имеют собственную область видимости. Разрешается создавать локальные переменные и передавать в подпрограммы значения параметров, а не сами параметры, чтобы защитить их от модификации.

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

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

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

Текст программы приведён в Приложении Б.

Суть данной программы заключается в том, что входным файлом к программе является файл изображения в формате BMP от которого отделяется заголовок и данные о цвете переводятся из RGB представления в цветовую модель YCRCb, далее программа работает по стандартному алгоритму который описан выше. Результатом работы части программы которая отвечает за компрессию является текстовый файл в котором записано числовое представление сжатого изображения. Та часть программы которая отвечает за декомпрессию читает полученный на предыдущем этапе файл и перекодирует его обратно в BMP файл (это необходимо для того чтобы увидеть получившийся результат)

В качестве входных данных используется графический файл.

Выходные данные представлены изображение исходное и изображение сжатое.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]