(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. Дополнительно
Contour

     Описывается версия Contour 1.01. Контурный анализ.
Изменения (1.01):
- поддержка флага CONTOUR_CONSISTENTLY в функции Find класса CONTOUR;
- добавлена функция CONTOUR::FindBorderPoint1 последовательного поиска точек контура (экспериментальное);
- добавлена функция CONTOUR::AccuracyLine.


Структура CONTOUR_STRUCT

struct CONTOUR_STRUCT
{
         WORD all_elem;//общее количество точек в одном контуре
         C_POINT* Points;//Указатель на массив точек
         RECT Zone;//зона контура
         int mama;//родитель если -1, то никого нет
         int level;//уровень вхождения
};

     Структура описывает контур. all_elem содержит в себе общее количество точек в контуре, Points - указатель на массив точек, Zone - описывает прямоугольник, в котором находится контур, mama - указатель на родителя (внешний) контур, если -1, то никаких внешних контуров нет, level - уровень вложенности контура.

Класс CONTOUR

     Класс предназначен для выполнения операций связанных с контурами. Ниже описаны доступные функции класса.
Функция Find

int Find(IMG img,RECT rect,byte c,DWORD flags);

     Функция находит в 8-битном изображении img в области rect контуры с цветом c, выделенные до этого, например, с помощью функции AllocationBorders. Если flags определено как CONTOUR_AUTO_INOUT, то находится вложенность контуров. Если установлен флаг CONTOUR_CONSISTENTLY, то контур находится другим методом. Функция возвращает 0 при удачном выполнении.

Функция DrawContour

int DrawContour(IMG img,int num_counter,byte c1,byte c2,byte c3);

     Функция рисует на 24-битном изображении img контур под номером num_counter BGR цветом (c1,c2,c3). Функция возвращает 0 при удачном выполнении.

Функция DrawContours

int DrawContours(IMG img,byte c1,byte c2,byte c3);

     Функция рисует на 24-битном изображении img все контуры BGR цветом (c1,c2,c3). Функция возвращает 0 при удачном выполнении.

Функция ReturnMaxLevel

void ReturnMaxLevel(int &level,int &first,int &all);

     Функция возвращает максимальный уровень вложенности среди контуров level, номер первого контура с такой вложенностью first, а также общее количество контуров с таким уровнем вложенности all.

Функция ReturnCenterContour

C_POINT ReturnCenterContour(int num_con);

     Функция возвращает центральную точку для контура с номером num_con.

Функция ReturnPointInContour

bool ReturnPointInContour(C_POINT c,int num_contour);

     Функция возвращает TRUE, если точка c является точкой контура num_con.

Функция GetMama

int GetMama(int num_contour);

     Функция возвращает номер родительского контура для контура num_con.

Функция Return4DistantPoints

int Return4DistantPoints(C_POINT &c_p,int num_contour);

     Функция находит 4 удалённые точки контура num_contour и записывает их в заранее выделенный массив c_p. Точки возвращаются по диагоналям - первые две точки самые удалённые друг от друга, а следующие две точки - лежат по обе стороны от проводимой между первыми двумя линией. Функция возвращает 0 при удачном выполнении.

Функция PointsInLine

int PointsInLine(F_LINE line,int num_contour);

     Функция возвращает количество точек контура num_contour, через которое проходит линия line.

Функция AllPoints

int AllPoints(int num_contour);

     Функция возвращает общее количество точек контура num_contour.

Функция Accuracy4RombPoints

int Accuracy4RombPoints(C_POINT &c_p,C_POINTd &c_p_d,F_LINE &line,int num_contour);

     Функция уточняет 4 точки ромба c_p полученные Return4DistantPoints для контура num_contour. Применяется, когда известно, что рассматриваемый контур - это четырёхугольник. Функция находит наиболее подходящие линии, которые возвращает в line, а пересечения линий возвращает в c_p_d. И для тех и для других должен быть выделен массив из 4-х элементов до вызова функции. Точки возвращаются в том же порядке, что и подавались, а линии в следующем порядке: 0) между точками 0 и 2, 1) между точками 0 и 3, 2) между точками 1 и 2, 3) между точками 1 и 3. Функция возвращает 0 при удачном выполнении.

Функция ReturnAllContours

int ReturnAllContours();

     Функция возвращает общее количество контуров.

Функция ReturnRectContour

RECT ReturnRectContour(int num_con);

     Функция возвращает область контура num_contour.

Функция AccuracyLine

int AccuracyLine(C_POINT& c_p,C_POINTd &c_p_d,F_LINE &line,int num_contour,int &all_point,double &result,DWORD flags=0);

     Функция уточняет линию в контуре.
Параметры:
c_p - ссылка на две точки, которые определяют линию;
c_p_d - ссылка на две выходные уточнённые точки, которые определяют линию;
line - ссылка на входную линию;
num_contour - номер контура, в котором происходит уточнение;
all_point - ссылка на выходное значение общего количества точек, принадлежащих линии;
result - ссылка на значение определяющее равномерное расположение точек контура относительно линии;
flags - флаги, пока не поддерживается, кроме экспериментального CONTOUR_CONSISTENTLY.
     На вход функции подаются две точки и линия, на выход - уточнённые точки принадлежащие линии и наиболее удалённые друг от друга, уточнённая линия, общее количество точек, равномерность расположения. Функция возвращает 0 при удачном выполнении.