#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.