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.

imregdemons

Campo de desplazamiento estimado que alinea dos imágenes 2-D o 3-D

Descripción

ejemplo

[D,moving_reg] = imregdemons(moving,fixed) estima el campo de desplazamiento que alinea la imagen que se registrará, con la imagen de referencia,.Dmovingfixed Los vectores de desplazamiento en cada ubicación de píxel asignan ubicaciones desde la cuadrícula de la imagen a la ubicación correspondiente de la imagen. es una versión deformado de la imagen que se deforma según el campo de desplazamiento y remuestreada mediante la interpolación lineal.fixedmovingmoving_regmovingD

Opcionalmente, puede estimar el campo de desplazamiento usando una GPU (requiere).Parallel Computing Toolbox™ Para obtener más información, consulte.Procesamiento de imágenes en una GPU

[D,moving_reg] = imregdemons(moving,fixed,N) especifica el número de iteraciones que se deben calcular. Esta función no utiliza un criterio de convergencia y, por lo tanto, siempre se garantiza que se ejecutará para el número de iteraciones especificado o predeterminado.

ejemplo

[D,moving_reg] = imregdemons(___,Name,Value) registra la imagen en movimiento utilizando pares nombre-valor para controlar los aspectos del cálculo del peso.

Ejemplos

contraer todo

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

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

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

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

fixed  = rgb2gray(fixed); moving = rgb2gray(moving);

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

imshowpair(fixed,moving,'montage')

Superponga las dos imágenes para que sea más fácil ver dónde se diferencian las imágenes. Las diferencias se resaltan en verde y magenta.

imshowpair(fixed,moving)

Corrija las diferencias de iluminación entre las imágenes y la coincidencia de histograma.movingfixed Este es un paso de procesamiento previo común.

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);

Visualice los resultados del registro. En la primera figura, las imágenes se superpusieron para mostrar la alineación.

imshowpair(fixed,movingReg)

imshowpair(fixed,movingReg,'montage')

Realice un registro no rígido en una GPU.

Lea las imágenes en el espacio de trabajo.

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

Observe la desalineación inicial. (Los dedos están en diferentes posiciones.)

figure imshowpair(fixed,moving,'montage') figure imshowpair(fixed,moving) 

Cree s y convierta las imágenes a escala de grises.gpuArray

fixedGPU  = gpuArray(fixed); movingGPU = gpuArray(moving);   fixedGPU  = rgb2gray(fixedGPU); movingGPU = rgb2gray(movingGPU);

Utilice la coincidencia de histograma para corregir las diferencias de iluminación entre las imágenes en movimiento y fijas. Este es un paso de preprocesamiento común.

fixedHist = imhist(fixedGPU); movingGPU = histeq(movingGPU,fixedHist); 

Realice el registro.

[~,movingReg] = imregdemons(movingGPU,fixedGPU,[500 400 200],'AccumulatedFieldSmoothing',1.3); 

Vuelva a traer la imagen registrada a la CPU.

 movingReg = gather(movingReg);

Ver los resultados.

figure imshowpair(fixed,movingReg) figure imshowpair(fixed,movingReg,'montage')

Argumentos de entrada

contraer todo

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

Para realizar el cálculo mediante una GPU, especifíquese como un que contenga una imagen en escala de grises en 2-D o 3-D.movinggpuArray

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

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

Para realizar el cálculo mediante una GPU, especifíquese como un que contenga una imagen en escala de grises en 2-D o 3-D.fixedgpuArray

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

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

Cuando se especifica un vector, es el número de iteraciones por nivel de pirámide (nivel de resolución).N Por ejemplo, si hay 3 niveles de pirámide, puede especificar el vector, donde realiza 100 iteraciones en el nivel de resolución más bajo, 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.[100,50,25]imregdemons Debido a que se necesita menos tiempo para procesar los niveles de resolución más bajos, ejecutar más iteraciones a baja resolución y menos iteraciones en las resoluciones más altas de la pirámide puede ayudar al rendimiento.

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

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: [D,movingReg] = imregdemons(moving,fixed,[500 400 200],'AccumulatedFieldSmoothing',1.5);

Suavizado aplicado en cada iteración, especificado como el par separado por comas que consta de y un valor numérico.'AccumulatedFieldSmoothing' Este parámetro controla la cantidad de regularización como la difusión. aplica la desviación estándar del suavizado gaussiano para regularizar el campo acumulado en cada iteración.imregdemons Los valores más grandes resultan en campos de desplazamiento de salida más suaves. Los valores más pequeños resultan en una deformación más localizada en el campo de desplazamiento de salida. Los valores suelen estar en el intervalo [0,5, 3,0]. Al especificar varios, la desviación estándar utilizada en el suavizado gaussiano sigue siendo la misma en cada nivel de pirámide.PyramidLevels

Tipos de datos: double

Número de niveles de pirámide de imagen de resolución múltiple que se utilizarán, especificados como el par separado por comas que consta de un escalar entero positivo.'PyramidLevels'

Tipos de datos: double

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

Nota

El parámetro no se admite en una GPU.'DisplayWaitbar'

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

Argumentos de salida

contraer todo

Campo de desplazamiento, especificado como una matriz numérica. Los valores de desplazamiento se encuentran en unidades de píxeles.

  • Si es una imagen en escala de grises en 2-D de size-by-, entonces la matriz del campo de desplazamiento es-por--por-2. contiene desplazamientos a lo largo del eje y contiene desplazamientos a lo largo del eje.fixedmnmnD(:,:,1)xD(:,:,2)y

  • Si es una imagen en escala de grises de 3-D de tamaño por--por-, entonces la matriz de campo de desplazamiento es-por--por-3. contiene desplazamientos a lo largo del eje, contiene desplazamientos a lo largo del eje. y contiene desplazamientos a lo largo del eje.fixedmnpmnpD(:,:,:,1)xD(:,:,:,2)yD(:,:,:,3)z

Si el campo de desplazamiento se calcula mediante una GPU, se devuelve como una matriz numérica que contiene.DgpuArray

Tipos de datos: double

Imagen registrada, devuelta como imagen en escala de grises en 2-D o 3-D, deformado según el campo de desplazamiento y remuestreado mediante interpolación lineal.D

Si el campo de desplazamiento se calcula mediante una GPU, se devuelve como una imagen en escala de grises 2-D o 3-D.moving_reggpuArray

Sugerencias

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

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

Consulte también

Aplicaciones

Funciones

Introducido en R2014b