Правильна ли моя стереокалибровка? Почему моя триангуляция не работает тогда?

1

Я пытаюсь получить 3D-облако точек из изображений моей стереокамеры. Я откалибровал свою стереокамеру (240х320 каждый) с OpenCV в Python и получил ошибку перепрограммирования 0,25. Я использовал шаблон шахматной доски с 9x10 строками и столбцами и сделал 10 изображений под разными углами при различных условиях освещения и передвинул камеру во время ее выполнения. (Я не уверен, может быть, эта проблема). Затем я импортировал их в Matlab, и Matlab дал мне углы шахматной доски. (Я выбрал matlab, потому что он был намного точнее, чем opencv). Затем я загрузил углы в свой скрипт калибровки python.

Внутренняя калибровка безупречна:

Изображение 174551

Но я не уверен, могу ли я использовать результаты внешней калибровки, потому что изображение по-прежнему круглая и имеет эти черные пространства; прямоугольные центры изображений хороши:

Изображение 174551

Параметры и матрицы сохраняются и загружаются в другом скрипте. Этот скрипт запускает оператор sobel через левое и правое изображение и находит соответствующие пиксели пикселей в обоих изображениях:

Изображение 174551

Затем я передаю соответствующие пиксели в cv.triangulatePoints(projMatr1, projMatr2, projPoints1, projPoints2), которые должны дать мне 3D-координаты точек. Я рисую их сюжетно, но результат не узнаваем и нигде не близок к краям показанной чашки:

Изображение 174551

Кто-нибудь есть идея, что это может быть или что я делаю неправильно? Я могу опубликовать свой код здесь, если это необходимо.

Теги:
opencv
camera-calibration

1 ответ

1
Лучший ответ

Хорошо, я попробовал обмен элементами строки и столбца совпадающих точек с [row, col] => [col, row], и теперь триангуляция работает:

Изображение 174551

Есть еще ложные соответствия, но все в порядке, я ожидал их. Но изменение строк и столбцов не работает с изображениями:

Изображение 174551

но это другая история, и я доволен результатом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню