Действующий

ГОСТ Р ИСО/МЭК 16022-2008 Автоматическая идентификация. Кодирование штриховое. Спецификация символики Data Matrix (с Изменением N 1)

     9 Рекомендуемый алгоритм декодирования для символики Data Matrix           

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

_______________

Разработаны и иные алгоритмы декодирования с аналогичными функциями.

а) определяют значения параметров размеров и формируют цифровое изображение:

1) задают расстояние , равное 7,5 диаметра апертуры, заданной в системе применения, которое считают минимальной длиной стороны L-образного шаблона поиска;

2) задают расстояние , равное 7,5 диаметра апертуры. Это расстояние считают максимальным промежутком в L-образном шаблоне поиска, допускаемым алгоритмом поиска на этапе b);

3) задают расстояние , равное 1,25 диаметра апертуры, которое считают номинальным наименьшим размером модуля, когда размер апертуры составляет 80% размера символа;

4) формируют черно-белое изображение, используя порог, определенный по методике, установленной в ИСО/МЭК 15415;

б)* осуществляют поиск горизонтальной и вертикальной линий сканирования для двух внешних L-образных границ Data Matrix:

_______________

* Текст документа соответствует оригиналу. - Примечание изготовителя базы данных.

1) продлевают горизонтальную линию сканирования по обе стороны от центральной точки изображения и, следуя вдоль этой линии, находят все точки перехода черное/белое и белое/черное. Для каждой точки перехода, найденной на линии сканирования и приведенной к границе пикселя (называемой далее точкой старта), производят следующее:

i) следуют от точки старта вверх вдоль границы перехода черный - белый, пиксель за пикселем до точки, расположенной на расстоянии от точки старта, или до той точки, в которой линия границы поворачивает вниз;

ii) следуют от точки старта вниз вдоль границы перехода черный - белый, пиксель за пикселем до точки, расположенной на расстоянии от точки старта, или до той точки, в которой линия границы поворачивает вверх;

iii) если при движении вверх достигли точки, отстоящей на от точки старта:

I) проводят линию А, соединяющую конечные точки вертикальной границы перехода;

II) проверяют, чтобы отклонение промежуточных точек границы от прямой линии А находилось в пределах . Если это условие выполняется, то продолжают выполнение с этапа, указанного в перечислении III). В противном случае переходят к выполнению этапа, указанного в перечислении 1) iv), до достижения края границы перехода в противоположное направление;

III) продолжают следовать вверх вдоль границы перехода до расстояния от линии А. Возвращаются в ближайшую точку границы перехода, находящуюся на расстоянии, большем или равном от последней точки границы перехода вдоль линии границы перехода и сохраняют ее как конечную точку границы перехода. Эту точку следует рассматривать как одно из предполагаемых положений границ внешнего края L-образных границ;

IV) продолжают следовать вниз вдоль границы перехода до расстояния от линии А. Возвращаются в ближайшую точку границы перехода, находящуюся на расстоянии, большем или равным от последней точки границы перехода вдоль линии границы перехода и сохраняют ее как конечную точку границы перехода. Эта точка должна быть расположена на предполагаемой границе перехода, и ее следует рассматривать как одно из предполагаемых положений границы внешнего края L-образных границ;

V) вычисляют новую откорректированную линию А1, которая является "наиболее приближенной" линией для границы перехода, определенной на двух предыдущих этапах. "Наиболее приближенную" линию вычисляют с использованием алгоритма линейной регрессии (используя конечные точки для выбора зависимой оси, то есть если они ближе к горизонтальной оси, зависимая ось - ось х) для каждой точки. На "наиболее приближенной" прямой линии отмечают отрезок, ограниченный точками p1 и р2, которые являются ближайшими к найденным выше конечным точкам границы перехода;

VI) сохраняют две конечные точки отрезка линии А1 - p1 и р2. Также сохраняют значение цвета левой стороны края границы перехода, видимое при движении от p1 к р2;

iv) если этап, указанный в перечислении iii), закончился неудачей или невозможно продолжить движение вниз на на этапе, указанном в перечислении iii) IV), проверяют, достигнута ли снизу граница перехода на расстоянии от точки старта. Если да, повторяют операции этапа, указанные в перечислении iii), но не вверх, а вниз;

v) если этапы, указанные в перечислениях iii) и iv), закончились неудачей, проверяют, находятся ли верхняя и нижняя границы перехода на расстоянии не менее от точки старта. Если достигнуты верхняя и нижняя границы перехода, то включают в формируемую границу перехода сегменты вверх и вниз на расстоянии и повторяют операции этапа, указанные в перечислении iii), но с добавлением границы перехода;

vi) повторяют вышеуказанный процесс для следующей точки перехода на линии сканирования, начиная с этапа, указанного в перечислении i), до достижения края изображения;

2) проводят линию сканирования вертикально в обоих направлениях от центральной точки изображения. Находят отрезки линий с использованием той же логической процедуры, что и на этапе, указанном в пункте 1), одновременно следуя от каждой границы перехода символа влево, а затем вправо;

3) среди сохраненных отрезков линий А1 осуществляют поиск пар отрезков, удовлетворяющих следующим четырем условиям:

i) если два отрезка имеют одно и то же направление от p1 до р2, проверяют, что расстояние от точки p1 одного отрезка до точки р2 другого отрезка менее, чем ; если противоположное, то проверяют, что расстояние между точками p1 и p1 или между точками р2 и р2 разных отрезков менее, чем ;

ii) два вышеуказанных отрезка должны быть параллельными с отклонением не более 5°;

iii) два вышеуказанных отрезка должны быть одного цвета, если отрезки имеют одинаковое направление от p1 к р2, или противоположного цвета, если направления этих отрезков противоположны;