Я пытаюсь вычислить карту диспаратности в C ++, используя OpenCV 3.1. Я использую алгоритм StereoSGBM, и мне нужно уметь распознавать далекие и очень близкие объекты. Таким образом я установил MinDisparity на -16 и MaxDisparity 160.
Камера теперь правильно откалибрована, но полученная карта диспаратности обрезана слева. Количество среза зависит от настроек MaxDisparity.
Я бы понял, почему это происходит для близких объектов. Просто потому, что пиксели на одном изображении недоступны на втором изображении. Но это не происходит с более отдаленными объектами. В этом случае объект полностью виден на обоих изображениях с камеры, но он не виден на полученной карте диспаратности.
Посмотри на эту картину. Почему моя рука не видна на результате?
Есть ли решение этой проблемы? Вычислить карту диспаратности для всей видимой области в случае высоких настроек MaxDisparity?
Проблема, с которой вы сталкиваетесь, заключается в количестве различий в вашей итоговой картине. SGBM просматривает все пространство несоответствия и пытается найти лучшее соответствие на другой картинке.
Пиксель правого изображения берется и сравнивается с каждым пикселем в диапазоне диспаратности от левого изображения. Если левое изображение слишком маленькое, несоответствие недопустимо. Поэтому 176 самых левых пикселей на левом изображении отбрасываются.
Попробуйте уменьшить максимальное несоответствие и / или увеличить минимальное несоответствие!
Других решений пока нет …