(C) Кручинин Александр, 2010. http://vidikon.com support@vidikon.com
(C) Российский фонд фундаментальных исследований, 2010.


ImagePak
Библиотека для обработки и распознавания графических изображений
Версия 1.1
  1. Назначение
  2. Geometry
  3. Img
  4. Img_transf
  5. Math_a
  6. Geoman
  7. Detect_img
  8. Contour
  9. Grid
  10. Histogram
  11. Segment
  12. Comparison
  13. Дополнительно
Segment

     Описывается версия Segment 1.00. Сегментация изображения.


Структура HISTO_1D

struct SEGMENTSH
{
         int AllDifSeg;
         int Width,Height;
         int* ptr;
         bool* binary;
};

     Структура описывает найденные сегменты данных на изображении для гистограммного подхода к сегментации. Параметры:
AllDifSeg - общество количество различных сегментов;
Width,Height - количество блоков в ширину и высоту (для блочной сегментации);
ptr - указатель на массив (размером Height*Width), содержащий принадлежность каждому сегменту;
binary - указатель на массив (размером Height*Width), содержащий признак бинарности.


Функция SegmentationH

SEGMENTSH SegmentationH(IMG Img,int Segment,int Hist,double param,double Binary,DWORD flags=0);

     Функция реализует алгоритм сегментации на основе гистограмм яркости. Параметры:
Img - 8-битное изображение, на котором осуществляется сегментация;
Segment - размер блока в пикселях (нельзя делать меньше 2);
Hist - количество элементов гистограммы должно быть четно и желательно делиться на 4;
param - пороговый уровень в алгоритме сегментации;
Binary - значение для вычисления бинарности;
flags - флаги, SEG_BINARY_ON - проводить вычисление на бинарность, SEG_NO_SMALL - удаление небольших сегментов.
     Бинарные изображения - изображения, изначально состоящие из комбинаций двух пикселей: чёрного и белого.
    Известно, что гистограммы яркости для бинарных изображений сильно отличаются от полноцветных. Разделив всё изображение на квадратные блоки фиксированного размера пикселей s, можно сравнить гистограммы полученных блоков и получить сегментированное изображение с минимальной единицей измерения s. Если изображение не делится на целое количество блоков размером s, то для выполнения первого условия задачи можно обрезать края.
     При сравнении гистограмм яркости блоков необходимо учитывать пороговый уровень, ниже которого гистограммы считаются равными. Условие отнесения блоков к одному сегменту при сравнении критерием хи-квадрат:


     где p – пороговый уровень, который может быть в диапазоне от 0 до 1.
     Блоки перебираются построчно последовательно. Если для текущего проверяемого блока какой-нибудь элемент сверху, снизу, справа или слева удовлетворяет условию, то этот элемент считается принадлежащим сегменту текущего блока.
     На этапе получения гистограмм для каждого блока можно осуществить проверку на бинарность. Параметр определения бинарности задаваемый пользователем, рекомендуется использовать в диапазоне от 0.5 до 0.8.


Функция DeleteSegmentsh

void DeleteSegmentsh(SEGMENTSH ss);

     Функция удаляет выделенную для сегментов память.


Функция ReturnRectSegmentsh

int ReturnRectSegmentsh(SEGMENTSH ss,int Segment,RECT &Rect,int elem,int maxrect,DWORD flags=0);

     Функция области, соответствующие сегментам изображения. Параметры:
ss - сегменты, полученные SegmentationH;
Segment - размер блока в пикселях (нельзя делать меньше 2);
Rect - выходной массив RECT;
elem - сколько бинарных элементов должно быть в массиве, чтобы возвратить Rect;
maxrect - размер массива Rect;
flags - флаги, SEG_BINARY_MAX - возвратить информацию только для одного сегмента с максимальным количеством бинарных элементов.


Функция DrawSegmentsH

void DrawSegmentsH(IMG Img,SEGMENTSH ss,int Segment,DWORD flags=0);

     Функция отображает на 24-битном изображении сегментацию. Если указан флаг SEG_BINARY_ON - отображаются только бинарные блоки, SEG_BINARY_FULL - весь сегмент с бинарными блоками, SEG_BINARY_MAX - сегмент с максимальным количеством бинарных блоков.