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

     Описывается версия Geoman 1.01. Геометрический анализ.
Изменения (1.01):
- добавлена функция AccuracyLine1;
- добавлена функция AccuracyLine2;
- добавлена функция AccuracyLineBlack;
- добавлена функция ReturnDifference;
- добавлена функция ReturnFirstPoint;
- добавлена функция ReturnArrayBlackWhite;
- добавлена функция ReturnNumArray.


Функция AccuracyLine

F_LINE AccuracyLine(IMG img,F_LINE base_line,C_POINTd point,double alfa,int steps,double Step_line);

     Функция предназначена для уточнения пунктирной линии.
Параметры:
img - 8-битное изображение, на котором уточняется пунктирная линия;
base_line - базовая линия, наклон которой должен уточняться;
point - точка, которая является центром для поворота линий;
alfa - максимальный угол отклонения в одну и другую стороны;
steps - количество шагов в каждую сторону (углы);
Step_line - проверяемая линия не может быть бесконечной, этот параметр определяет длину линии в обе стороны от точки.

     Функция работает следующим образом. 1 этап. Синхронизирующая пунктирная линия обычно не бывает толщиной в один пиксель, поэтому надо найти точку, через которую проходит эта линия. Это можно сделать разными способами: а) перебрать большинство точек изображения, вычисляя для каждой линию; б) перебрать только пиксели выделенных контуров; в) используя какой-либо другой способ (например, когда вы распознайте 2D штрих-код, то вы уже примерно представляете, где находится эта пунктирная линия и необходимо только уточнить её направление).
     2 этап. Задаём диапазон углов, в которых может находиться пунктирная линия. Если вам категорически ничего не известно, то задавайте 360 градусов, т.е. 2*PI. Задаём количество шагов для определения линий в диапазоне углов, естественно оно должно быть умеренным – т.к. тут в силу вступает компромисс – качество и производительность. Задаём длину линии – она не может быть у нас бесконечной. Вы должны задать размер, который обязательно меньше реальной длины линии.
     3 этап. Согласно диапазону углов и шагов в цикле перебираем все возможные линии с центром линии в задаваемой на этапе 1 точке. Для каждой линии вызываем функцию, которую можно назвать OnBlackWhite(). Эта функция по формуле линии определяет перепады яркости, считая по сколько пикселей приходится на каждый перепад. Полученные количество и величину перепадов сохраняем, после чего находятся математическое ожидания и дисперсия перепадов.
     4 этап. Из всех значение дисперсии находится минимальное, которое и будет соответствовать линии в наибольшей степени соответствующей пунктиру.


На графике минимум достигается на шаге 21, который и соответствует пунктиру.

Функция AccuracyLine1 (**экспериментальная)

F_LINE AccuracyLine1(IMG img,F_LINE base_line,C_POINTd point,C_POINTd point1,double alfa,int steps);

     Функция предназначена для уточнения пунктирной линии.

Функция AccuracyLine2

F_LINE AccuracyLine2(IMG img,F_LINE base_line,C_POINTd point,C_POINTd point1,double alfa1,double alfa2,int steps);

     Функция предназначена для уточнения пунктирной линии.
Параметры:
img - 8-битное изображение, на котором уточняется пунктирная линия;
base_line - базовая линия, наклон которой должен уточняться;
point - точка, которая является центром для поворота линий;
point1 - точка, которая является поворачиваемым краем;
alfa - максимальный угол отклонения в сторону, с которой начинается приближение;
alfa1 - максимальный угол отклонения в сторону, на которой заканчивается приближение к пунктирной линии;
steps - количество шагов в каждую сторону (углы).
     В отличии от функции AccuracyLine, данная функция фиксирует линию на одном крае и вращает другой причём по заданному направлению - последовательно от одного края к другому.

Функция AccuracyLineBlack

F_LINE AccuracyLineBlack(IMG img,F_LINE base_line,C_POINTd point,C_POINTd point1,double alfa1,double alfa2,int steps);

     Функция предназначена для уточнения тёмной (пиксели со значением 0) линии.
Параметры:
img - 8-битное изображение, на котором уточняется линия;
base_line - базовая линия, наклон которой должен уточняться;
point - точка, которая является центром для поворота линий;
point1 - точка, которая является поворачиваемым краем;
alfa - максимальный угол отклонения в сторону, с которой начинается приближение;
alfa1 - максимальный угол отклонения в сторону, на которой заканчивается приближение к пунктирной линии;
steps - количество шагов в каждую сторону (углы).
     Данная функция фиксирует линию на одном крае и вращает другой причём по заданному направлению - последовательно от одного края к другому.

Функция ReturnDifference

int ReturnDifference(IMG img,double x1,double y1,double x2,double y2,F_LINE f3,DWORD flags);

     Функция предназначена для анализа перепадов яркости.
Параметры:
img - 8-битное изображение;
x1 и y1 - начальная точка;
x2 и y2 - конечная точка;
f3 - линия, относительно которой ищутся перепады яркости;
flags - поддерживается только либо отсутствие флагов, либо флаг DIFFERENCE_BLACK_BLACK, означающий, что возвращается количество перепадов с первого тёмного по последний тёмный.
     Функция возвращает количество перепадов яркости.

Функция ReturnArrayBlackWhite

int *ReturnArrayBlackWhite(DWORD flags);

     Возвращает массив перепадов яркости, построенных ReturnDifference. Поддерживается флаг DIFFERENCE_BLACK_BLACK.


Функция ReturnNumArray

int ReturnNumArray(int num);

     Возвращает размер перепада яркости с указанным номером с прибавленным значением what_cell*10000.


Функция ReturnFirstPoint

C_POINTd ReturnFirstPoint(IMG img,F_LINE f,C_POINTd point1,C_POINTd point2,BYTE color, BYTE color1);

     Функция возвращает первую точку при переборе на 8-битном img по линии f от точки point1 до точки point2, которая соответствует цвету color или color1.