mrtarantul 0 Жалоба Опубликовано March 7, 2012 Доброго времени суток. Есть задача - распознать QR-код. Делать я это решил с помощью openCV. Алгоритм примерно такой. Беру картинку, перевожу в монохромное, потом в бинарное (cvadaptivethreshold). Далее ищу контуры. Не хитрыми действиями определяю координаты мишеней (те три квадратика). Определяю площадь самого кода. Потом "нарезаю" на 9 одинаковых частей (три из них - мишени). Каждую часть нарезаю на квадратики, и обходя их попиксельно, определяю цвет (черный\белый). Все нормально работает, если на вход поступает QR-код без искажений (как на картинке). Но все ломается, если я хочу принимать картинку с камеры телефона. Из-за искажений я, даже с трудом могу нарезать на 9 частей, не говоря уж о том, чтобы правильно определить цвет квадратиков (мне просто не получается определить точные координаты и размеры, поскольку даже в рамках не большей области их размеры меняются). Может у кого0нибудь есть мысли как корректно решить эту задачу? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 7, 2012 надо определить большие квадраты и вырезать по ним область изображения, и с ним работать как с обычным, предварительно отскейлив и бинаризовав. есть отдельные библиотеки вроде для этого дела, если камера очень плохая, то думаю ничего не получится, но на мобильниках то вроде работает. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrtarantul 0 Жалоба Опубликовано March 7, 2012 отскейлив Это что? Еще раз. Я спокойно могу распознать и расшифровать код если он представлен без искажений (как на картинке). Но как только я начинаю снимать с камеры (ios устройства) под небольшим углом уже ничего не определяется. Например на первом изображении. Возьмем область между двумя мишенями (верхними). При искажении мне даже нормально ее не вырезать. Я синхронизируюсь по мишеням, но они находятся на разных уровнях (поскольку картинка под углом). А в самой области маленькие квадратики имеют не постоянный размер. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано March 7, 2012 искажения какого рода? просто поворот? если так, то определяете 3 квадрата имеете 2 оси определяете угол наклона потом разворачиваете изображение потом делаете resize(если требуется). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrtarantul 0 Жалоба Опубликовано March 7, 2012 искажения какого рода? просто поворот? Наклон под которым снимает камера. если так, то определяете 3 квадрата имеете 2 оси определяете угол наклона потом разворачиваете изображение потом делаете resize(если требуется). Какие именно оси имеются виду? Внешние, которые ограничивают сам QR код? Как мне определить угол наклона? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 7, 2012 Может примерчик проблемного изображения приведете? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrtarantul 0 Жалоба Опубликовано March 7, 2012 Вот фотография. Вот я вырезал часть изображения между двумя мишенями. Видно что область между мишенями сильно искажена. Квадратики имеют разные размеры. Даже корректно вырезать область между мишенями не получается, поскольку мишеня находятся на разных уровнях относительно друг друга. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 7, 2012 Нужно использовать преобразование гомографии. Почитать можно здесь: 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 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах