jpelikan 0 Жалоба Опубликовано July 1, 2013 Друзья, неожиданное прерятствие в решении простой, вроде бы задачи. Есть снимок объекта (представлен в виде Мат), определены матрицы камеры (cameraMatrix), дисторции и матрица проективного пробразования (точнее, матрицы сдвига и поворота). Есть, например, функция projectPoints, которая умеет из набора 3D-точек построить проекцию по параметрам проективного преобраования. Но обратной функции в OpenCV я не нахожу. А надо именно по параметрам (известным) проективного преобразования вернуть обратно из проекции 3D. Получается, такую функцию придется самостоятельно мастерить? Или есть что-то из готовых функций? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pavia00 32 Жалоба Опубликовано July 1, 2013 Обратное преобразование к проекции не имеет однозначного отображения. А если зафиксировать Z. То мы получим аффинное(матричное) преобразование. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
jpelikan 0 Жалоба Опубликовано July 3, 2013 Это так. Приношу извинения -вопрос сформулирован некорректно. Задача состоит в том, чтобы найти по точке проекции (x,y) точку (X,Y)на поверхности трехмерной фигуры (Z-координата достраивается по X,Y); при этом есть матрица проективного преобразования из (X,Y,Z) - в (x,y). Пока пишу нужную функцию сам(не opencv не нашел). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано July 3, 2013 Это так. Приношу извинения -вопрос сформулирован некорректно. Задача состоит в том, чтобы найти по точке проекции (x,y) точку (X,Y)на поверхности трехмерной фигуры (Z-координата достраивается по X,Y); при этом есть матрица проективного преобразования из (X,Y,Z) - в (x,y). Пока пишу нужную функцию сам(не opencv не нашел). В общем случае при построении обратного отображении к R^3 -> R^2, получаем отображение R^2 -> R^3, где каждой точке (x, y) соответствует множество точек {(x, y, z)}. В случае проекции конкретного 3D объекта на 2D плоскость, каждой точке плоского изображения может соответствовать несколько точек 3D объекта(какая конкретно - зависит от ракурса и т.д. и т.п.). Т.е. для нахождения соответствия вам скорей всего придется проецировать все 3D точки на искомую плоскость, а дальше разрешать сюръективность при помощи эвристик(например из всех 3D точек отобразившихся в одну 2D точку выбирать ближайшую по цвету и т.п.). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 3, 2013 Если коротко, то должны выполняться условия существования обратной функции: http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
jpelikan 0 Жалоба Опубликовано July 19, 2013 Поскольку раньше не сталкивался с такого рода задачами, разобрался только сейчас; такого рода реконструкция решается методами ray tracing, в частности. Если коротко. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 19, 2013 А можно пару ссылок по теме, а то у меня не получается это представить? Ведь на каждом луче "сидит" бесконечное множество точек. Я знаю что трассировка лучей бывает прямая и обратная. Прямая, это когда мы выпускаем из некоторой точки (источник света) лучи, они отражаются объектом и возвращаются на экранную плоскость. Обратная, это когда мы выпускаем лучи из экранной плоскости и вычисляем освещенность в точке экрана путем суммирования интенсивностей света набранных лучом по его трассе. И в первом и во втором случае должна быть определена трехмерная сцена, и мы, трассировкой лучей находим ее проекцию на экранную плоскость. Добавить еще одно измерение таким способом мне представляется нетривиальной задачей. Хотя, если поверхность ламбертова, то такие решения есть (см. Shape From Shading), но я не видел хорошо работающих на реальных изображениях. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах