Saltar al contenido

Unir múltiples imágenes usando OpenCV (Python)

Ya no necesitas investigar más por internet ya que has llegado al sitio indicado, tenemos la respuesta que buscas sin complicaciones.

Solución:

Paso a paso, asumiendo que quieres unir cuatro imágenes I0, I1, I2, I3su objetivo es calcular homografías H_0, H_1, H_2, H_3;

  1. Calcular todas las homografías por pares H_01, H_02, H_03, H_12, H_13, H_23 donde homografía H_01 deforma la imagen I0 dentro I1etc…
  2. Seleccione una imagen de anclaje, por ejemplo I1 qué posición permanecerá fija, es decir H_1 = Identidad
  3. Encuentre la imagen que mejor se alinee con I1 basado en el número máximo de coincidencias consistentes, por ejemplo I3
  4. Actualizar H_3 = H_1 * inv(H_13) = inv(H_13) = H_31
  5. Encuentra la imagen que mejor coincida I1 o I3 p.ej I2 pareo I3
  6. Actualizar H_2 = H_3 * H_23
  7. Igual que arriba para la imagen I0
  8. Realice ajustes de paquete para optimizar globalmente la alineación

Consulte la sección 4 de este artículo fundamental Unión automática de imágenes panorámicas mediante funciones invariantes para obtener una explicación detallada.

enfoque hacky

La forma más fácil (aunque no súper eficiente) dadas las funciones que ha escrito, es simplemente hacer crecer la imagen panorámica uniéndola con cada imagen sucesiva. Algo como este pseudocódigo:

panorama = images[0]
for i in 1:len(images)-1
    panorama = stitch(panorama,images[i])

Este método básicamente intenta hacer coincidir la siguiente imagen con cualquier parte del panorama actual. Debería funcionar decentemente bien, suponiendo que cada nueva imagen esté en algún lugar del borde del panorama actual, y que no haya demasiada distorsión de perspectiva.

Enfoque matemático

La otra opción, si sabe el orden en que desea coser, es encontrar la Homografía de una imagen a la siguiente y luego multiplicarlas. El resultado es la Homografía de esa imagen a la imagen 0.

Por ejemplo: la H que transforma la imagen 3 para alinearla con la imagen 0 es H_03 = H_01 * H_12 * H_23. Donde H_01 es la H que transforma la imagen 1 para alinearla con la imagen 0. (Dependiendo de la forma en que su código defina H, es posible que deba invertir el orden de multiplicación anterior). Entonces, multiplicaría para obtener H_0i y luego lo usaría para transformar imagen i para alinearse con la imagen 0.

Para obtener información sobre por qué multiplica las transformaciones, consulte: Transformaciones y multiplicación de matrices, específicamente la parte “Composición de transformaciones”.

Si piensas que te ha resultado útil nuestro artículo, agradeceríamos que lo compartas con el resto juniors así nos ayudas a extender esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *