еяку кількість квадратів. Використовуючи ці ж критерії, знаходимо серед знайдених квадратів ті, всередині яких розташовані ще два квадрата і вважаємо їх мішенями. Якщо кількість мішеней відрізняється від трьох, то в автоматичному режимі відкидаємо поточний фото, як невдале, і продовжуємо відеозахват, поки не одержимо зображення з трьома мішенями.
Визначаємо точки-вершини кожної мішені. Ми маємо всі вершини QR коду крім правої нижньої. Для того, щоб її визначити проведемо прямі лінії через праву сторону правої верхньої мішені і нижню сторону лівої нижньої мішені. Точка перетину даних прямих (точка А на малюнку 4) буде шуканої нижній правій вершиною QR коду.
Малюнок 4 - Знаходження правої нижньої вершини QR коду
Знаючи всі чотири вершини QR коду, ділимо кожну його сторону на кількість осередків (маленьких квадратів) у рядку / стовпці і, використовуючи отриману інформацію, будуємо сітку, набір вертикальних і горизонтальних ліній, що розділяють QR код на осередки . Визначаємо колір кожного осередку і створюємо масив комірок, заповнений нулями і одиницями, де одиниця відповідає чорної комірці, а нуль - білою.
.2 Алгоритм розшифровки QR коду
Отриманий методами комп'ютерного зору масив нулів і одиниць буде розшифрований за допомогою алгоритму, описаного в специфікації ISO / IEC 18004 Інформаційна технологія - Автоматична ідентифікація та збір даних - Символіка штрихового коду - QR Код [3]. Опишемо даний алгоритм:
) отримання масиву «0» і «1» біт;
) зчитування інформації про формат QR коду. Витяг інформації про маску (малюнок 5);
Малюнок 5 - Склад QR коду
) зчитування інформації про версії (де застосовується), а потім визначення версії коду; 4) застосування до кожного осередку масиву маски допомогою виключає або. Всього існує 8 видів масок, значення біт яких визначаються за формулами (1) - (8);
(i + j) mod 2=0, (1)
(i) mod 2=0, (2)
(j) mod 3=0, (3)
(i + j) mod 3=0, (4)
((i div 2) + (j div 3)) mod 2=0, (5)
(ij) mod 2 + (ij) mod 3=0, (6)
((ij) mod 2 + (ij) mod 3) mod 2=0, (7)
((ij) mod 3 + (i + j) mod 2) mod 2=0, (8)
де i і j - номери осередків.
Малюнок 6 - Види масок
Застосовуємо маску до отриманого нами масиву допомогою операції XOR (малюнок 7);
Малюнок 7 - Застосування маски
5) визначення режиму кодування і зчитування коду відповідно до правил розміщення і відновлення даних і кодових слів в повідомленні.
Дізнаємося індикатор режиму по чотирьох бітам в правому нижньому кутку і відповідний йому режим по таблиці 1.
У даній роботі ми реалізуємо два режими: числовий і 8-бітний. Цифровий режим кодує дані з десяткового набору цифр (0 - 9) (ASCII значення 30HEX до 39HEX) при нормальній щільності 3 символу даних на 10 біт. У 8-бітний режимі кодується 8-бітний Latin / Kana набір символів відповідно до JIS X 0201 (символьні значення 00hex до FFhex). У цьому р...