Документация 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 + уникальностьRatio/100.) для любого d!= d +/- 1 в поиске диапазон".
  • speckleRange: Не уверен.
  • trySmallerWindows:
  • roi1, roi2: рассчитать диспропорции только в этих регионах??? Неуверенный.
  • speckleWindowSize: не уверен.
  • disp12MaxDiff: не уверен, но комментарий в calib3d.hpp говорит, что выполняется проверка влево-вправо. Угадайте: пиксели сопоставляются с левым изображением на правильное изображение и с правого изображения обратно на левое изображение. Различия действительны только в том случае, если расстояние между исходным левым пикселем и обратным пикселем меньше, чем disp12MaxDiff.

Ответ 1

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

Ответ 2

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

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

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

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

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

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

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

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