Я выполняю калибровку камеры из tsai алгоритм. У меня есть внутренняя и внешняя матрица, но как я могу восстановить трехмерные координаты из этой информации?
1) Я могу использовать Gaussi Исключение для поиска X, Y, Z, W и тогда точки будут X / W, Y / W, Z / W как однородная система.
2) Я могу использовать подход
документации OpenCV :
насколько я знаю u
, v
, R
, t
, я могу вычислить X, Y, Z
.
Однако оба метода приводят к разным результатам, которые неверны.
Что я делаю не так?
Как приятно указано в комментариях выше, координаты изображения проектирования 2D в 3D "пространство камеры" по сути требуют составления координат z, поскольку эта информация полностью потеряна в изображении. Одно решение состоит в том, чтобы присвоить фиктивное значение (z = 1) к каждой из 2D точек пространства изображения перед проекцией, как отвечено Jav_Rock.
p = [x y 1];
projection = H * p; //project
projnorm = projection / p(z); //normalize
Одна интересная альтернатива этому фиктивному решению должна обучить модель предсказывать глубину каждой точки до перепроекции в 3D пространство камеры. Я попробовал этот метод и имел высокую степень успеха с помощью CNN Pytorch, обученного на 3D ограничительных рамках от набора данных KITTI. Было бы радо предоставить код, но это будет немного длинно для регистрации здесь.