Emgu (OpenCV для C #) - построение карты несоответствия с использованием cvStereoRectify

Я использовал замечательную оболочку Emgu C # для OpenCV для сбора изображений с домашней стереосистемы. Две веб-камеры, прикрепленные болтами к куску дерева, на расстоянии 35 см друг от друга, чтобы, надеюсь, позволить мне создавать карты глубины в диапазоне 10-20 метров. Я настроил их так, чтобы они были настолько параллельны, насколько это возможно (около 89,3 градуса по результатам теста триангуляции).

Я пытаюсь составить из них карту несоответствия, и хотя процесс работает как код, результаты очень случайны.

7) Теперь у вас есть внутренняя информация об искажениях камеры, вы можете взять пару стереофотографий и использовать CameraCalibration.StereoCalibrate () с внутренними данными, предварительно рассчитанными для обработки внешней информации (смещения и вращения между камерой 1 и 2).

8) Используйте CvInvoke.cvStereoRectify () и CvInvoke.cvInitUndistortRectifyMap (), а затем CvInvoke.cvRemap () для создания выходного изображения, которое должно быть выровнено по Y, чтобы вы могли запустить один из тестов стереосоответствия.

Я обнаружил, что вам нужно использовать Emgu 2.1 версии 806, чтобы cvStereoRectify работал без ошибки нарушения прав доступа.


Думаю, у меня следующие вопросы:

A) Правильный ли мой процесс? Я выполняю внутреннюю калибровку камеры как отдельный процесс, потому что камеры находятся на расстоянии 35 см друг от друга ». Нелегко получить шахматную доску на виду у них обоих в офисе и много ее перемещать ... так как она скоро уйдет за пределы одной из камер. Я полагал, что, поскольку значения являются внутренними, они связаны с камерой и, следовательно, должны быть перенесены в стереопроцедура ОК. Это правильно?

Похоже, что внутренние значения изменяются во время процесса cvStereoRectify и становятся совершенно другими.

например. Значения искажений от первой ступени = 0,22, -1,2,0,01, -0,01,2,6 и делаются очень разными.

например. Значения искажений от первой ступени = 0,22, -1,2,0,01, -0,01,2,6 и делаются очень разными.

например. Значения искажений от первой ступени = 0,22, -1,2,0,01, -0,01,2,6 после cvStereoRectify значения были изменены на = 10, -489, -0.03, -0.09,13208

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

B) Есть ли способ остановить обновление значений внутреннего + искажения во время cvStereoRectify?

C) Это кажется правильным для внутренних значений (937,0,290,0,932,249,0,0 , 1)?

Большое спасибо за любые советы ... Я уже какое-то время зацикливаюсь на этом ... и я действительно не уверен, какая часть процесса вызывает ошибки. Мы будем очень рады любым советам и предложениям ...

7
задан timemirror 28 September 2010 в 20:29
поделиться