Документация CvStereoBMState для расчета диспаратности с помощью cv::StereoBM

Применение алгоритма сопоставления блоков Konolige недостаточно объяснено в документации OpenCV. Параметры CvStereoBMState влияют на точность расхождений, вычисляемых cv::StereoBM. Однако эти параметры не задокументированы. Я перечислю эти параметры ниже и опишу, что я понимаю. Может кто добавит описание параметров, которые непонятны.

  • preFilterType: определяет, какой фильтр применяется к изображению перед вычислением несоответствий. Может быть CV_STEREO_BM_XSOBEL (фильтр Собеля) или CV_STEREO_BM_NORMALIZED_RESPONSE (может быть, разница в средней интенсивности???)
  • preFilterSize: размер окна предварительного фильтра (ширина = высота окна, отрицательное значение)
  • preFilterCap: обрезает вывод до [-preFilterCap, preFilterCap]. Что происходит со значениями вне интервала?
  • SADWindowSize: размер сравниваемых окон на левом и правом изображении, где вычисляются суммы абсолютных разностей для нахождения соответствующих пикселей.
  • minDisparity: Наименьшее несоответствие, которое принимается во внимание. По умолчанию ноль, следует установить отрицательное значение, если возможны отрицательные несоответствия (зависит от угла между обзорами камер и расстояния измеряемого объекта до камер).
  • numberOfDisparities: Диапазон поиска несоответствий [minDisparity, minDisparity+numberOfDisparities].
  • textureThreshold: вычислять несоответствие только в тех местах, где текстура больше (или хотя бы равна?) этому порогу. Как определяется текстура??? Дисперсия в окружающем окне???
  • uniquenessRatio: цитируется из calib3d.hpp: «принимать вычисленное несоответствие d* только в том случае, если SAD(d) >= SAD(d*)(1 + uniquenessRatio/100.) для любого d != d+/ -1 в пределах диапазона поиска."
  • speckleRange: Не уверен.
  • попробуйSmallerWindows: ???
  • roi1, roi2: Рассчитать диспропорции только в этих регионах??? Не уверен.
  • speckleWindowSize: не уверен.
  • disp12MaxDiff: Не уверен, но комментарий в calib3d.hpp говорит, что выполняется проверка слева направо. Угадай: пиксели сопоставляются от левого изображения к правому изображению и от правого изображения обратно к левому изображению. Несоответствия действительны только в том случае, если расстояние между исходным левым пикселем и пикселем с обратным соответствием меньше, чем disp12MaxDiff.

person Simon Oelmann    schedule 25.03.2014    source источник
comment
minDisparity: [...] должно быть установлено отрицательное значение, поскольку возможны отрицательные различия. › это зависит от того, использовали ли вы флаг CV_CALIB_ZERO_DISPARITY в stereoRectify. Если да, то minDisparity следует установить равным нулю или положительному числу, потому что в этом случае несоответствие не может быть отрицательным. Для других переменных я не знаю.   -  person BConic    schedule 25.03.2014
comment
@AldurDisciple, что касается параметра minDisparity, я использую CV_CALIB_ZERO_DISPARITY в стереоректификации, но минимальное вычисленное несоответствие отрицательное (например, -16).   -  person Basel    schedule 07.05.2014
comment
Где-нибудь описан сам алгоритм?   -  person Stepan Yakovenko    schedule 21.02.2018


Ответы (2)


speckleWindowSize и speckleRange являются параметрами функции cv::filterSpeckles. Взгляните на документацию OpenCV. cv::filterSpeckles используется для постобработки карты несоответствий. Он заменяет капли одинакового несоответствия (разность двух соседних значений не превышает speckleRange), чей размер меньше или равен speckleWindowSize (количество пикселей, образующих пятно) недопустимым значением несоответствия (либо short -16, либо float -1.f ).

person Tobias    schedule 10.02.2015

Параметры лучше описаны в учебнике Python по карте глубины из стереоизображений. Параметры вроде те же.

texture_threshold: отфильтровывает области с недостаточной текстурой для надежного сопоставления.

Диапазон и размер пятен. Сопоставители на основе блоков часто создают пятна рядом с границами объектов, где окно сопоставления захватывает передний план с одной стороны и фон с другой. В этой сцене кажется, что сопоставитель также находит небольшие ложные совпадения в спроецированной текстуре на столе. Чтобы избавиться от этих артефактов, мы подвергаем изображение несоответствия постобработке с помощью спекл-фильтра, управляемого параметрами speckle_size и speckle_range. speckle_size — это количество пикселей, ниже которого капля несоответствия отклоняется как пятнышко. speckle_range определяет, насколько близкими должны быть различия в значениях, чтобы считаться частью одного и того же большого двоичного объекта.

Количество несоответствий: количество пикселей, на которое нужно сдвинуть окно. Чем он больше, тем больше диапазон видимых глубин, но требуется больше вычислений.

min_disparity: смещение от x-позиции левого пикселя, с которого начинается поиск.

uniqueness_ratio: еще один этап постфильтрации. Если наилучшее совпадающее несоответствие недостаточно лучше любого другого несоответствия в диапазоне поиска, пиксель отфильтровывается. Вы можете попробовать настроить это, если texture_threshold и спекл-фильтрация все еще пропускают ложные совпадения.

prefilter_size и prefilter_cap: этап предварительной фильтрации, который нормализует яркость изображения и улучшает текстуру при подготовке к сопоставлению блоков. Обычно вам не нужно настраивать их.

Также ознакомьтесь с этим руководством по ROS по выбору параметров стерео.

person eirikaso    schedule 22.05.2019
comment
Ссылка на решение приветствуется, но убедитесь, что ваш ответ полезен и без нее: добавьте контекст вокруг ссылки, чтобы другие пользователи иметь некоторое представление о том, что это такое и почему оно там, а затем процитировать наиболее релевантную часть страницы, на которую вы ссылаетесь, в случае, если целевая страница недоступна. Ответы, которые представляют собой не более чем ссылку, могут быть удалены. - person double-beep; 22.05.2019