Перейти к содержимому
Compvision.ru
mrtarantul

Распознавание QR кодов

Recommended Posts

Доброго времени суток.

Есть задача - распознать QR-код. Делать я это решил с помощью openCV.

Алгоритм примерно такой. Беру картинку, перевожу в монохромное, потом в бинарное (cvadaptivethreshold).

Далее ищу контуры. Не хитрыми действиями определяю координаты мишеней (те три квадратика).

Определяю площадь самого кода.

Потом "нарезаю" на 9 одинаковых частей (три из них - мишени).

Каждую часть нарезаю на квадратики, и обходя их попиксельно, определяю цвет (черный\белый).

Все нормально работает, если на вход поступает QR-код без искажений (как на картинке).

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

Может у кого0нибудь есть мысли как корректно решить эту задачу?

8.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

надо определить большие квадраты и вырезать по ним область изображения, и с ним работать как с обычным, предварительно отскейлив и бинаризовав.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
отскейлив

Это что?

Еще раз. Я спокойно могу распознать и расшифровать код если он представлен без искажений (как на картинке).

Но как только я начинаю снимать с камеры (ios устройства) под небольшим углом уже ничего не определяется.

Например на первом изображении. Возьмем область между двумя мишенями (верхними). При искажении мне даже нормально ее не вырезать. Я синхронизируюсь по мишеням, но они находятся на разных уровнях (поскольку картинка под углом). А в самой области маленькие квадратики имеют не постоянный размер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

искажения какого рода? просто поворот?

если так, то определяете 3 квадрата имеете 2 оси определяете угол наклона потом разворачиваете изображение потом делаете resize(если требуется).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
искажения какого рода? просто поворот?

Наклон под которым снимает камера.

если так, то определяете 3 квадрата имеете 2 оси определяете угол наклона потом разворачиваете изображение потом делаете resize(если требуется).

Какие именно оси имеются виду? Внешние, которые ограничивают сам QR код?

Как мне определить угол наклона?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может примерчик проблемного изображения приведете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

photo111.JPG

Вот фотография.

opencvmin.jpg

Вот я вырезал часть изображения между двумя мишенями. Видно что область между мишенями сильно искажена. Квадратики имеют разные размеры. Даже корректно вырезать область между мишенями не получается, поскольку мишеня находятся на разных уровнях относительно друг друга.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нужно использовать преобразование гомографии.

Почитать можно здесь:

http://en.wikipedia.org/wiki/Homography

http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html

Пример:

http://ashleymckay.com/ashleymckay/cms/?q=node/126

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×