Проекция множества трехмерных точек в плоскость виртуального изображения в opencv c ++

0

Кто-нибудь знает, как проектировать набор 3D-точек в виртуальную плоскость изображения в opencv c++
спасибо

Теги:
opencv
kinect

2 ответа

0

регистрация (OpenNI 2) или альтернативная возможность viewPoint (openNI 1.5) действительно помогают выравнивать глубину с rgb, используя одну строку кода. Цена, которую вы платите, заключается в том, что вы не можете реально восстановить точные местоположения точек X, Y в трехмерном пространстве, так как строка и столбец перемещаются после выравнивания.

Иногда вам нужно не только Z, но и X, Y и хотите, чтобы они были точными; плюс вы хотите выравнивание глубины и rgb. Затем вы должны выровнять rgb до глубины. Обратите внимание, что это выравнивание не поддерживается Kinect/OpenNI. Цена, которую вы платите за это - нет значений RGB в местах, где глубина не определена.

Если известны внешние параметры, которые представляют собой поворот и перевод камеры глубины относительно цветной, то выравнивание - это всего лишь вопрос создания альтернативной точки зрения: восстановление 3D с глубины, а затем просмотр облака точек с точки зрения цвета камера: применяется обратное вращение и перевод. Например, перемещение камеры вправо подобно перемещению мира (точек) влево. Reproject 3D в 2D и интерполировать при необходимости. Это действительно легко и просто обратное к 3D-реконструкции; ниже Cx близок к w/2 и Cy к h/2;

col = focal * X/Z + Cx row = -focal * Y/Z + Cy//это потому, что строка на изображении увеличивается вниз

Правильный, но и более дорогой способ получить красивую карту глубины после поворота точечного облака - проследить лучи от каждого пикселя, пока он не пересечет облако точек или не окажется достаточно близко к одной из точек. Таким образом, у вас будет меньше отверстий на карте глубины из-за артефактов выборки.

0

Сначала вам нужно определить матрицу трансформации (поворот, перевод и т.д.), Чтобы отобразить 3D-пространство на плоскость 2D-изображения, а затем просто умножить ваши трехмерные координаты точки (x, y, z) на матрицу, чтобы получить 2D-координаты на изображении.

  • 0
    Привет, я работаю с kinect. Я откалибровал обе камеры, и теперь у меня есть матрица вращения, вектор трансляции камеры глубины относительно камеры rgb. Мне нужно отобразить пиксели глубины на пиксели rgb. Я взял точку глубины 2D и спроецировал в трехмерное пространство, и я преобразовал эти 3D-шрифты в 3D-проекцию RGB, используя матрицы R, T. Теперь вы можете сказать мне, как я могу проецировать эти 3D-точки в пиксели изображения RGB. благодарю вас
  • 0
    @ user3004528 если вы используете kinect с opencv, попробуйте использовать функции highgui, такие как получение и так далее. И есть опция, называемая регистрация, которая включена по умолчанию и делает именно то, что вы хотите. Вот документ: docs.opencv.org/doc/user_guide/ug_highgui.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню