Карта диспаратности, которая у вас есть, "выглядит" хорошо для блочного сопоставления.
Блочное сопоставление - это самый простой метод получения карт диспаратности. Это локальный метод, который вычисляет оценку диспаратности с помощью перебора (фильтрация по модулю из opencv). Следовательно, его выход ограничен по точности и обычно является шумным.
Как уже упоминалось, вы можете настроить размер окна, чтобы немного улучшить результаты, но это не улучшит несоответствие значительно.
Посмотрите оценку стерео в тесте KITTI и выберите более точный алгоритм, если у вас есть к. OpenCV имеет реализацию SGM, которая обеспечивает более плавное неравенство. Желаемое качество карт диспаратности зависит от вашего приложения. В некоторых случаях достаточно сопоставления блоков. Для других это может быть не так.
Помните, что определение несоответствия: разница между координатой x пикселя в левом изображении и соответствующим ему пикселем в правом изображении. То есть единицей измерения несоответствия являются «пиксели».
Чем больше неравенство, тем ближе объекты. Когда вы масштабируете изображение для отображения, большие диспропорции становятся ярче. Например, дорожный знак находится ближе к камере и кажется ярче пикселей на дороге.
Ваши значения диспаратности не должны быть между 0 и 1. Вы масштабируете изображение для отображения как uint8, что подходит для отображения, но не подходит для использования диспаратности для фактического измерения.
В OpenCV поведение по умолчанию заключается в создании карты диспаратности в виде короткого знака со знаком, полученного путем умножения субпиксельных сдвигов на 16. Чтобы получить истинные значения диспаратности, вы делите вывод opencv на 16 и конвертируете в число с плавающей запятой.
Вы можете сделать что-то вроде этого:
cv::Mat<float> true_dmap = disp * (1.0 / 16.0f);
or
disp.convertTo(true_dmap, CV_32F, 1.0/16.0, 0.0);
Или вы можете вызвать reprojectImageTo3D, чтобы получить облако точек с учетом расчетной карты несоответствия и стерео калибровка.
Обратите внимание: если вы попытаетесь отобразить true_map через imshow, вы не увидите ничего значимого.
Удачи,
person
bendervader
schedule
24.03.2015