русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Бинаризация


Дата добавления: 2014-02-04; просмотров: 1269; Нарушение авторских прав


Препарирование изображений

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

В отличие от методов фильтрации при выполнении процедур препарирования на результат оказывает влияние значение интенсивности только в обрабатываемой точке, а не в ее окрестности. Такая обработка называемая поэлементной.

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

,

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

одинаковой для всех точек кадра.

Простейшим методом препарирования изображений является бинаризация. Это преобразование заключается в превращении изображения в двухцветное черно-белое. Главным параметром такого преобразования является порог – значение, которое будет критерием проверки интенсивности точки изображения. Функция бинаризации представлена на рисунке 1.



Рис. 1. Функция бинаризации

В библиотеке IPL для выполнения бинаризации используется функция iplThreshold, которая имеет следующий прототип:

void iplThreshold(IplImage* srcImage, IplImage* dstImage, int threshold);

где srcImage – указатель на исходное изображение, а dstImage – указатель на изображение, в котором будет сохраняться результат. Аргумент threshold задает пороговое значение. Функция бинаризации может выполняться по месту, то есть ее использование никаких затруднений не вызывает.

Результат выполнения бинаризации с полутоновым изображением представлен на рисунке 2, а с цветным – на рисунке 3.

iplThreshold

Рис. 2. Действие функции iplThreshold с пороговым значением 128

iplThreshold

Рис. 3. Действие функции iplThreshold с пороговым значением 128

Иногда при обработке приходится иметь дело с изображениями, хранимыми как полутоновые, но по своему содержанию мало отличающимися от бинарных. К ним относятся текст, штриховые рисунки, чертежи, изображение отпечатка пальца. Замена исходного полутонового изображения бинарным препаратом решает две основные задачи. Во-первых, достигается большая наглядность при визуальном восприятии, чем у исходного изображения. Во-вторых, ощутимо сокращается объем запоминающего устройства для хранения изображения, поскольку бинарный препарат для записи каждой точки бинарного изображения требует лишь 1 бит памяти, в то время как полутоновое изображение для решения той же задачи при наиболее часто применяемом формате представления - 8 бит.

Для реализации других методов препарирования изображений необходимо познакомиться со структурой IplLUT и правилами работы с ней. Вообще, структура IplLUT предназначена для хранения информации о функции препарирования. Она имеет следующий состав:

typedef struct _IplLUT
{
int num; // количество ключевых значений
int* key; // указатель на массив ключевых значений
int* value; // указатель на массив значений (либо величина сдвига, либо непосредствено новые значения интенсивности)
int* factor; // указатель на массив дополнительных множителей
int interpolateType; // тип преобразования
} IplLUT;

Массив ключевых значений должен иметь размер равный num. Массивы value и factor должны иметь размер num-1. Параметр interpolateType может быть равен IPL_LUT_LOOKUP или IPL_LUT_INTER.

Если тип преобразования IPL_LUT_LOOKUP, то интенсивность исходного изображения D из диапазона key[0] <= D < key[1] после преобразования будет равна значению value[0], из диапазона key[1] <= D < key[2] – value[1] и так далее.

Если тип преобразования IPL_LUT_INTER, то интенсивность исходного изображения D из диапазона key[0] <= D < key[1] после преобразования будет равна значению линейно интерполированному значению: value[0] + [(value[1] – value[0]) / (key[1] – key[0])] * (D – key[0]).

Значение (value[1] – value[0]) / (key[1] – key[0]) соответствует наклону интерполирующей линии в этой точке и должно быть заранее вычислено и сохранено в factor[0]. Формулу, которая используется библиотекой, можно записать так: D_ = value[i] + factor[i] * (D – key[i]).

К сожалению, библиотека IPL не предоставляет никаких функций для созданий и манипулирования структурой IplLUT, поэтому создадим свои:

void CreateLUT(IplLUT* lut)
{
lut->key = new int[lut->num];
lut->value = new int[lut->num-1];
lut->factor = new int[lut->num-1];

for(int i=0; i<lut->num; i++)
{
lut->key[i] = i;
}
}

void DeleteLUT(IplLUT* lut)
{
delete [] lut->key;
delete [] lut->value;
delete [] lut->factor;
}

Функция для выполнения препарирования изображений может быть реализована следующим образом:

void Preparing(IplImage* img, int type)
{
// Создание lookup-таблиц
IplLUT lut[3] = {{256 + 1, NULL, NULL, NULL, IPL_LUT_INTER},
{256+1, NULL, NULL, NULL, IPL_LUT_INTER},
{256+1, NULL, NULL, NULL, IPL_LUT_INTER}};

// Создание и инициализация массива указателей на lookup-таблицы
IplLUT* plut[3];
plut[0] = &lut[0];
plut[1] = &lut[1];
plut[2] = &lut[2];

// Инициализация членов lookup-таблиц
CreateLUT(plut[0]);
CreateLUT(plut[1]);
CreateLUT(plut[2]);

switch(type)
{
// Подготовка lookup-таблиц
...
}

// Препарирование
iplContrastStretch(img, img, plut);

// Удаление членов lookup-таблиц
DeleteLUT(plut[0]);
DeleteLUT(plut[1]);
DeleteLUT(plut[2]);
}

При реализации некоторых методов препарирования бывает необходима дополнительная информация об изображении. Её можно получить с использованием гистограммы, для вычисления которой предусмотрена специальная функция:

void iplComputeHisto(IplImage* srcImage, IplLUT** lut);

где srcImage – изображение для которого будет вычисляться гистограмма, а lut – массив указателей на структуры LUT (один указатель на каждый канал).

 



<== предыдущая лекция | следующая лекция ==>
Повороты изображений | Линейное контрастирование


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.084 сек.