Использование алгоритма оптимизации Левенберга-Марквардта через opencv projectPoints () для оценки ошибок калибровки

При калибровке камеры я использовал calibrateCamera (), чтобы найти параметры камеры из нескольких представлений калибровочного шаблона. Он делает две вещи:

1) Оцените исходные параметры камеры в замкнутой форме, приняв искажение объектива равным нулю.

2) Запустите глобальный алгоритм оптимизации Левенберга-Марквардта, чтобы минимизировать ошибку перепроецирования, что выполняется с помощью projectPoints ()

Теперь я хочу вычислить не просто минимальную ошибку репроецирования, а параметры подгонки, которые ее вызвали. В настоящее время нет функции, которая возвращала бы безошибочные параметры. Итак, я подумал, что буду использовать projectPoints () для получения точек перепроецированного изображения, а затем использовать точки репроецированного изображения и точки мира для повторной калибровки и получения безошибочных параметров. Проблема в том, что я не уверен, что это даст мне результат. Кто-нибудь может сказать мне, так ли это? Любая помощь будет оценена.


person alchemist95    schedule 21.06.2016    source источник


Ответы (1)


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 - целое число

Невозможно получить безошибочные параметры

person Derza Arsad    schedule 30.05.2020