#python #opencv #image-processing #homography
#питон #opencv #обработка изображений #гомография
Вопрос:
В эти дни я пытаюсь получить 3D-координаты из 2D-координат на экране, преобразованном в BEV.
Согласно моему алгоритму, я должен умножить конкретную координату пикселя x, y на матрицу преобразования BEV и умножить ее на матрицу для 3d-преобразования.
Я получил матрицу 3×3 из cv2.getPerspectiveTransform (), но координаты пикселей 2×1.
Правильно ли менять (x, y) на (x, y, 1) С точки зрения нормализации координат?
Матрица, полученная из cv2.getPerspectiveTransform (), в любом случае умножается на координаты пикселей, чтобы создать новую плоскость пикселей, почему она 3×3?
Комментарии:
1. только с помощью монокулярного зрения вы не можете рассчитать расстояния. вам нужно несколько глаз, или вам нужно знать физический размер объекта. у тебя есть что-нибудь из этого? — что такое «БЕВ»? с высоты птичьего полета?
2. вам нужно различать регулярное пространство, где каждая координата «является физической», и проективные пространства, где последняя координата имеет проективное измерение (это 1 для точек и 0 для векторов, если спроецировано/нормализовано). вы можете переместить 3D-координату (x,y,z) в 2D-проективное пространство как (x’, y’, 1) * w (с w=z). для всех ненулевых w эти точки представляют одну и ту же 2D-координату, они образуют линию/луч, а 3D-координата является частью этого луча. луч пересекает плоскость z=1 в двумерной координате, представленной лучом. проектирование приведет к (x,y,z)/z = (x’, y’, 1).
3. @ChristophRackwitz Спасибо, что ответили. БЕВ — это вид с высоты птичьего полета. Как вы сказали, если то, что я понимаю правильно, я должен умножить (x, y, 1) и на матрицу H, верно?
4. Я не знаю, нужно ли вам это, но это обычная вещь, связанная с координатами 2D-пикселей