Я использовал замечательную оболочку Emgu C # для OpenCV для сбора изображений с домашней стереосистемы.Две веб-камеры скреплены болтами с куском дерева, на расстоянии 35 см друг от друга, что, я надеюсь, позволит мне составить карты глубины на расстоянии 10-20 м.Я установил их так, чтобы они были максимально параллельными (около 89,3 градуса из теста триангуляции).
Я пытаюсь сделать карту несоответствия из них, и хотя процесс работает как код, результаты очень случайны.Под этим я подразумеваю, что каждый раз, когда я пытаюсь запустить стерео выпрямление, я получаю очень разные результаты, и изображение часто настолько сильно искажено, что на экране почти ничего не видно.
Как я понимаю, как это сделатьвыглядит следующим образом:
1) Распечатайте рисунок шахматной доски (например, 6 на 8 внутренних углов) - наклейте на что-нибудь плоское.
2) Сделайте набор из 10 фотографий изкамера 1 держит шахматную доску в полный обзор, но в разных положениях.
3) используйте CameraCalibration.FindChessboardCorners, чтобы найти внутренние углы (6 на 8)
4), используйте img.FindCornerSubPix () дляуточните эти угловые местоположения до уровня субпикселя
5) используйте CameraCalibration.CalibrateCamera () для вычисления внутренних данных камеры и сохраните его как файл XML
6) Повторите выше для камеры 2.
7) Теперь у вас есть информация о внутреннем искажении камеры, которую вы можете взять стереофоническую пару и использовать CameraCalibration.StereoCalibrate () с предопределенными внутренними данными.лукаво рассчитывается для обработки внешней информации (смещения и повороты между камерой 1 и 2).
8) Используйте CvInvoke.cvStereoRectify () и CvInvoke.cvInitUndistortRectifyMap (), а затем CvInvoke.cvRemap () для создания выходных данных.изображение, которое должно быть выстроено в Y, чтобы вы могли запустить один из тестов соответствия стерео.
Я обнаружил, что вам нужно использовать Emgu 2.1 ver 806, чтобы cvStereoRectify работал без ошибки Access Violation.
Я предполагаю, что мои вопросы:
A) Мой процесс правильный?Я выполняю внутреннюю калибровку камеры как отдельный процесс, потому что, когда камеры находятся на расстоянии 35 см друг от друга, нелегко увидеть шахматную доску в поле зрения обоих в офисе и много ее перемещать ... так как она скоро уходит в сторонуодного из видов камеры.Я полагал, что, поскольку значения являются внутренними, они относятся к камере и, следовательно, должны перейти к стерео процедуре ОК.Это правильно?
Кажется, что внутренние значения изменяются во время процесса cvStereoRectify и делаются очень разными.
Например.Значения искажения от первой стадии = 0,22, -1,2,0.01, -0,01,2,6 после cvStereoRectify значения были изменены на = 10, -489, -0,03, -0,09,13208
Я не эксперт, нопервый набор кажется больше похожим на то, что я видел в комментариях других людей, а второй набор выглядит довольно неплохо!
B) Есть ли способ остановить обновление значений intrinsic + distortion во время cvStereoRectify?
C) Это кажется правильным для внутренних значений (937,0,290,0,932,249,0,0,1)?
Большое спасибо за любые подсказки ... Я застрялоб этом на некоторое время сейчас ... и я действительно не уверен, какая часть процесса выбрасывает ошибки.Любые советы или предложения будут приветствоваться ...