Использование алгоритма оптимизации Левенберга-Марквардта через opencv projectPoints() для оценки ошибок калибровки
В калибровке камеры я использовал calibrateCamera(), чтобы найти параметры камеры из нескольких видов калибровочного шаблона. Это точно делает две вещи:
1) Оцените исходные параметры камеры в закрытом виде, предполагая, что искажение объектива равно нулю.
2) Запустите глобальный алгоритм оптимизации Левенберга-Марквардта, чтобы минимизировать ошибку перепроецирования, что делается с помощью projectPoints()
Теперь я хочу не просто вычислить Minimized Reprojection Error, но и параметры соответствия, которые его вызвали. В настоящее время нет функции, которая бы возвращала безошибочные параметры. Итак, я подумал, что я буду использовать projectPoints(), чтобы получить точки репроецированного изображения, а затем использовать точки репроецированного изображения и точки мира, чтобы снова выполнить калибровку и получить безошибочные параметры. Проблема в том, что это не то, что я уверен, даст мне вывод. Кто-нибудь может мне сказать, так ли это? Любая помощь будет оценена.
0 ответов
Levenberg-Marquardt даст вам наилучшую оценку того, на что способны ваша модель и данные. Вы не можете получить безошибочные параметры, если ваши входные данные не содержат шума, а сложность вашей модели не соответствует сложности вашей реальной модели.
Например, ваша модель: x * 2 + y = z, где x > 0, а x - целое число.
Входные данные z = { 3 }
В зависимости от вашего начального значения Levenberg-Marquardt выдаст вам: (x = 1, y = 1) или (x=2,y=-1) или... которые не содержат ошибок
Однако с тем же входом z, если ваша модель: x * 2 = z, где x > 0 и x - целое число
Невозможно получить безошибочные параметры