Нахождение проекции и расстояния z

#math #distance #kinect #projective-geometry

#математика #расстояние #kinect #проективная геометрия

Вопрос:

У меня есть изображение, представляющее проекцию. Я собираюсь объяснить проблему на примере:

На экране есть линия от одной точки E (100 200) до другой точки H (150 100). A представляют собой одну точку, которая в реальном мире находится на расстоянии 200 см, в то время как B — это точка, которая в реальном мире находится на расстоянии 300 см.

То, что я хотел бы знать, это:

Учитывая одну точку линии, которая проходит для этих двух точек, есть ли способ вычислить данные о расстоянии z, которые она должна иметь?

Что, если расстояние z не является линейной функцией, а является некоторой логарифмической функцией?

Если это непонятно, спрашивайте меня обо всем,

Проекция расстояния в глубину

Приветствия

Комментарии:

1. у вас нет gimp, вы должны сохранить файл в формате jpeg и вставить его в вопрос, что значительно облегчает жизнь всем остальным

2. E, H, A, B… Нет ли здесь дубликатов? Я согласен с Дэвином, вашему описанию ужасно не хватает ясности… О каком расстоянии z вы говорите? B находится на расстоянии 300 см … от чего / кого?

3. извините, ребята, это изображение было создано раньше.. вы правы, расстояние z — это расстояние от камеры до точки

Ответ №1:

Я думаю, что вы получаете правильную интерполяцию в перспективе. Если вы знаете глубину в точке E и глубину в точке H, а B находится на линии (на изображении), соединяющей эти две точки, решите для глубины в точке B с помощью:

 1/Zb = s * 1/Ze   (1-s) * 1/Zh
  

где s — нормализованный параметр расстояния / интерполяции (между 0 и 1) вдоль линии в пространстве экрана, означающий B = s * E (1-s) * H

Комментарии:

1. Зная, что перспективная проекция обратно пропорциональна расстоянию, я тоже направлялся именно к этому — мне кажется, это хорошо!

2. @Mr E , у меня проблемы с вычислением этого параметра s. Можете ли вы предоставить мне дополнительную информацию о том, как я могу это рассчитать?

3. Возможно, я неправильно истолковал ваш вопрос повторно. какие точки являются какими. Я предполагаю, что у вас есть две точки на изображении, E и H, обе имеют известную глубину. Вы хотите вычислить глубину в точке вдоль линии, соединяющей эти две точки. Второе уравнение — это уравнение прямой линии (отрезка) между E и H. ‘s’ — это переменная, которая перемещает вас вдоль линии. В настоящее время, откуда вы знаете, что третья точка находится на линии, соединяющей две точки?

4. Я нахожусь вдали от своего компьютера уже несколько часов, но могу ответить на вопросы позже

5. Спасибо, это ограничение из-за того, что третья точка находится на прямой. Давайте возьмем изображение, которое я опубликовал в качестве примера, с точками a, b, c. Я знаю координаты x, y, z для a и b. Если я хочу вычислить координату z точки C (которая находится на линии, которая проходит между A и B), зная координаты x и y (300,300) в этом случае. Как я могу найти ее координату z (1,5 метра на этом рисунке)

Ответ №2:

Используйте однородные координаты, которые могут быть линейно интерполированы в пространстве экрана (для глубины и текстуры): http://www.cs.unc.edu /~olano/документы/2dh-tri/

Комментарии:

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

2. Расстояние Z напрямую вычислимо из однородных координат. Фактически, 1 / Z интерполируется линейно (и обычно является последней однородной координатой), если вы хотите перейти к ответу.

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

4. Если вы используете что-либо, кроме линейной интерполяции 1 / depth, я не уверен, что вы делаете.

5. Я изменил весь свой код, чтобы использовать координаты реального мира Kinect, и, работая с ними, я могу легко найти все нужные мне координаты z.