Как получить соответствующий цвет пикселя координаты карты диспаратности - PullRequest
0 голосов
/ 29 апреля 2019

В настоящее время я работаю над заданием, состоящим из калибровки камеры, стереокалибровки и, наконец, согласования стереозвука.Для этого мне разрешено использовать доступные образцы и руководства OpenCV и адаптировать их к нашим потребностям.В то время как первые две части не были большой проблемой, Вопрос о стерео согласованной части:

Мы должны создать цветное облако точек в формате .ply из карты диспаратности двух предоставленных изображений.Я использую этот код в качестве шаблона: https://github.com/opencv/opencv/blob/master/samples/cpp/stereo_match.cpp Я получаю внутренние и внешние файлы из первых двух частей задания.

У меня вопрос, как получить соответствующий цвет для каждой 3D-точки из исходных изображений и карты диспаратности?

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

EDIT : я знаю, что значение каждого элемента карты диспаратности представляет диспаратность соответствующего пикселя между левым и правым изображением.Но как мне получить соответствующие пиксели из координат карты диспаратности?Пример: мое значение диспаратности в координатах (x, y) равно 128. 128 представляет глубину.Но как мне узнать, какому пикселю в исходном левом или правом изображении это соответствует?

Дополнительные вопросы У меня есть дополнительные вопросы о StereoSGBM и какие параметры имеют смысл.Вот мои (уменьшенные для загрузки) входные изображения:

слева:

enter image description here

справа

enter image description here

, которые дают мне эти исправленные изображения:

влево

enter image description here

вправо

enter image description here

Отсюда я получаю это несоответствиеimage:

enter image description here

Для изображения несоответствия: это лучший результат, которого я мог бы достичь, используя blockize = 3 и numDisparities = 512.Однако я совсем не уверен, что эти параметры имеют какой-то смысл.Эти значения разумны?

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Мой вопрос: как получить соответствующий цвет для каждой 3D-точки из исходных изображений и карты диспаратности?

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

Я почти уверен, что вычисляемое вами изображение несоответствия работает с полутоновыми изображениями, полученными из исходных изображений RGB. Если вы хотите вычислить изображение с несоответствием цветов, вам просто нужно извлечь отдельные цветовые каналы левого-правого изображений и вычислить соответствующий канал карты несоответствия. Результатом будет трехканальная карта диспаратности.

Дополнительные вопросы У меня есть дополнительные вопросы о StereoSGBM и о том, какие параметры имеют смысл. Вот мои (уменьшенные для загрузки) входные изображения:

На самый общий случай никогда не бывает хорошего ответа на это. Для этого вам нужен тюнер параметров. См. https://github.com/guimeira/stereo-tuner в качестве примера. Вы должны быть в состоянии написать свое собственное в open cv довольно легко, если хотите.

0 голосов
/ 26 июня 2019

Хорошо, решение этой проблемы - использовать функцию projectpoint () из OpenCV. По сути, рассчитайте 3D-точки из изображения с диспаратностью и спроецируйте их на 2D-изображение и используйте цвет, который вы нажали

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...