ГОСТ ISO/IEC 15438-2018. Межгосударственный стандарт. Информационные технологии. Технологии автоматической идентификации и сбора данных. Спецификация символики штрихового кода PDF417
Приложение J
(обязательное)
РЕКОМЕНДУЕМЫЙ АЛГОРИТМ ДЕКОДИРОВАНИЯ ДЛЯ PDF417
J.1 Общие положения
Рекомендуемый алгоритм декодирования применяют для вычисления декодируемости при оценке качества символа с использованием методов, приведенных в ISO/IEC 15415.
При оценке качества символа с помощью настоящего рекомендуемого алгоритма декодирования символ PDF417 должен декодироваться в виде серии линий сканирования вдоль этого символа до знаков СТАРТ или СТОП, но необязательно строка за строкой. Символ может быть декодирован с помощью номера кластера и в том случае, если линия сканирования проходит через две или более строк. Последовательности штрихов и пробелов знаков символа PDF417 декодируют с использованием измерений "от края до подобного края" (e).
Символ PDF417 подлежит декодированию в четыре этапа:
a) инициализация - для установления матрицы символа;
b) декодирование линии с использованием рекомендуемого алгоритма декодирования;
c) заполнение матрицы;
d) интерпретация.
J.2 Инициализация
В начале процесса декодирования для установления параметров структуры символа (числа строк r, числа столбцов c) и уровней коррекции ошибок должно быть выполнено достаточное количество декодирований вдоль линии сканирования (J.3). Эта информация кодируется в левом и правом индикаторах строки, примыкающих соответственно к знакам СТАРТ и СТОП.
После проведения инициализации параметров структуры символа должна быть установлена матрица, отражающая размер (число строк и число столбцов) декодируемого символа. Матрица должна исключать знаки СТАРТ и СТОП и индикаторы строк.
J.3 Рекомендуемый алгоритм декодирования линии
Декодируемая линия сканирования должна содержать свободную зону, знак СТАРТ и/или СТОП, один или два индикатора строки и один или более знаков символа в области данных. Линия сканирования может пересекать более чем одну строку. Алгоритм должен включать следующие этапы по декодированию линии:
a) подтверждение наличия свободной зоны;
b) подсчет для каждой последовательности штрихов и пробелов знака символа (включая знаки СТАРТ и СТОП) ширины элементов в соответствии с рисунком J.1:
Рисунок J.1 - Размеры для декодирования
c) преобразование измерения e1, e2, e3, e4, e5, и e6 в нормализованные значения E1, E2, E3, E4, E5 и E6, которые должны представлять ширину этих элементов в модулях. Используют следующий способ для определения i-го значения:
при 1,5p/17 <= ei < 2,5p/17, Ei = 2
при 2,5p/17 <= ei < 3,5p/17, Ei = 3
при 3,5p/17 <= ei < 4,5p/17, Ei = 4
при 4,5p/17 <= ei < 5,5p/17, Ei = 5
при 5,5p/17 <= ei < 6,5p/17, Ei = 6
при 6,5p/17 <= ei < 7,5p/17, Ei = 7
при 7,5p/17 <= ei < 8,5p/17, Ei = 8
при 8,5p/17 <= ei < 9,5p/17, Ei = 9
В противном случае последовательность штрихов и пробелов знака символа должна считаться ошибочной;
d) после нахождения знаков СТАРТ и СТОП предпринимают попытку декодировать индикатор строки и знаки символа в количестве, соответствующем числу столбцов матрицы в направлении, выведенном из декодированных знаков СТАРТ и СТОП. Последовательности штрихов и пробелов знаков символа декодируют в соответствии с этапом e);
e) вычисление номера кластера K знака символа по формуле:
K = (E1 - E2 + E5 - E6 + 9) mod 9
Примечание - Формула дает результаты, идентичные результатам уравнения, приведенного в 5.3.1.
Номер кластера K должен быть равен 0, 3 или 6; в противном случае знак символа и связанное с ним кодовое слово должны считаться ошибочными;
f) восстанавливают значение кодового слова по таблице декодирования (см. приложение A) с использованием семи значений (значения кластера K и значений E1, E2, E3, E4, E5 и E6) в качестве ключевых. Эти значения можно вычислить из последовательностей штрихов и пробелов, приведенных в приложении A.
Примечание - В вычислении неявно используют номер кластера для обнаружения всех ошибок декодирования, вызванных отдельными несистематическими ошибками положения края на величину одного модуля;
g) как только будут установлены знаки СТАРТ и СТОП, должны использоваться значения кодового слова левого индикатора строки и (или) правого индикатора строки для установления параметров структуры символа. Применяют уравнения, обратные к приведенным в 5.11.3.1 и 5.11.3.2 для установления: номера строки (F), числа строк (r), числа столбцов (c) и уровня коррекции ошибок (s);
h) выполняются дополнительные проверки (ускорение сканирования, абсолютные синхронизированные размеры, свободные зоны и т.д.), результаты которых должны быть приемлемы для отдельных характеристик считывающего устройства.
J.4 Заполнение матрицы
Для заполнения матрицы из (r) строк и (c) столбцов, установленной с помощью процедуры инициализации, должна использоваться следующая процедура:
a) устанавливают начальное значение v для подсчета числа стираний v = r x c;
b) для каждого сканирования следует декодировать количество кодовых слов, равное числу столбцов в матрице;
c) действительные результаты декодирования размещают в матрице на соответствующих местах, определенных по номеру строки (из индикаторов строк), и значению кластера.
Если происходит пересечение нескольких строк, линия сканирования будет характеризоваться разными номерами строк, определяемыми левым и правым индикаторами строк. Номер кластера следует использовать для интерполяции правильного номера строки для каждого отдельного действительного кодового слова.
Пример - Сканирование с декодированием характеризуется знаками start (СТАРТ) и stop (СТОП), в нем присутствует левый индикатор строки с номером строки 7 и правый индикатор строки с номером строки 10. В матрице присутствуют 10 столбцов. Линия сканирования при декодировании не смогла декодировать три кодовых слова, поскольку она не оставалась полностью в одной строке для полного перехода, однако на основании синхронизации элементов известно положение этих "неустановленных" кодовых слов.
Рисунок J.2 - Схема, представляющая
линию сканирования, пересекающую строки
Кластеры расположены в следующей последовательности: "неустановленный", 6, 6, 6; "неустановленный", 0, 0; "неустановленный", 3, 3.
Используя систему обозначений матрицы для строки (r) и столбца (c), кодовые слова подлежат заполнению согласно позициям: "неустановленная", (8,2), (8,3), (8,4); "неустановленная", (9,6), (9,7); "неустановленная", (10,9) и (10,10).
Примечание - Этот пример является крайним случаем в связи с тем, что линия сканирования пересекает четыре строки, но с его помощью достигается декодирование 70% кодовых слов;
d) по мере заполнения матрицы подсчет стираний v должен быть уменьшен на одно значение для каждого действительного кодового слова.
e) если уровень коррекции ошибки не равен нулю, то может быть предпринято исправление ошибки, когда число неустановленных кодовых слов (число стираний v) будет удовлетворять уравнениям, приведенным в 5.7.2 (при v = I и f = 0). Если устранить ошибки не удается, то должны быть собраны дополнительные кодовые слова;
f) если уровень коррекции ошибок равен нулю, то следует ввести два кодовых слова коррекции ошибок.
Дальнейшие подробности обнаружения и коррекции ошибки приведены в приложении K.
J.5 Интерпретация
Начиная с первоначального состояния подрежима прописные буквы режима текстового уплотнения, кодовые слова данных следует интерпретировать в соответствии с режимами уплотнения.
