Pull to refresh

Comments 13

Вам бы сканер бар-кодов написать. А то мой Андроид ничего кроме идеально-ровно-установленных изображений перед камерой не понимает.
А у вас камера с автофокусом? Проверено что 5Мп камера без автофокуса распознает на порядок хуже нежели 3.2Мп с автофокусом.
Очень странно что Андройд не понимает)) На HD2 (Android 2.2.1) такие программы как QR Droid и «Сканер штрих-кодов» понимают под любым углом и другими искажениями…

А автору спасибо за статью, почерпнул новое.
Bar-коды или QR-коды? Мой андроидофон замечательно распознаёт qr-коды даже когда камера ещё не успела сфокусироваться причём снимать не обязательно из ровной позиции.
HTC Legend, Android 2.3, распознаёт любые коды на лету за доли секунды.
Спасибо, очень интересно.

Такой вопрос, я так понимаю, что после получения конечной модели баркода из фотографии, он ищется в некой базе данных баркодов. А если, например, одна из клеток (либо пара) баркода получилась битая (на фотографии в этом месте лежала черная пылинка), это как-то учитывается? Или такой баркод считается не валидным? Насколько вообще ваши алгоритмы толерантны к такого рода ошибкам?
В QR-кодах как правило есть избыточная информация для таких случаев.

Вообще рекомендую заглянуть в английскую википедию, там на редкость любознательная статья на тему qr-кодов.
Восстановим квадратную форму оставшихся объектов. Для этого строим матрицу отображения исходного (искаженного) изображения на квадратную картинку

не подскажите где про это подробно почитать — скоро понадобиться сильно, а у вас наверняка пару хороших ссылочек по теме уже есть =)
Ну вообщем-то, только курс линейной алгебры — аффинные преобразования (как из 4-угольника попытаться получить квадрат). Если недостаток информации (исходник меньше требуемого результата), то есть матричное преобразование, которое увеличивает/сжимает исходный объект, если избыток — аналогично. Можно еще и усреднять — дополнять интерполяцией.
А как делается векторизация изображения? Как получаются отрезки сторон бар-кодов?
Мы итерационно наращиваем скелет, считая его отрезком, пока отклонение следующего шага от предыдущего не превысит критическую отметку. Но это долго и могут возникать коллизии при кривом изображении (и кривых руках). Поэтому от этого мы уже почти отошли и упрощенно определяем «квадратность» по 4 точкам (2 максимально удаленные друг от друга и еще 2 — максимально удаленные от линии между теми двумя), а спорные моменты разрешаются уже при непосредственном распознании: бОльшая часть отсечется на проверке черной границы, оставшиеся коллизии — на совпадении с паттерном рамки баркода (граница + метки). Первое проверяется достаточно быстро, второе — вообще подвешено на битовые маски у нас.
Если интересно — почитайте работы Павлидиса и компании. Но у нас проще — мы итерационно наращиваем скелет, считая его отрезком, пока отклонение следующего шага от предыдущего не превысит критическую отметку.
Sign up to leave a comment.

Articles