Utilizar la correlación de fase como paso de preprocesamiento en el registro
Este ejemplo muestra cómo utilizar la correlación de fase como paso preliminar para el registro automático de imágenes. En este proceso, se realiza la correlación de fase mediante imregcorr y luego se pasa el resultado de ese registro como condición inicial de un registro basado en optimización utilizando imregister. La correlación de fase y el registro basado en optimización son algoritmos complementarios. La correlación de fase es adecuada para encontrar la alineación general, incluso para imágenes muy desalineadas. El registro basado en optimización es adecuado para encontrar una alineación precisa, dada una buena condición inicial.
Lea una imagen que será la imagen de referencia en el registro.
fixed = imread("cameraman.tif");
imshow(fixed)
Cree una imagen no registrada distorsionando deliberadamente esta imagen mediante rotación, escalado isotrópico y cizallado en la dirección y.
theta = 170;
rot = [
cosd(theta) -sind(theta) 0; ...
sind(theta) cosd(theta) 0; ...
0 0 1];
sc = 2.3;
scale = [sc 0 0; 0 sc 0; 0 0 1];
sh = 0.1;
shear = [1 sh 0; 0 1 0; 0 0 1];
tform = affinetform2d(shear*scale*rot);
moving = imwarp(fixed,tform); Añada ruido a la imagen y muestre el resultado.
moving = imnoise(moving,"gaussian");
imshow(moving)
Estime el registro necesario para alinear las dos imágenes. imregcorr devuelve un objeto simtform2d que define la transformación.
tformEstimate = imregcorr(moving,fixed)
tformEstimate =
simtform2d with properties:
Dimensionality: 2
Scale: 0.4182
RotationAngle: -167.1995
Translation: [245.7549 302.3793]
R: [2×2 double]
A: [-0.4078 0.0926 245.7549
-0.0926 -0.4078 302.3793
0 0 1.0000]
Aplique la transformación geométrica estimada a la imagen desalineada. Especifique el argumento nombre-valor OutputView para asegurarse de que la imagen registrada tenga el mismo tamaño que la imagen de referencia.
Rfixed = imref2d(size(fixed)); movingReg = imwarp(moving,tformEstimate,OutputView=Rfixed);
Muestre la imagen original y la imagen registrada en un montaje. Se puede ver que imregcorr ha gestionado correctamente las diferencias de rotación y escalado entre las imágenes. La imagen registrada, movingReg, está muy cerca de estar alineada con la imagen original, fixed. Sin embargo, aún persiste cierta desalineación. imregcorr puede gestionar bien las distorsiones de rotación y escala, pero no la distorsión de estiramiento.
imshowpair(fixed,movingReg,"montage");
Visualice la imagen alineada superpuesta sobre la imagen original utilizando imshowpair. En esta vista, imshowpair utiliza el color para resaltar las áreas de desalineación.
imshowpair(fixed,movingReg,"falsecolor");
Para finalizar el registro, utilice imregister, pasando la transformación estimada devuelta por imregcorr como condición inicial. imregister es más efectivo si las dos imágenes están aproximadamente alineadas al inicio de la operación. La transformación estimada por imregcorr proporciona esta información para imregister. El ejemplo utiliza el optimizador predeterminado y los valores métricos para un registro de dos imágenes tomadas con el mismo sensor, que es una configuración monomodal.
[optimizer,metric] = imregconfig("monomodal"); movingRegistered = imregister(moving,fixed,"affine", ... optimizer,metric,InitialTransformation=tformEstimate);
Muestre el resultado de este registro. Observe que imregister consigue un registro muy preciso, dada la buena condición inicial proporcionada por imregcorr.
imshowpair(fixed,movingRegistered,Scaling="joint");
Consulte también
imregcorr | imregister | imregconfig | imwarp