Карта проекции точек на точки реального мира - PullRequest
0 голосов
/ 26 сентября 2018

Я искал повсюду ответ на эту проблему, и я не могу найти его, поэтому спрашиваю здесь.

Проблема:

У меня естьлазер проецируется на поверхность сверху, и я хочу проецировать фигуры определенного размера на эту поверхность.Для этого мне нужно «откалибровать» лазер, чтобы заземлить его в реальном мире.

Лазер проецируется в своей собственной системе координат в диапазоне от -32000 до 32000 в направлениях x и y.У меня есть цели, установленные на моей поверхности в шероховатом прямоугольнике (см. Изображение ниже для более подробной информации).Цели устанавливаются в миллиметрах и представляют собой собственную систему координат.

Мне нужно иметь возможность брать точки в миллиметрах и точно переводить их в этот диапазон от -32000 до 32000 в различных сценариях.

Пример:

enter image description here

Какой самый точный способ определения лазерных пространственных координат желаемой точки?

Задача 2:

Пространство проекции не обязательно будет плоским.Это может быть наклонено в любом направлении.Например, если нижняя часть (относительно примера изображения) поднята, координаты реального мира в 2D остаются неизменными, но измеренные лазерные координаты становятся больше трапециевидными.См. Изображение ниже

enter image description here

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

Спасибо!

1 Ответ

0 голосов
/ 02 октября 2018

У меня была та же проблема в моем посте прямо здесь: https://stackoverflow.com/a/52480400/9130280

В качестве примера я задал вопрос о фотографиях, потому что это было легче объяснить, но я применил решение для позиционирования устройства на поверхности,Это близко к тому, что вы пытаетесь сделать.

По сути, вы должны использовать библиотеку OpenCvSharp 3 (из nuget).

Сначала вы должны получить гомографиюматрица.Единственные координаты, которые вы должны знать, это ребра.Таким образом, вы заполняете два массива краями и затем используете:

homographyMatrix = OpenCvSharp.Cv2.FindHomography(originalPointsList, targetPointsList);

И затем, чтобы получить любую точку в «миллиметрах» в ее эквиваленте в лазерных координатах:

targetPoint = OpenCvSharp.Cv2.PerspectiveTransform(orignalPoint, homographyMatrix);

Дайте мне знать, если вам нужно больше деталей.

...