2016-02-03 10 views
2

Я пытался получить калибровку камеры OpenCV в течение нескольких месяцев, но до сих пор я не увенчался успехом. Я нахожусь в точке, где я могу получить низкую ошибку повторного проецирования (ниже 0,5 пикселя), но когда я просматриваю изображения, выводимые на stereoRectify, они явно не исправлены правильно. Соответствующие точки не выровнены по горизонтали. Заметные эффекты выпрямления - слегка вращать одно изображение и приближать другое изображение. Карты различий, генерируемые выпрямлением, являются шумными и просто неверными (с использованием как StereoSGBM, так и StereoVar).Стереокалибровка OpenCV имеет низкую ошибку повторного проецирования, но неверна

Я попытался использовать несколько различных наборов калибровочных изображений в диапазоне от 20 до 80 кадров. Я пробовал различные комбинации размеров, расстояния и вращения шахматной доски, все безрезультатно. В каждом случае я получаю разные результаты, но все они имеют тип бесполезных карт различий, описанных выше.

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

ответ

2

Учитывая, что он работает в MATLAB, я предполагаю, что ваши стереокамеры настроены правильно, что означает, что они полностью фиксированы. Что мне приходит в голову: вы откалибрировали камеры по отдельности? Таким образом, вы можете использовать матрицу камеры и коэффициенты искажения в stereoRectify. Кроме того, я заметил, что findChessboardCorners не работает хорошо, когда качество изображения низкое. Но это должно привести к высокой ошибке RMS. В любом случае, вы должны иметь не только достаточно большое количество изображений (я использовал 100), но также имеют разные углы калибровочной платы для камеры. И расстояние до платы до камер не должно быть слишком высоким, поэтому плата покрывает большую часть изображения. (Поскольку плата должна быть полностью видимой для обеих камер, я использовал предварительный просмотр, чтобы скорректировать позицию.) Все это не отвечает на ваш вопрос, но я надеюсь, что это все равно поможет.

+0

Я не калибровал камеры отдельно, но, добавив это в свой код, я столкнулся с большим количеством проблем, главным образом, масштабирование и обрезка были единственным заметным эффектом stereoRectify. Спасибо за предложение, но он не считает работу. :( – KFox

0

Вы калибруете с использованием тех же изображений как в MATLAB, так и в OpenCV? Кроме того, вы используете Stereo Camera Calibrator app в MATLAB?

Если вы используете точные калибровочные изображения, то вероятным объяснением того, что вы видите, является то, что детектор шахматной доски в MATLAB более точен, чем тот, который находится в OpenCV.

Если вы используете разные калибровочные изображения, тогда я попытался бы исказить изображения в OpenCV, используя функцию undistort вместо их исправления. Скорее всего, неискаженные изображения будут выглядеть ужасно извращенными и сложенными на себя. Это, вместе с низкими ошибками перепечатки, указывает на то, что вы не получите хорошую оценку искажения объектива. Обычно это происходит, когда ваша шахматная доска находится в основном в середине изображения, и вы не получаете точек вблизи краев. Средством здесь было бы получить больше изображений с шахматной доской, расположенной рядом с краями и углами изображения.

+0

Я не использую приложение в MATLAB, и да, я использую одни и те же изображения. Я не совсем уверен, что вы предлагаете мне ... Я уже использую стереорекцию OpenCV, чтобы делать неисторические действия, если это то, что вы предлагаете – KFox

+0

Я отредактировал ответ. Я предлагаю использовать функцию 'undistort', чтобы искажать изображения, а не исправлять их. Это может сделать проблему более очевидной. Если вы не используете приложение MATLAB, то что вы используя для калибровки в MATLAB? – Dima

+0

Спасибо за вашу помощь, но я узнал, что проблема связана с сжатием видео. Попробовав несколько видеоформатов, я обнаружил, что HFYU заставляет что-то работать по какой-то причине! – KFox