Registrar imágenes con distorsión de proyección utilizando puntos de control
Este ejemplo muestra cómo registrar dos imágenes seleccionando puntos de control comunes a ambas imágenes e infiriendo una transformación geométrica que alinee los puntos de control.
Leer imágenes
Lea la imagen westconcordorthophoto.png
en el espacio de trabajo. Esta imagen es una ortofoto que ya se ha registrado en el terreno.
ortho = imread("westconcordorthophoto.png"); imshow(ortho) text(size(ortho,2),size(ortho,1)+15, ... "Image courtesy of Massachusetts Executive Office of Environmental Affairs", ... FontSize=7,HorizontalAlignment="right");
Lea la imagen westconcordaerial.png
en el espacio de trabajo. Esta imagen se tomó desde un avión y está distorsionada con respecto a la ortofoto. Puesto que la imagen no registrada se tomó a distancia y la topografía es relativamente plana, es probable que la mayor parte de la distorsión sea proyectiva.
unregistered = imread("westconcordaerial.png"); imshow(unregistered) text(size(unregistered,2),size(unregistered,1)+15, ... "Image courtesy of mPower3/Emerge", ... FontSize=7,HorizontalAlignment="right");
Seleccionar pares de puntos de control
Para seleccionar puntos de control de forma interactiva, abra la herramienta Control Point Selection utilizando la función cpselect
. Los puntos de control son referencias geográficas que se encuentran en ambas imágenes, como una intersección de carreteras o un elemento natural del paisaje. Seleccione al menos cuatro pares de puntos de control, de forma que cpselect
pueda ajustar una transformación proyectiva a los puntos de control. Después de seleccionar puntos móviles y fijos correspondientes, cierre la herramienta para volver al espacio de trabajo.
[mp,fp] = cpselect(unregistered,ortho,Wait=true);
Inferir una transformación geométrica
Encuentre los parámetros de la transformación proyectiva que mejor alinee los puntos móviles y fijos utilizando la función fitgeotform2d
.
t = fitgeotform2d(mp,fp,"projective")
t = projtform2d with properties: Dimensionality: 2 A: [3×3 double]
Transformar una imagen no registrada
Para aplicar la transformación a la imagen aérea no registrada, utilice la función imwarp
. Especifique que el tamaño y la posición de la imagen transformada coinciden con el tamaño y la posición de la ortoimagen utilizando el argumento nombre-valor OutputView
.
Rfixed = imref2d(size(ortho)); registered = imwarp(unregistered,t,OutputView=Rfixed);
Vea el resultado del registro superponiendo la imagen transformada sobre la ortofoto original.
imshowpair(ortho,registered,"blend")
Consulte también
cpselect
| cpcorr
| cpstruct2pairs
| fitgeotrans