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
, I3
su objetivo es calcular homografías H_0
, H_1
, H_2
, H_3
;
- Calcular todas las homografías por pares
H_01
,H_02
,H_03
,H_12
,H_13
,H_23
donde homografíaH_01
deforma la imagenI0
dentroI1
etc… - Seleccione una imagen de anclaje, por ejemplo
I1
qué posición permanecerá fija, es decirH_1
= Identidad - Encuentre la imagen que mejor se alinee con
I1
basado en el número máximo de coincidencias consistentes, por ejemploI3
- Actualizar
H_3
=H_1 * inv(H_13)
=inv(H_13)
=H_31
- Encuentra la imagen que mejor coincida
I1
oI3
p.ejI2
pareoI3
- Actualizar
H_2
=H_3
*H_23
- Igual que arriba para la imagen
I0
- 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.