Карта несоответствия OpenCV вырезана слева

Я пытаюсь вычислить карту диспаратности в C ++, используя OpenCV 3.1. Я использую алгоритм StereoSGBM, и мне нужно уметь распознавать далекие и очень близкие объекты. Таким образом я установил MinDisparity на -16 и MaxDisparity 160.

Камера теперь правильно откалибрована, но полученная карта диспаратности обрезана слева. Количество среза зависит от настроек MaxDisparity.

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

Посмотри на эту картину. Почему моя рука не видна на результате?
введите описание изображения здесь

Есть ли решение этой проблемы? Вычислить карту диспаратности для всей видимой области в случае высоких настроек MaxDisparity?

2

Решение

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

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

Попробуйте уменьшить максимальное несоответствие и / или увеличить минимальное несоответствие!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]