Выполнение логических и арифметических операций над изображенями
Простейшими средствами, которые позволяют решать задачи обнаружения объектов на изображении и распознавания образов, являются логические и арифметические операции. Для выполнения над изображениями арифметических и логических операций библиотека IPL предоставляет большой набор функций, который можно разделить на две группы:
одноместные (monadic) функции, которые в операции участвуют изображения и константа;
двуместные (dyadic) функции, когда в операции участвуют два изображения.
Рассмотрим выполнение логических операций. Одноместная функция для выполнения логической операции И имеет следующий прототип:
void iplAndS(IplImage* srcImage, IplImage* dstImage, unsigned int value);
где srcImage – указазатель на исходное изображение, а dstImage – указатель на изображение, в котором функция должна сохранить результат. Аргумент value представляет собой последовательность бит, которая будет использоваться в побитовой операции И в комбинации с каждым пикселом изображения.
Функции логических и арифметических операций библиотеки IPL позволяют осуществлять их выполнение по месту, то есть записывать результат операции в исходное изображение. Таким образом, при выполнении логической операции И над изображением img, вызов данной функции может выглядеть следующим образом:
iplAndS(img, img, 128);
Результат выполненного преобразования представлен на рисунке 1. С помощью этой операции нам удалось выделить область изображения, интенсивность которой больше либо равна 128.
iplAndS
Рис. 1. Действие функции iplAndS с аргументом value=128
Двуместная функция для выполнения логической операции И имеет следующий прототип:
где srcImageA и srcImageB – указатели на исходные изображения, а dstImage – указатель на изображение, в котором будет сохранен результат побитовой операции И. Результат выполнения этой функции представлен на рисунке 2. С помощью этой операции удается выделить на изображении те области, которые имеют одинаковый цвет.
iplAnd
Рис. 2. Действие функции iplAnd
Одноместная функция для выполнения логической операции ИЛИ имеет следующий прототип:
void iplOrS(IplImage* srcImage, IplImage* dstImage, unsigned int value);
где srcImage – указатель на исходное изображение, а dstImage – указатель на изображение, в котором функция должна сохранить результат. Аргумент value представляет собой последовательность бит, которая будет использоваться в побитовой операции ИЛИ в комбинации с каждым пикселом изображения. Результат выполнения побитового ИЛИ с аргументом value = 63 представлен на рисунке 3. В данном примере операция ИЛИ дает четырехцветную топографическую карту исходного изображения.
iplOrS
Рис. 3. Действие функции iplOrS с аргументом value=63
Двуместная функция для выполнения логической операции ИЛИ имеет следующий прототип:
где srcImageA и srcImageB – указатели на исходные изображения, а dstImage – указатель на изображение, в котором будет сохранен результат побитовой операции ИЛИ. Результат выполнения этой функции представлен на рисунке 4. С помощью этой операции на изображении выделены пикселы, которые хотя бы на одном из исходных изображений имеют белый цвет.
iplOr
Рис. 4. Действие функции iplOr
Одноместная функция для выполнения логической операции ИСКЛЮЧАЮЩЕЕ ИЛИ имеет следующий прототип:
void iplXorS(IplImage* srcImage, IplImage* dstImage, unsigned int value);
где srcImage – указатель на исходное изображение, а dstImage – указатель на изображение, в котором функция должна сохранить результат. Аргумент value представляет собой последовательность бит, которая будет использоваться в побитовой операции ИСКЛЮЧАЮЩЕЕ ИЛИ в комбинации с каждым пикселом изображения. Результат выполнения побитового ИСКЛЮЧАЮЩЕГО ИЛИ с аргументом value = 127 представлен на рисунке 5.
iplXorS
Рис. 5. Действие функции iplXorS с аргументом value=127
Двуместная функция для выполнения логической операции ИСКЛЮЧАЮЩЕЙ ИЛИ имеет следующий прототип:
где srcImageA и srcImageB – указатели на исходные изображения, а dstImage – указатель на изображение, в котором будет сохранен результат побитовой операции ИСКЛЮЧАЮЩЕЙ ИЛИ. Результат выполнения этой функции представлен на рисунке 6. С помощью этой операции на изображении выделены пикселы, цвет которых на исходных изображениях не совпадает.
iplXor
Рис. 6. Действие функции iplXor
Функция для выполнения логической операции НЕ имеет следующий прототип:
void iplNot(IplImage* srcImage, IplImage* dstImage, unsigned int value);
где srcImage – указатель на исходное изображение, а dstImage – указатель на изображение, в котором функция должна сохранить результат. Операция НЕ позволяет инвертировать изображение (Рис. 7).
iplNot
Рис. 7. Действие функции iplNot на полутоновое изображение
Все функции для выполнения арифметических и логических операций могут применяться не только к полутоновым, но и к цветным изображениям. Тогда побитовые операции выполняются с пикселом каждого цветового канала отдельно. На рисунке 8 представлен результат выполнения логической операции НЕ с цветным изображением.
iplNot
Рис. 8. Действие функции iplNot на цветное изображение