Había mencionado anteriormente que agregaría este algoritmo iterativo a uno de los mas importantes del siglo pasado, lamentablemente no se ha usado mucho, pero para mi al menos los resultados han sido sorprendentes.

Básicamente, lo que logra es refinar parámetros usando el hessiano, aproximado por un jacobiano de las variables involucradas. Es una variante de la optimización iterativa Gauss-Newton. No explicaré por ahora como funciona el algoritmo porque no tengo tiempo (tengo clases en unos minutos mas), pero mostraré en qué me ha servido.

Como algunos saben, mi principal trabajo está relacionado con visión computacional y estimación geométrica para aplicaciones con realidad aumentada. El siguiente ejemplo es una estimación directa (usando un truco con la homografía) pero con exceso de ruido y algunos parametros mal estimados a propósito:

Como ven el resultado no es preciso, los cubos deberían posicionarse exactamente sobre los 4 puntos negros (la linea roja indica el lado “base” del cubo, es el lado inferior de la imagen reconocida). Ahora con esa estimación inicial, tratamos de refinar los parámetros de pose (posición y rotación) con Levenberg-Marquardt. Con sólo 2 iteraciones llegamos al siguiente resultado:

La primera vez quedé impresionado, no tiene un costo computacional muy alto, y el resultado fue muy preciso (en todas las pruebas que realicé se llegó a una convergencia). Su dificultad de implementación es lo que probablemente lo hace ser poco usado, pero últimamente he pensado en muchos problemas que se podrían llegar a resolver con un refinamiento de parámetros tan óptimo, quizás intente algo para problemas de clasificación en Support Vector Machines, ya que en mi clase de ayer de Machine Learning vimos un problema que se resuelve con el lagrangiano, y quizás pueda llegar a ser mas útil mi amigo iterativo Levenberg-Marquardt si logro hacer un buen diseño del problema.