Распознавание маяков типа "Q-Code" — различия между версиями
=DeaD= (обсуждение | вклад) (→Кодирование информации в визуальном маяке) |
=DeaD= (обсуждение | вклад) (→Распознавание визуального маяка на экране и чтение информации с него) |
||
Строка 29: | Строка 29: | ||
== Распознавание визуального маяка на экране и чтение информации с него == | == Распознавание визуального маяка на экране и чтение информации с него == | ||
+ | |||
+ | Распознавание маяков производится по следующему алгоритму: | ||
+ | |||
+ | # Подготовить изображение, удалив с него помехи: | ||
+ | # Строим несколько сечений изображения (сечение - превращение изображения в черно-белое по установленной границе яркости, всё что светлее границы становится белым, остальное черным) и для каждого из сечений: | ||
+ | ## Находим на изображении все контуры; | ||
+ | ## Аппроксимируем найденные контуры ломаными; | ||
+ | ## Среди ломаных находим похожие на квадраты; | ||
+ | ## Каждый такой похожий на квадрат контур проверяем на то, что он является внутренней границей внешнего контура квадратиков "Маяка", для этого пытаемся удостоверится в целостности данных им представленных, просто делим его внутренность на квадратики 7х7, и проверяем корректность представленных там битов информации и контрольной суммы; | ||
== Определение расстояния до визуального маяка == | == Определение расстояния до визуального маяка == |
Версия 19:30, 12 января 2008
Содержание
Внешний вид визуального маяка и кодирование информации в нём
Структура маяка - черно-белое клетчатое поле размерами 9х9 клеток, в котором внешний квадрат клеток белый, вложенный в него квадрат клеток черный, а в оставшейся середине 5х5 клеток закодированы угловыми клетками правильная ориентация маяка (только одна из них, "маркер поворота", черная) и еще две клетки рядом с "маркером поворота" - одна из них черная, они указывают на то, что это не однократное отражение маяка (двухкратное отражение отличить невозможно).
Из оставшихся 25-4-2=19 клеток еще 4 мы будем использовать под контрольную сумму, чтобы гарантировать качество распознавания. Итого под информацию у нас остается 15 бит, то есть мы можем изготовить 32768 различных таких маяков. Этого достаточно, чтобы обклеить ими изнутри крупное здание, и скорее всего не одно.
Здесь можно взять шаблоны для маяков, подготовленные в формате Microsoft Word:
- <<Скачать шаблон для формата А4>>;
- <<Скачать шаблон для формата А5>>;
Кодирование информации в визуальном маяке
Корректной принимается ориентация маяка, при которой "маркер поворота" находится в левом нижнем углу, а прилегающая к нему черная клетка справа от него.
В этом случае биты полезной информации (номера маяка) размещается в свободных ячейках слева направо, сверху вниз. В оставшихся четырех битах находится контрольная сумма. Расположение битов информации и контрольной суммы на маяке также приведено на рисунке справа. Биты информации обозначаются I-1 ... I-15, биты контрольной суммы S-1 ... S-4.
Информация с маяка проверяется на корректность по следующему алгоритму:
- К 15 битам информации справа приписать 4 бита контрольной суммы и еще один бит равный 0, получится 20 бит данных;
- Эти 20 бит данных разбиваются на 5 групп по 4 бита;
- Получившиеся группы по 4 бита накладываются друг на друга по XOR;
- Если в результате этого наложения получилось 1101, тогда информация считается корректной, иначе нет.
Распознавание визуального маяка на экране и чтение информации с него
Распознавание маяков производится по следующему алгоритму:
- Подготовить изображение, удалив с него помехи:
- Строим несколько сечений изображения (сечение - превращение изображения в черно-белое по установленной границе яркости, всё что светлее границы становится белым, остальное черным) и для каждого из сечений:
- Находим на изображении все контуры;
- Аппроксимируем найденные контуры ломаными;
- Среди ломаных находим похожие на квадраты;
- Каждый такой похожий на квадрат контур проверяем на то, что он является внутренней границей внешнего контура квадратиков "Маяка", для этого пытаемся удостоверится в целостности данных им представленных, просто делим его внутренность на квадратики 7х7, и проверяем корректность представленных там битов информации и контрольной суммы;