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


Введение в Image Processing Library

Некоторые из методов обработки изображений предельно просты, некоторые предельно сложны. В рамках данного курса следует сосредоточиться на сущности методов, ситуациях и результатах их применения. Поэтому реализацией самих методов мы заниматься не будем, а воспользуемся библиотекой Intel Image Processing Library, которая в образовательных учреждениях может использоваться бесплатно. Среди возможностей библиотеки выделим следующие:

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

К сожалению, функций для чтения и записи изображений в какой-либо стандартный формат библиотека IPL не предоставляет.

Имена в библиотеке IPL

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

  • все константы имеют префикс IPL и записываются прописными буквами, например: IPL_SIDE_LEFT;
  • имена структур начинаются с префикса Ipl, например: IplImage, IplROI;
  • все функции имеют префикс ipl и составные имена со следующей структурой: ipl<action><target>()
    где action – показывает, что делает функция, например: Set, Create, или Convert; target – уточняет, что именно она делает, например: ConvKernel или FromDIB.

Каждая часть составного имени функции начинается с большой буквы, например, iplAlphaComposite.

Изображение в библиотеке IPL

В библиотеке IPL поддерживаются следующие цветовые модели:

  • Монохромная или полутоновая (один цветовой канал).
  • Цветные (3 цветовых канала RGB, HSV, CMY).
  • Цветные (4 цветовых канала CMYK, RGBA).
  • Полихромные (с любым количеством цветовых каналов).

Библиотека позволяет выполнять обработку только одного или сразу всех цветовых каналов изображения.

Цифровое изображение в библиотеке IPL могут составлять значения различных типов знаковое целое (signed integer), беззнаковое целое (unsigned integer) или вещественное с плавающей точкой (floating-point). С использование различных типов данных поддерживаются следующие цветовые модели (s = signed, u = unsigned, f = float):

  • Полутоновая 1, 8s, 8u, 16s, 16u и 32f бит на пиксел.
  • Цветная трехканальная 8u и 16u бит на пиксел.
  • Четырех- и мультиканальная 8s, 8u, 16s, 16u, 32s и 32f бит на пиксел.

Изображение может храниться попиксельно (с различным порядком хранения цветовых компонент RGB, BGR и т.д.) и цветовыми плоскостями (когда отдельно хранятся данные для каждого цветового канала). При создании изображения в библиотеке IPL требуется указать способ её хранения.

В библиотеке IPL поддерживается две координатные системы:

  1. Начало координат находится в левом верхнем углу изображения, при этом координата x увеличивается слева направо, а координата y – сверху вниз.
  2. Начало координат находится в левом нижнем углу изображения, при этом координата x увеличивается слева направо, а координата y – снизу вверх.

Важным и мощным средством библиотеки IPL является область представляющая интерес (ОПИ, region of interest, ROI). С использованием этого понятия и специальной структуры данных можно выполнять преобразования только над частью изображения. В библиотеке возможны три типа ОПИ:

  • Канал представляющий интерес (КПИ, сhannel of interest, COI).
  • Прямоугольная область представляющая интерес (rectangular ROI).
  • Масочная область представляющая интерес (mask ROI).

Некоторые функции обработки изображений библиотеки IPL позволяют выбрать способ преобразования: по месту (in-place) или во вне (out-of-place). Понятно, что преобразования по месту не требуют переразмещения изображения в памяти, а результат преобразования записывается в исходное изображение. Следует заметить, что такое преобразование возможно не во всех случаях.

Кроме того, библиотека IPL поддерживает механизм фрагментации изображения (image tiling), который позволяет разбивать большое изображение на несколько маленьких. Тогда выполнения функция организуется так, что в памяти находится только небольшой кусок изображения. При определенных условиях это позволяет сделать обработку больших изображений более оптимальной. Для разбиения изображения используется специальная структура данных IplTileInfo.

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

IplImage* iplCreateImageHeader(int nChannels, int alphaChannel, int depth, char* colorModel, char* channelSeq, int dataOrder, int origin, int align, int width, int height, IplROI* roi, IplImage* maskROI, void* imageID, IplTileInfo* tileInfo);

nChannels
Количество цветовых каналов в изображении.
alphaChannel
Номер альфа-канала (канала прозрачности). Если в качестве значение этого аргумента указан 0, то это означает, что в изображении нет альфа-канала. Альфа-канал должен быть последним каналом изображения.
depth
Глубина цвета пикселов изображения, может принимать одно из следующих значений: IPL_DEPTH_1U, IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, IPL_DEPTH_16S, IPL_DEPTH_32S или IPL_DEPTH_32F.
colorModel
Строка, обозначающая цветовую модель изображения: "RGB", "GRAY", "HLS" и т.д.
channelSeq
Порядок следования цветовых каналов, может принимать одно из следующих значений: "G", "GRAY", "BGR", "BGRA", "RGB", "RGBA", "HSV", "HLS", "XYZ", "YUV", "YCr", "YCC", "LUV".
dataOrder
Порядок расположения данных, может быть IPL_DATA_ORDER_PIXEL или IPL_DATA_ORDER_PLANE.
origin
Начало координат в изображении, может принимать одно из следующих значений: IPL_ORIGIN_TL или IPL_ORIGIN_BL.
align
Выравнивание данных, может принимать одно из следующих значений: IPL_ALIGN_DWORD или IPL_ALIGN_QWORD.
width
Ширина изображения в пикселах.
height
Высота изображения в пикселах.
roi
Указатель на структуру, описывающую область представляющую интерес. Этот аргумент может принимать значение NULL, что соответствует ОПИ покрывающей все изображение полностью.
maskROI
Указатель на заголовок другого изображения, которое описывает масочную ОПИ. Значение аргумента NULL указывает, что масочная ОПИ не используется. Пиксел изображения будет обработан, если значение соответствующего пиксела маски равно 1, и не будет обработан, если значение пиксела маски равно 0. Аргумент maskROI в этом изображении, используемом в качестве маски, игнорируется.
imageID
Идентификатор изображения (может использоваться для идентификации изображения в приложении).
tileInfo
Указатель на структуру IplTileInfo, содержащую информацию, используемую для фрагментации изображения.