0

У меня есть параллельная тринокулярная установка, в которой все 3 камеры имеют коллинеарную форму, как показано ниже.Слияние карт глубины для тринокулярного стерео

Левая камера ------------ Центральная камера ---------------------------- ----- Правая камера

Базовая линия (расстояние между камерами) между левой и центральной камерой является самой короткой, а базовая линия между левой и правой камерой является самой длинной.

В теории я могу получить 3 набора изображений несоответствия с использованием различных комбинаций камер (L-R, L-C и C-R). Я могу создавать карты глубины (3D-точки) для каждой карты несоответствия с использованием триангуляции. Теперь у меня есть 3 карты глубины.

Комбинация LC имеет более высокую точность глубины (измеренное расстояние более точное) для объектов, находящихся вблизи (поскольку базовый уровень является коротким), тогда как комбинация LR имеет более высокую точность глубины для объектов, которые далеки (поскольку базовая линия длинная). Точно так же комбинация C-R точна для объектов на среднем расстоянии.

В стереоустановках обычно мы определяем изображение слева (RGB) в качестве эталонного изображения. В моем проекте, порождая значения глубины, я получаю ROI на эталонном изображении. Например, я нахожу все пиксели, которые имеют значение глубины между 10-20 м и находят их соответствующие пиксельные местоположения. В этом случае у меня есть связь между трехмерными точками и их соответствующим расположением пикселей.

Поскольку в обычных стереосистемах мы можем иметь более высокую точность глубины только для одной из двух областей в зависимости от базовой линии (ближней и дальней), я планирую использовать 3 камеры. Это помогает мне создавать 3D-точки с более высокой точностью для трех регионов (ближнего, среднего и дальнего).

Теперь я хочу объединить 3 карты глубины, чтобы получить глобальную карту. Мои проблемы следующие:

  1. Как слить три карты глубины?
  2. После слияния, как я знаю, какая глубина значение соответствует какому расположению пиксела в ссылке (слева RGB) изображении?

Ваша помощь будет оценена :)

ответ

0

1) Я думаю, что просто «слияние» из карт глубины (как матрицы значений) не представляется возможным, если вы думаете о глобальной 2D карты глубины как изображение или матрицу значений глубины. Вместо этого вы можете объединить 3 набора трехмерных точек с некоторыми критериями подобия, такими как расстояние (уточнение вашего облака точек). Если они слишком близко, удалить одну из темы (псевдокод)

for i in range(points): 
for j in range(i,points): 
    if distance(i,j) < treshold 
    delete(j) 

или удалить 2 пункта и добавить точку, которые имеют средние координаты

2) От точки один, этот вопрос стал «как подключить 3D-точка для связанного пикселя в левом изображении "(это единственная интерпретация). Ответ просто: используйте уравнение проекции.Если у вас есть K (внутренняя матрица), R (вращение матрицы) и т (перевод вектор) от калибровки левой камеры, присоединиться к R и т в матрице 3х4

[R|t] 

, а затем подключите M 3D точку в 4-мерные координаты (X, Y, Z 1) в качестве точки м (U, V, W)

m = K*[R|t]*M 

делят м на его третьей координаты ш и вы получить

m = (u', v', 1) 

и» и v '- координаты пикселей в левом изображении.

+0

Большое спасибо @marcoresk. Я думаю, что для слияния облака 3D-точек я могу использовать ближайшего соседа или некоторую форму измерения расстояния. Однако мои камеры не статичны, у меня есть внутренняя матрица K, но как найти R и T? У меня нет предопределенной мировой системы координат. Простите меня, если я буду казаться наивным, я все еще участвую в процессе обучения. –

+0

@Beginner_In_Image_Processing приветствую вас, я тоже в процессе обучения. Я предположил, что предложение «У меня есть параллельная тринокулярная установка, где все 3 камеры» означают «взаимные позиции/ориентация 3-х камер, фиксированы относительно левой камеры». Я также предположил, что набор несоответствий является «статическим» объектом, единым фреймом «замороженным» во времени. Таким образом, вы можете получить R и te, выполнив некоторую процедуру стереокалибровки, например [this] (https://github.com/opencv/opencv/blob/master/samples/cpp/stereo_calib.cpp). Ваша мировая система координат задана как левая кулачка – marcoresk

+0

@Beginner_In_Image_Processing, если вам нужно объединить очки, сделанные в разное время, когда вы перемещаете триникулярную систему (предполагаемую жесткой в ​​предыдущем комментарии), тогда все становится сложнее. В следующий раз не забудьте указать, что ваши камеры находятся в движении или нет. Если вы оценили мой ответ, пожалуйста, подумайте о его принятии. – marcoresk