Добрый день, коллеги.
Я распознаю 2-мерные аналоги штрихкодов (Data Matrix, QR Code -
http://en.wikipedia.org/wiki/Datamatrix), снятые на камеру телефона.
В большинстве случаев задачу можно рассматривать как плоскую. Оригинальный код - это квадратная область, равномерно разбитая на квадратные ячейки (напоминает шахматную доску). При съемке его форма может искажаться и на изображении мы имеем произвольный четырехугольник, что не мешает процессу распознавания - находим четыре угла, количество ячеек в строке/столбце, и равномерно делим каждую сторону 4-угольника для проведения отрезков сетки, в узлах которой находятся центры ячеек. После построения сетки задачу можно считать решенной.
Проблема возникает на снимках, сделанных с близкого расстояния под углом. Т.е., как и раньше мы находим 4 угла, но, за счет перспективы, сетка делит стороны 4-угольника-образа не равномерно - ячейки, расположенные дальше от плоскости проектирования имеют меньшие размеры.
В общем виде задача стоит так:
1. Имеется центральная перспективная проекция с фокусом в точке (0, 0, -f), и плоскостью проектирования XY (матрица фотокамеры). f - неизвестно.
2. Имеется спроектированный образ - 4-угольник. Т.е. 4 точки вершины A'(x, y, 0), B'(x, y, 0), C'(x, y, 0), D'(x, y, 0).
3. Известно, что оригинальная фигура - квадрат (все Z положительны).
Вопрос:
Достаточно ли нам этой информации для получения пространственных координат прообраза (A(x, y, z), B(x, y, z), C(x, y, z), D(x, y, z)) и как их получить?
Собственно узнать надо меньше. Достаточно иметь оценку размеров ячейки на снимке (образе) для различных участков кода. Т.е. очень грубое приближение - есть хорошее решение.
При поверхностном анализе получается, что мы можем решить задачу в общем виде. Мы имеем 13 неизвестных - координаты 4 точек и фокусное расстояние - f. Уравнений вроде бы можно составить достаточное количество. Но ресурсов процессора мобильного устройства для решения такой системы не хватит.
Если кто сталкивался / имеет соображения / может посоветовать литературу - помогите кто чем может.