Я пытаюсь получить трехмерное облако точек из изображений с моей стереокамеры.Я откалибровал свою стереокамеру (240x320 каждая) с помощью OpenCV в Python и получил ошибку перепроецирования 0,25.Я использовал шахматную доску с 9х10 строками и столбцами, сделал 10 изображений под разными углами при разных условиях освещения и при этом передвинул камеру.(Я не уверен, может быть, в этом проблема) Затем я импортировал их в Matlab, и Matlab дал мне углы шахматной доски.(Я выбрал matlab, потому что он был гораздо более точным, чем opencv) Затем я загрузил углы в свой скрипт калибровки python.
Внутренняя калибровка безупречна:
Но я не уверен, смогу ли я использовать результаты внешней калибровки, потому что изображение все еще круглое и имеет эти черные пробелы;прямоугольные центры изображений хороши:
Параметры и матрицы сохраняются и загружаются в другой скрипт.Этот скрипт запускает оператор sobel через левое и правое изображение и находит совпадающие краевые пиксели на обоих изображениях:
Затем я передаю эти совпадающие пиксели в cv.triangulatePoints (projMatr1, projMatr2, projPoints1, projPoints2), которые должны дать мне трехмерные координаты точек.Я заговариваю их с заговором, но результат не узнаваем и не приближается к краям показанной чашки:
У кого-нибудь есть идеи, что это может быть или что яя делаю неправильно?Я могу опубликовать свой код здесь, если это необходимо.