Калибровка камеры - результаты достаточны?
Я выполняю калибровку камеры с помощью Caltech Toolbox http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html и я не совсем уверен в качестве своих результатов. В начале у меня было около 40 изображений, а во время калибровки - около 10, из-за больших ошибок репроекции. Я установил камеру на штатив и поместил шахматную доску куда-нибудь, чтобы избежать размытости при движении. Я установил фокусное расстояние на макс.
Ошибка репроекции выглядит хорошо, я думаю, но неопределенность в фокусном расстоянии, основной точке и искажении вызывает у меня головную боль. Хотя указанные неопределенности должны относиться к 3-кратному стандартному отклонению и, следовательно, охватывать возможные отклонения на 99% (при условии нормального распределения), мои результаты могут отличаться от этого. Вот что я получаю от калибровки:
1-я попытка:
Фокусное расстояние: fc = [ 952,67300 952,58901] ± [3,18678 3,24121]
Основная точка: cc = [ 641.33128 339.39042] ± [ 2.07428 2.53779]
kc = [0,16627 -0,28830 -0,00118 -0,00074 0,00000 ] ± [ 0,00554 0,00979 0,00093 0,00076 0,00000]
2-я попытка:
Фокусное расстояние: fc_left = [ 949,92127 946,43747] ± [4,75903 4,44547]
Основная точка: cc_left = [ 642.39817 345.69787] ± [ 2.95598 4.19728]
kc = [0,13925 -0,23895 0,00141 -0,00062 0,00000 ] ± [ 0,00319 0,00490 0,00054 0,00041 0,00000]
3-я попытка:
Фокусное расстояние: fc = [ 949,55376 948,31960] ± [1,87647 1,73045]
Основная точка: CC = [ 644,32264 342,15631 ± [1,19304 1,89943]
Искажение
kc = [0,15587 -0,26060 -0,00010 0,00018 0,00000 ] ± [ 0,00350 0,00612 0,00061 0,00044 0,00000]
Ошибка пикселя для всех трех попыток была примерно одинаковой:
err = [0.24621 0.18013] (к сожалению, я не сохранил результаты)
Мои вопросы:
Что я могу сделать, чтобы улучшить свои результаты?
Что вообще лучше всего ожидать от калибровки (какой должна быть максимальная погрешность / ошибка перепроецирования для хорошей калибровки)?
Спасибо!
2 ответа
Я думаю, что ваша калибровка выглядит хорошо. Это нормально, что фокусное расстояние меняется.
Вы можете попытаться установить тангенциальное искажение на ноль. Это обычный случай в современных камерах. Для этого случая есть даже флаг калибровки CV_CALIB_ZERO_TANGENT_DIST.
Если у вас есть высококачественная камера и оптика, вы можете разместить принципиальную точку в самом центре. Для этого вы можете использовать флаг CV_CALIB_FIX_PRINCIPAL_POINT. Если я правильно помню, это значения взяты из переданной матрицы внутренних параметров.
В целом, вы получаете более точные результаты при использовании трехмерного калибровочного объекта вместо плоской шахматной доски.
Я использовал набор инструментов Caltech во время моей магистерской диссертации, и у меня были лучшие результаты, используя хорошую плоскую калибровочную сетку.
Вы уверены, что шаблон, который вы используете, действительно плоский?
Это печатная бумага?
Я предлагаю вам сначала прикрепить калибровочную сетку к плоской поверхности (лучше всего подойдет металлическая, но достаточно и деревянной пластины), а затем снова откалибровать свою систему.
Чтобы измерить точность калибровки, вы можете измерить размер (то есть длину) известного объекта (например, длину ящика, для которого вы знаете реальное измерение в метрах) и сравнить измеренное значение с реальным.
Помните также, что вам необходимо откалибровать все пространство, созданное вашей камерой, и что целевой объект для измерения должен быть расположен в том же объеме пространства, который вы только что откалибровали.
Конечно, трехмерный калибровочный объект был бы лучшим решением, но, насколько я знаю, не существует готового бесплатного кода для управления им.