У меня есть две стереокамеры, и я захватил изображения маркеров как с левой, так и с правой камеры.
У меня идеальная калибровка
- Внутренние характеристики
- Исправлено искажение
- Extrinsi c
Теперь, когда я подошел к маркерам, у меня есть набор маркеров на доске, и я оценил его позу. Кроме того, я вычислил 3D-точку каждого маркера на основе триангуляционных 3D-точек
cv::triangulatePoints(Projection_Matrix_L[o], Projection_Matrix_R[o], pointsMat1, pointsMat2, pnts3D);
Затем я знаю центр камеры (CL_O)
CL_O = -Rotation_matrix.inv * translation
, который в основном равен (0,0 , 0)
Аналогично для другой камеры. Для простоты давайте просто придерживаться одного.
Я предполагаю, что приведенное ниже уравнение должно вычислять точки в линии на основе лямбда (λ)
line(λ) = CL_O + λ*t
CL_O, is a 3D point say (x0, y0, z0)
t, is a Vector (a, b, c)
При правильном (λ) значении, The В результате получится трехмерная точка, скажем, Q. Но она все еще не близко к точке маркера P. Поэтому мне нужно вычислить минимальное расстояние между точкой P и Q.
Вопросы - Как определить λ для каждого 3D-маркера точки, такие, что это дает мне 3Dpoint Q близко к P с минимальной ошибкой. Я не знаю, правильно ли приведенное ниже уравнение?
f(λ) = abs(Point P - line(λ))
Если вы считаете, что это правильно, мне нужна помощь с примером кода / псевдокода для его реализации (предпочтительно C ++ или python).
Несмотря на то, что я написал выше, я все еще чувствую, что чего-то все еще не хватает. Пожалуйста, соедините точки и скажите мне, как действовать.