Обработка изображений: плохое качество изображения несоответствия с OpenCV

Я хочу создать изображение несоответствия, используя два изображения с USB-камер с низким разрешением. Я использую OpenCV 4.0.0. Кадры, которые я использую, взяты из видео. Результаты, которые я сейчас получаю, очень плохи (см. ниже).

несоответствие

Обе камеры были откалиброваны, и данные калибровки использовались для устранения искажений изображений. Это из-за низкого разрешения левого изображения и правого изображения?

Left:

слева

Right:

право

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

Overlay:

наложение

Значения для функции cv2.StereoSGBM_create() основаны на значениях примера кода, поставляемого с OpenCV (находится в OpenCV/samples/python/stereo_match.py).

Я был бы очень благодарен за любую помощь или предложения.

Вот мой код:

# convert both image to grayscale
left = cv2.cvtColor(left, cv2.COLOR_BGR2GRAY)
right = cv2.cvtColor(right, cv2.COLOR_BGR2GRAY)

# set the disparity matcher        
window_size = 3
min_disp = 16
num_disp = 112-min_disp
stereo = cv2.StereoSGBM_create(minDisparity = min_disp,
    numDisparities = num_disp,
    blockSize = 16,
    P1 = 8*3*window_size**2,
    P2 = 32*3*window_size**2,
    disp12MaxDiff = 1,
    uniquenessRatio = 10,
    speckleWindowSize = 100,
    speckleRange = 32
)

# compute disparity
dis = stereo.compute(left, right).astype(np.float32) / 16.0

# display the computed disparity image
matploitlib.pyplot.imshow(dis, 'gray')
matploitlib.pyplot.show()

person Johannes Vitt    schedule 28.09.2019    source источник
comment
Для стереосопоставления очень важно, чтобы левое и правое изображения были сняты одновременно, а изображения после ректификации должны быть выровнены по вертикали. В вашем оверлейном изображении нет вертикального выравнивания. Взгляните на эту страницу. понять, зачем это нужно.   -  person Catree    schedule 29.09.2019
comment
@Катри Спасибо! Вертикальное выравнивание было проблемой с изображениями. Если бы вы опубликовали это как ответ, я мог бы принять это.   -  person Johannes Vitt    schedule 09.10.2019


Ответы (2)


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

OpenCV имеет все инструменты, необходимые для выполнения как калибровки, так и исправления. Если вам необходимо выполнить калибровку, вам также необходимо иметь в наличии шаблон калибровки (шахматную доску).

Короче говоря:

  1. Вычислите внутренние параметры камеры, используя calibrateCamera().
  2. Используйте внутренние параметры с stereoCalibrate() для выполнения внешней калибровки. стереопары.
  3. Используя параметры из stereoCalibrate(), вычислите параметры исправления с помощью stereoRectify()
  4. Используя параметры ректификации, рассчитайте карты, используемые для ректификации и устранения искажений, с помощью initUndistortRectifyMap()< /а>

Теперь ваши камеры откалиброваны, и вы можете выполнить исправление и устранение искажений с помощью remap() для изображений, снятых парой камер (при условии, что камеры не перемещаются относительно друг друга). Исправленные изображения, рассчитанные с помощью remap(), теперь можно использовать для расчета изображений диспаратности.

Кроме того, я рекомендую проверить некоторые соответствующие учебники по теме. Изучение OpenCV: компьютерное зрение с помощью библиотеки OpenCV содержит очень практическое описание процесса.

person sebasth    schedule 01.10.2019

Я согласен с комментарием @Catree и ответом @sebasth, главным образом потому, что ваши изображения вообще не исправлены.

Однако может возникнуть другая проблема, и я хотел бы предупредить вас об этом. Я пытался оставить комментарий к ответу @sebasth, но пока не могу комментировать...

Как вы сказали, вы используете USB-камеры с низким разрешением, это заставляет меня поверить, что эти камеры имеют экспозицию света, создаваемую объективами Rolling Shutter. Для движущихся и постоянно меняющихся сцен идеально подходят камеры с глобальным затвором. Это особенно актуально, если вы собираетесь использовать это для сцен в движении.

(Пример эффекта Rolling Shutter: введите здесь описание ссылки).

Таким образом, с объективами Rolling Shutter вам также придется позаботиться о синхронизации камер.

Он может работать с камерами со скользящим затвором, но вам нужно будет позаботиться о синхронизации объектива, желательно в контролируемой среде (даже при небольшом изменении освещения).

Также не забудьте отключить автоматические параметры камеры, такие как: «Баланс белого» и особенно «Экспозиция».

С наилучшими пожеланиями!

person ThiagoRTK    schedule 08.10.2019