Что такое аргументы ximgproc_DisparityWLSFilter.filter()?

Я получаю ximgproc_DisparityWLSFilter от cv2.ximgproc.createDisparityWLSFilter(left_matcher), но не могу заставить ximgproc_DisparityWLSFilter.filter() работать.

Ошибка, которую я получаю,

Ошибка OpenCV: утверждение не удалось (!disparity_map_right.empty() && (disparity_map_right.depth() == CV_16S) && (disparity_map_right.channels() == 1)) в cv::ximgproc::DisparityWLSFilterImpl::filter, file.. ....\opencv_contrib\modules\ximgproc\src\disparity_filters.cpp, строка 262

В общем, как мне понять, как это использовать, когда нет ни одного результата Google для "ximgproc_DisparityWLSFilter"?


person powersupply    schedule 31.05.2017    source источник


Ответы (2)


У меня тоже была эта проблема, вам нужно сначала создать фильтр. Затем вы можете фильтровать... надеюсь, это имеет смысл. Вот фрагмент кода того, что я тестировал на Python 3.6 opencv3.4.2.

wls = cv2.ximgproc.createDisparityWLSFilter(left_Matcher)
filteredDisp = wls.filter(leftStereoComputeOutput, leftOriginalImage, disparity_map_right=rightStereoComputeOutput)

Чтобы понять, как работает этот бит, мне пришлось просмотреть документацию и то, что другие люди реализовали на Github, а затем соединить части. Много проб и ошибок.

Аргументы для фильтра:

Python:
filtered_disparity_map  =   cv.ximgproc_DisparityFilter.filter( disparity_map_left, left_view[, filtered_disparity_map[, disparity_map_right[, ROI[, right_view]]]] )

Параметры:

disparity_map_left карта несоответствия левого обзора, 1 канал, тип CV_16S. Неявно предполагает, что значения диспаратности масштабируются на 16 (диспаритет в один пиксель соответствует значению 16 на карте диспаратности). Карта диспаратности может иметь любое разрешение, она будет автоматически изменена в соответствии с разрешением left_view.

left_view левое представление исходной стереопары для управления процессом фильтрации, 8-битное одноканальное или трехканальное изображение.

filtered_disparity_map выходная карта несоответствий.

disparity_map_right необязательный аргумент, некоторые реализации могут также использовать карту несоответствий правильного представления, например, для вычисления карт достоверности.

Область ROI карты несоответствий для фильтрации. Необязательный, обычно он должен быть установлен автоматически.

right_view необязательный аргумент, некоторые реализации могут также использовать правое представление исходной стереопары.

Указанные выше параметры были найдены по адресу https://docs.opencv.org/3.4/ db/d72/classcv

wls = cv2.ximgproc.createDisparityWLSFilter(left_Matcher)
filteredDisp = wls.filter(leftStereoComputeOutput, leftOriginalImage, disparity_map_right=rightStereoComputeOutput)
1ximgproc
wls = cv2.ximgproc.createDisparityWLSFilter(left_Matcher)
filteredDisp = wls.filter(leftStereoComputeOutput, leftOriginalImage, disparity_map_right=rightStereoComputeOutput)
1DisparityFilter.html

person Jacob W. Dallas    schedule 09.01.2019
comment
Где взять rightStereoComputeOutput? SGBM и SBM возвращают только левое несоответствие. - person jiggy; 30.09.2019
comment
Что такое left_matcher? Я просматривал документы и не могу понять эту часть. - person Matthew Salvatore Viglione; 28.06.2020
comment
Привет, Мэтт и Джигги, я собираюсь обновить свой ответ кодом, чтобы у вас был некоторый контекст. - person Jacob W. Dallas; 01.07.2020
comment
Ну, я собирался, но, похоже, у меня чертовски много времени на поиски этого конкретного произведения. На каждый из ваших вопросов (насколько мне известно): jiggy - rightStereoComputeOutput был просто переменной, которую я назвал для необязательного аргумента disparity_map_right. Он рассчитывается аналогично тому, как вы получили disparity_map_left, за исключением того, что вы переворачиваете фотографии. Мэтт - Я бы хотел, чтобы кодовая база была передо мной, но я не могу вспомнить, что это было, извиняюсь. - person Jacob W. Dallas; 02.07.2020

В отличие от C++, Python плохо работает с указателями. Итак, аргументы

Filtered_disp = ximgproc_DisparityWLSFilter.filter(left_disp,left, None, right_disp)

Обратите внимание, что это больше не функция void в Python!

Хотя я понял это методом проб и ошибок.

person guest    schedule 01.06.2017