Contenido principal

imregdemons

Estimar un campo de desplazamiento para alinear dos imágenes 2D o 3D

Descripción

[D,moving_reg] = imregdemons(moving,fixed) estima el campo de desplazamiento D para alinear la imagen que desea registrar, moving, con la imagen de referencia, fixed. Los vectores de desplazamiento de cada ubicación de los píxeles asignan ubicaciones de la cuadrícula de la imagen fixed a la ubicación correspondiente de la imagen moving. moving_reg es una versión deformada de la imagen moving que está deformada según el campo de desplazamiento D y remuestreada utilizando interpolación lineal.

ejemplo

[D,moving_reg] = imregdemons(moving,fixed,N) especifica el número de iteraciones que se desean calcular. Esta función no utiliza un criterio de convergencia y, por lo tanto, siempre se garantiza que se ejecuta el número de iteraciones especificadas o predeterminadas.

[D,moving_reg] = imregdemons(___,Name,Value) registra la imagen variable utilizando pares nombre-valor para controlar aspectos del cálculo de la ponderación.

ejemplo

Ejemplos

contraer todo

En este ejemplo se muestra cómo resolver un problema de registro en el que la misma mano se ha fotografiado en dos poses diferentes. La desalineación de las imágenes varía localmente en cada imagen. Por lo tanto, es un problema de registro no rígido.

Lea las dos imágenes en el área de trabajo.

fixed  = imread('hands1.jpg');
moving = imread('hands2.jpg');

Convierta las imágenes a escala de grises para el procesamiento.

fixed  = im2gray(fixed);
moving = im2gray(moving);

Observe la desalineación inicial. Los dedos están en poses diferentes.

imshowpair(fixed,moving,'montage')

Figure contains an axes object. The hidden axes object contains an object of type image.

Superponga las dos imágenes para que sea más fácil ver dónde difieren las imágenes. Las diferencias están resaltadas en verde y magenta.

imshowpair(fixed,moving)

Figure contains an axes object. The hidden axes object contains an object of type image.

Corrija las diferencias de iluminación entre las imágenes moving y fixed utilizando la correspondencia de histogramas. Se trata de un paso de preprocesamiento habitual.

moving = imhistmatch(moving,fixed);

Estime la transformación necesaria para alinear las dos imágenes.

[~,movingReg] = imregdemons(moving,fixed,[500 400 200],...
    'AccumulatedFieldSmoothing',1.3);

Muestre los resultados del registro. En la primera figura, las imágenes están superpuestas para mostrar la alineación.

imshowpair(fixed,movingReg)

Figure contains an axes object. The hidden axes object contains an object of type image.

imshowpair(fixed,movingReg,'montage')

Figure contains an axes object. The hidden axes object contains an object of type image.

Argumentos de entrada

contraer todo

Imagen que se desea registrar, especificada como imagen 2D o 3D en escala de grises.

Tipos de datos: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

Imagen de referencia en la orientación objetivo, especificada como imagen 2D o 3D en escala de grises.

Tipos de datos: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

Número de iteraciones, especificado como vector o escalar entero positivo.

Cuando especifica un vector, N es el número de iteraciones por nivel de pirámide (nivel de resolución). Por ejemplo, si hay 3 niveles de pirámide, puede especificar el vector [100,50,25], donde imregdemons realiza 100 iteraciones en el nivel de resolución inferior, 50 iteraciones en el siguiente nivel de pirámide y 25 iteraciones en el último nivel de iteración (el nivel con resolución completa). Dado que lleva menos tiempo procesar los niveles de resolución inferiores, ejecutar más iteraciones a una resolución baja y menos iteraciones a las resoluciones más altas de la pirámide puede mejorar el rendimiento.

Tipos de datos: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Argumentos de par nombre-valor

contraer todo

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.

En las versiones anteriores a la R2021a, use comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: 'AccumulatedFieldSmoothing',1.5 aplica suavizado gaussiano con una desviación estándar de 1,5 en cada iteración

Suavizado aplicado en cada iteración, especificado como el par separado por comas que consta de 'AccumulatedFieldSmoothing' y un valor numérico. Este parámetro controla la cantidad de regularización similar a la difusión. imregdemons aplica la desviación estándar del suavizado gaussiano para regularizar el campo acumulado en cada iteración. Los valores más grandes tienen como resultado campos de desplazamiento de salida más suaves. Los valores más pequeños tienen como resultado una deformación más localizada en el campo de desplazamiento de salida. Los valores suelen estar en el intervalo [0.5, 3.0]. Cuando especifica varios PyramidLevels, la desviación estándar utilizada en el suavizado gaussiano se mantiene sin cambios en cada nivel de pirámide.

Tipos de datos: double

Número de niveles de pirámide de una imagen multirresolución que se desea usar, especificado como el par separado por comas que consta de 'PyramidLevels' y un entero positivo.

Tipos de datos: double

Mostrar una barra de espera para indicar el progreso, especificado como el par separado por comas que consta de 'DisplayWaitbar' y el valor true o false. Cuando el valor se establece en true, imregdemons muestra una barra de espera para indicar el progreso de las operaciones de larga ejecución. Para evitar que imregdemons muestre una barra de espera, establezca DisplayWaitbar en false.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Argumentos de salida

contraer todo

Campo de desplazamiento, especificado como arreglo numérico. Los valores de desplazamiento están en unidades de píxeles.

  • Si fixed es una imagen 2D en escala de grises de tamaño m por n, el arreglo del campo de desplazamiento es de m por n por 2. D(:,:,1) contiene los desplazamientos a lo largo del eje x y D(:,:,2) contiene los desplazamientos a lo largo del eje y.

  • Si fixed es una imagen 3D en escala de grises de tamaño m por n por p, el arreglo del campo de desplazamiento es de m por n por p por 3. D(:,:,:,1) contiene los desplazamientos a lo largo del eje x, D(:,:,:,2) contiene los desplazamientos a lo largo del eje y y D(:,:,:,3) contiene los desplazamientos a lo largo del eje z.

Tipos de datos: double

Imagen alineada, devuelta como imagen 2D o 3D en escala de grises. La imagen está deformada según el campo de desplazamiento D y remuestreada utilizando interpolación lineal.

Sugerencias

  • Para transformar una imagen utilizando el campo de desplazamiento D, utilice imwarp.

Referencias

[1] Thirion, J.-P. "Image matching as a diffusion process: an analogy with Maxwell’s demons". Medical Image Analysis. Vol. 2, Number 3, 1998, pp. 243–260.

[2] Vercauteren, T., X. Pennec, A. Perchant, N. Ayache, "Diffeomorphic Demons: Efficient Non-parametric Image Registration", NeuroImage. Vol. 45, Number 1, Supplement 1, March 2009, pp. 61–72.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2014b

expandir todo

Consulte también

Apps

Funciones