2015-07-22 3 views
1

Как вы определяете, что внутренние и внешние параметры, которые вы рассчитали для камеры в момент времени X, по-прежнему действительны в момент времени Y?Убедитесь, что калибровка камеры по-прежнему действительна

Моя идея была бы

  1. использовать известный калибровочный объект (шахматную доску) и поместите его в поле зрения камеры в момент Y.
  2. Вычислить шахматную доску угловых точек в изображении камеры (в момент времени Y).
  3. Определите одну из угловых точек шахматной доски как мировое происхождение и вычислите мировые координаты всех оставшихся углов шахматной доски на основе этого происхождения.
  4. Отнести координаты 3. с помощью системы координат камеры.
  5. Используйте параметры, рассчитанные по времени X для расчета точек изображения точек из 4.
  6. Вычислить расстояние между точками из 2. с точками из 5.

Это умный способ идти о Это? В конечном итоге я хотел бы реализовать его в MATLAB, а затем, возможно, в openCV. Я думаю, что я знаю, как делать шаги 1) -2) и шаг 6). Может быть, кто-то может дать грубую реализацию для шагов 2) -5). Особенно я не уверен, как связать «шахматную систему-координату-систему» ​​с «системой координат камеры-мира», которую, я считаю, мне придется делать.

Спасибо!

+0

Все это звучит правильно. В основном вы говорите, что вы будете откалибрировать камеру и проверить, является ли новая калибровка более или менее такой же, как и старая. Тем не менее, я единственная система камер, «единственная вещь», которая изменила бы калибровку, будет либо а) изменением фокуса камеры. B) измените местоположение камеры. Если камера «нетронутая», то нет необходимости в повторной калибровке. –

+0

Ну, я надеялся, что можно было бы избежать полной «повторной калибровки», и шаг проверки можно было бы сделать более легко (например, с меньшим количеством изображений). Да, причиной проверки является то, что камера может быть слегка перемещена, и я хочу знать, сохраняет ли калибровка после этого движения. – user1809923

+0

Зависит от вашей желаемой точности, но в целом вам потребуется повторная калибровка при перемещении. Хорошим способом было бы, я думаю, сначала обнаружить все уголки шахматной доски. Затем выберите 4 соседних (в углу лучше, так что ошибка распространяется больше), а затем оценивайте с остальными точками с вашими параметрами. Вы можете получить ошибку между видимым и оцененным. –

ответ

1

Если у вас есть одна камера вы можете легко следовать инструкциям из этой статьи: Evaluating the Accuracy of Single Camera Calibration

Для достижения шага 2, вы можете легко использовать detectCheckerboardPoints функцию из MATLAB.

[imagePoints, boardSize, imagesUsed] = detectCheckerboardPoints(imageFileNames); 

Предполагая, что вы говорите о стерео-камерах, для стереопары, imagePoints(:,:,:,1) являются точками из первого набора изображений, и imagePoints(:,:,:,2) являются точками из второго набора изображений. Выход содержит M номер [x y] координаты. Каждая координата представляет собой точку, где на шахматной доске обнаружены квадратные углы. Количество точек, возвращаемых функцией, зависит от значения boardSize, что указывает количество обнаруженных квадратов. Функция определяет точки с субпиксельной точностью.

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

enter image description here

[Изображение из this page в MathWorks.]

можно считать точку 1 в качестве координат вашей системы координат (0,0). На оси показаны направления осей, и вы знаете расстояние между каждой точкой (в мировой координате), поэтому это просто вопрос оценки глубины.

Чтобы найти матрицу преобразования между точками в мире CS и точками в CS камеры, вы должны собрать набор точек и выполнить оценку SVD для оценки матрицы преобразования.

Но

Я бы оценить параметры камеры и сравнить их с исходными параметрами во время X. Это проще, если вы сохранили изображения, которые использовались при калибровке камеры в момент времени X. Повторяя процесс калибровки с использованием этих изображений, вы должны получить очень похожие результаты, если калибровка камеры по-прежнему действительна.

Редактировать: Зачем вам нужен набор изображений, используемых в процессе калибровки в момент времени X?

У вас есть набор изображений для калибровки в первый раз, верно? Чтобы перекалибровать камеру, вам необходимо использовать новый набор изображений. Но для проверки предыдущей калибровки вы можете использовать предыдущие изображения. Если параметры камеры изменяются, будет происходить ошибка между повторной оценкой и первой оценкой. Это можно использовать для оценки достоверности калибровки, а не для повторной калибровки камеры.

+0

Эй! Да, я знаю об этой функции, поэтому также опускается шаг 2). Я не уверен, однако, как это также охватывает мой третий шаг, если бы вы подробно остановились на этом, это было бы здорово! Я думаю, что третий шаг - это скорее вопрос функции «generateCheckerboardPoints». – user1809923

+0

После вашего первого редактирования: Итак, вы говорите, чтобы связать мир CS с камерой CS. Мне нужно выполнить SVD, что означало бы, что мне понадобится набор точек для этого, верно? Не знаю, понимаю ли я разработку альтернативного решения. Если я получу вас правильно, вы просто перекалибрите в момент времени Y и сравните рассчитанные параметры с теми, которые были получены во время X. Для чего мне нужны изображения из X? – user1809923

+0

Чтобы было проще. Проверьте правильность редактирования. – NKN