Чтобы найти 3D-точку на линии, ближайшей к другой 3D-точке в геометрии нескольких видов? - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть две стереокамеры, и я захватил изображения маркеров как с левой, так и с правой камеры.

У меня идеальная калибровка

  1. Внутренние характеристики
  2. Исправлено искажение
  3. 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).

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

Problem Statement Image

1 Ответ

0 голосов
/ 03 февраля 2020

Я делал подобную проблему в java, иногда его алгоритм может помочь вам

Проверьте это на https://github.com/sreeragrnandan/JAVA-ASSIGNMENT/blob/master/Mdis.java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...