Как создается Data Matrix?

в 13:07, , рубрики: diy или сделай сам, Алгоритмы

Как создается Data Matrix?Data Matrix является двумерным матричным штрих кодом, состоящим из светлых и темных участков. С помощью такого штрих кода можно закодировать достаточно большой объем информации (2-3Кб). Часто Data Matrix применяется при маркировке небольших предметов, например микросхем, а также в пищевой, оборонной промышленности, рекламе и других сферах.

Существует множество сайтов для создания таких кодов, но мне всегда было интересно, каким же образом текст превращается в набор черных и белых квадратиков? Должен же быть какой-то алгоритм?

При создании Data Matrix нам понадобится обратиться к арифметике полей Галуа и кодам Рида-Соломона. Рассмотрим этот процесс на простом примере.

Прежде всего, посмотрим на структуру матрицы:

Как создается Data Matrix?

Состоит наша матрица из двух частей: шаблона поиска и закодированных данных. Разумеется, размер матрицы прямо пропорционален размеру входных данных. Вокруг нашего кода обязательно должна быть свободная зона, отделяющая код от остального изображения.

Возьмем какое-нибудь короткое слово, например, “Habr” (без кавычек) и создадим для него Data Matrix. Процесс состоит из двух этапов: на этапе высокоуровневого кодирования нужно получить последовательность кодов данных и кодов коррекции ошибок, а на этапе низкоуровневого кодирования – изобразить в матрице двоичное представление этих кодов.

Высокоуровневое кодирование


В Data Matrix, как и в QR-коде, используются коды Рида-Соломона над полем Галуа Как создается Data Matrix? (число 8 выбрано, поскольку каждое кодовое слово занимает в матрице 8 бит). Существует несколько неприводимых многочленов, позволяющих сгенерировать такое поле. Среди них Как создается Data Matrix? (в десятичном представлении 285, используется для QR-кодов) и Как создается Data Matrix? (301, используется в Data Matrix).

Для расчетов нам понадобится таблица степеней двойки для каждого элемента поля. Создается эта таблица довольно просто: если показатель степени Как создается Data Matrix?, то возведение в степень выполняется как обычно. В противном случае Как создается Data Matrix?, после чего производится побитовое сложение по модулю 2 с десятичным представлением взятого неприводимого многочлена, если Как создается Data Matrix?. Например, Как создается Data Matrix?, Как создается Data Matrix? и т. д.

Необходимо получить кодовое слово

Как создается Data Matrix?,

где Как создается Data Matrix? – информационный многочлен, Как создается Data Matrix? – порождающий многочлен, Как создается Data Matrix? – общая длина кода вместе с корректировочными, Как создается Data Matrix? – количество информационных кодов (вместе с кодами отступа, о них – далее), Как создается Data Matrix? – операция взятия остатка от деления.

Создадим для начала информационный многочлен. Для этого нам понадобится знать, какого размера должна быть матрица, чтобы можно было разместить все информационные коды:
Как создается Data Matrix?
Из таблицы видно, что для кодирования строки из 4х элементов нужно взять матрицу размером 12x12 («полезная» область – 10x10), в которую помещаются 5 кодов данных и 7 кодов коррекции.

Для символов таблицы ASCII код получается следующим образом: C=ASCII value+1. Например, для символа ‘H’ C=72+1=73.

Подряд идущие цифры объединяются в пары, и для них C=N+130, где N – число, полученное в результате группировки. Например, если рядом стоят цифры 2 и 5, то C=25+130=155.

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

Как создается Data Matrix?, где
Как создается Data Matrix? – псевдослучайное число, Как создается Data Matrix? – номер элемента.

Для слова “Habr” получаем следующую последовательность кодов: 73, 98, 99, 115, 129.

Теперь мы можем записать информационный многочлен:

Как создается Data Matrix?

и домножить его на Как создается Data Matrix? (Как создается Data Matrix? – число кодов коррекции):

Как создается Data Matrix?

Перейдем к созданию порождающего многочлена. Вычисляется он по следующей формуле:

Как создается Data Matrix?

Начинаем перемножать скобки:

Как создается Data Matrix?

Как создается Data Matrix?

Сложение в нашем поле определено как побитовое сложение по модулю 2. Сначала выполняется возведение в степень с помощью таблицы, затем их сложение и нахождение «логарифма» полученного числа для возврата к степеням двойки. В случае если после сложения степеней получается число, большее 254, берем его остаток от деления на Как создается Data Matrix?.

После перемножения всех скобок и возведения в степень получим:

Как создается Data Matrix?

Последняя операция, завершающая высокоуровневое кодирование, и, пожалуй, самая сложная – нахождение остатка от деления Как создается Data Matrix? на Как создается Data Matrix?:

Как создается Data Matrix?

Выполняется деление многочленов в столбик, но с учетом того, что вычитание, определенное точно так же, как и сложение, и умножение выполняются в поле Галуа.

Теперь мы можем записать кодовое слово Как создается Data Matrix? полностью:

Как создается Data Matrix?

Низкоуровневое кодирование


Как создается Data Matrix? Каждый из полученных выше кодов представляется в Data Matrix в виде квадрата размером 3х3 ячейки без правого верхнего уголка. 1 здесь соответствует старшему биту, 8 – младшему. Нужно заполнить такими элементами всю матрицу.

Как создается Data Matrix? Приготовим сетку 10х10 (именно такого размера должна быть матрица в данном случае), на которой нарисуем контуры первых пяти элементов, как на рисунке справа. Вне зависимости от того, какого размера матрица, эти элементы всегда располагаются именно так, и никак иначе.

Остальные элементы размещаются аналогичным образом, но прежде чем нарисовать их, необходимо отметить несколько особых случаев, связанных с углами матрицы.

Если Как создается Data Matrix?, где a – сторона квадрата, то перед нами самый простой случай, когда после размещения всех элементов непоместившиеся участки просто переносятся на противоположную сторону.

Если Как создается Data Matrix?, то в правом нижнем углу остается «лишний» квадратик размером 2х2, который заполняется так:

Как создается Data Matrix?

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

Как создается Data Matrix?

Есть еще два случая, которые возникают только при построении прямоугольных матриц, поэтому мы их опустим.

Вернемся к нашей матрице и добавим все остальные элементы, а также укажем, какому кодовому слову соответствует каждый элемент. Стрелками показано, каким образом производится нумерация:

Как создается Data Matrix?

После переноса непоместившихся элементов получаем:

Как создается Data Matrix?

В правом нижнем углу остался незанятый квадрат (Как создается Data Matrix?, что как раз соответствует такому случаю). Занесем в таблицу все наши коды в таком же порядке, в каком они идут в Как создается Data Matrix?, и их двоичные представления:

Как создается Data Matrix?

Аккуратно заполняем матрицу. Начнем с шаблона поиска и нижнего квадрата, а затем по очереди добавляем каждый код:

Как создается Data Matrix?

Как создается Data Matrix?

Как создается Data Matrix?

Как создается Data Matrix?


Итак, наш код Data Matrix готов:

Как создается Data Matrix?

Автор: docker1

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js