Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Usar 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, utilizando , y, a continuación, se pasa el resultado de ese registro como la condición inicial de un registro basado en optimización, mediante .imregcorrimregister La correlación de fases y el registro basado en la optimización son algoritmos complementarios. La correlación de fases es buena para encontrar una alineación bruta, incluso para imágenes severamente desalineadas. El registro basado en optimización es bueno 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, escala isotrópica y cizallamiento 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.5; shear = [1 sh 0; 0 1 0; 0 0 1];   tform = affine2d(shear*scale*rot); moving = imwarp(fixed,tform); 

Agregue ruido a la imagen y muestre el resultado.

moving = moving + uint8(10*rand(size(moving))); imshow(moving)

Calcule el registro necesario para alinear estas dos imágenes. devuelve un objeto que define la transformación.imregcorraffine2d

tformEstimate = imregcorr(moving,fixed);

Aplique la transformación geométrica estimada a la imagen desalineada. Especifique para asegurarse de que la imagen registrada tiene el mismo tamaño que la imagen de referencia.'OutputView' Muestre la imagen original y la imagen registrada en paralelo. Puede ver que ha hecho un buen trabajo manejando las diferencias de rotación y escala entre las imágenes.imregcorr La imagen registrada, , está muy cerca de estar alineada con la imagen original, .movingRegfixed Pero queda algo dedesalineación. puede manejar bien las distorsiones de rotación y escala, pero no la distorsión cortante.imregcorr

Rfixed = imref2d(size(fixed)); movingReg = imwarp(moving,tformEstimate,'OutputView',Rfixed); imshowpair(fixed,movingReg,'montage');

Vea la imagen alineada superpuesta en la imagen original, utilizando .imshowpair En esta vista, se utiliza el color para resaltar áreas de desalineación.imshowpair

imshowpair(fixed,movingReg,'falsecolor');

Para finalizar el registro, utilice , pasando la transformación estimada devuelta como condición inicial. es más eficaz si las dos imágenes están aproximadamente alineadas al inicio de la operación.imregisterimregcorrimregister La transformación estimada por proporciona esta información para .imregcorrimregister El ejemplo utiliza el optimizador predeterminado y los valores de métrica para un registro de dos imágenes tomadas con el mismo sensor ( ).'monomodal'

[optimizer, metric] = imregconfig('monomodal'); movingRegistered = imregister(moving, fixed,...     'affine', optimizer, metric,'InitialTransformation',tformEstimate);

Muestre el resultado de este registro. Tenga en cuenta que ha logrado un registro muy preciso, dada la buena condición inicial proporcionada por .imregisterimregcorr

imshowpair(fixed, movingRegistered,'Scaling','joint');

Consulte también

| | |