Вернуться наверх
aco.ifmo.ru photonic
вернуться в оглавление предыдущая глава предыдущий параграф следующий параграф следующая глава


Выполнение арифметических операций

Одноместная функция для выполнения арифметической операции сложения имеет следующий прототип:

void iplAddS(IplImage* srcImage, IplImage* dstImage, int value);

где srcImage – указатель на исходное изображение, а dstImage – указатель на изображение, в котором функция должна сохранить результат. Аргумент value представляет собой значение, которая будет добавлено к значению интенсивности каждого пиксела изображения. На рисунке 1 представлен результат выполнения функции iplAddS, с помощью которой в данном случае была повышена яркость исходного изображения.

iplAddS

Рис. 1. Действие функции iplAddS с аргументом value=50

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

void iplAdd(IplImage* srcImageA, IplImage* srcImageB, IplImage* dstImage);

где srcImageA и srcImageB – указатели на исходные изображения, а dstImage – указатель на изображение, в котором будет сохранен результат арифметического сложения. Результат выполнения этой функции, приведенный на рисунке 2, показывает, что для данных исходных изображений операция алгебраического сложения эквивалентно операции логического ИЛИ.

iplAdd

Рис. 2. Действие функции iplAdd

Одноместная функция для выполнения арифметической операции сложения имеет следующий прототип:

void iplSubtractS(IplImage* srcImage, IplImage* dstImage, int value, BOOL flip);

где srcImage – указатель на исходное изображение, а dstImage – указатель на изображение, в котором функция должна сохранить результат. Аргумент value представляет собой значение, которое будет вычитаться из значению интенсивности каждого пиксела изображения, если аргумент flip = false (Рис. 3). Если аргумент flip = false, то значение интенсивности каждого пиксела будет вычтено из значения аргумента value (Рис. 4).

iplSubtractS

Рис. 3. Действие функции iplSubtractS с аргументом value=50 и flip=false

iplSubtractS

Рис. 4. Действие функции iplSubtractS с аргументом value=200 и flip=true

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

void iplSubtract(IplImage* srcImageA, IplImage* srcImageB, IplImage* dstImage);

где srcImageA и srcImageB – указатели на исходные изображения, а dstImage – указатель на изображение, в котором будет сохранен результат вычитания интенсивности пикселей изображения srcImageB из интенсивности пикселей изображения srcImageA, то есть (srcImageA - srcImageB). На рисунке 5 представлен результат вычитания изображения с горизонтальными линиями из изображения с вертикальными, а на рисунке 6 наоборот – результат вычитания изображения с вертикальными линиями из изображения с горизонтальными.

iplSubtract

Рис. 5. Действие функции iplSubtract

iplSubtract

Рис. 6. Действие функции iplSubtract

Одноместная функция для выполнения арифметической операции умножения имеет следующий прототип:

void iplMultiplyS(IplImage* srcImage, IplImage* dstImage, int value);

где srcImage – указатель на исходное изображение, а dstImage – указатель на изображение, в котором функция должна сохранить результат. Аргумент value представляет собой целочисленное значение, на которое домножается значение интенсивности каждого пиксела изображения. Применение этой функции позволяет добиться существенного повышения яркости изображения (Рис. 7).

iplMultiplyS

Рис. 7. Действие функции iplMultiplyS с аргументом value=2

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

void iplMultiplySScale(IplImage* srcImage, IplImage* dstImage, int value);

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

dst_pixel = src_pixel * value / max_val

где src_pixelis – исходное значение интенсивности пиксела, dst_pixelis – новое значение интенсивности пиксела и max_valis – это максимально возможное значение интенсивности пиксела. Таким образом, эта функция может использоваться для домножения изображений на число большее 0 и меньшее 1. Результат действия этой функции представлен на рисунке 8.

iplMultiplySScale

Рис. 8. Действие функции iplMultiplySScale с аргументом value=200

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

void iplMultiply(IplImage* srcImageA, IplImage* srcImageB, IplImage* dstImage);

где srcImageA и srcImageB – указатели на исходные изображения, а dstImage – указатель на изображение, в котором будет сохранен результат арифметического умножения. Результат выполнения этой функции, приведенный на рисунке 9, показывает, что для данных исходных изображений операция алгебраического сложения эквивалентно операции логического И.

iplMultiply

Рис. 9. Действие функции iplMultiply