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.

Exploración de sectores de un conjunto de datos de RM de 3 dimensiones

En este ejemplo se muestra cómo explorar un volumen de datos mediante la extracción de sectores mediante un conjunto de datos de MRI tridimensional mediante funciones.imtransformtformarray

Paso 1: cargue y visualice la resonancia magnética horizontal

Este ejemplo utiliza el conjunto de datos de RMN que viene con MATLAB® y que se utiliza en los ejemplos de ayuda para ambos y.montageimmovie La carga agrega dos variables al espacio de trabajo:mri.mat (128-by-128-by-1-by-27, clase Uint8) y un mapa de colores en escala de grises (89-by-3, clase Double).Dmap

comprende rodajas horizontales 27 128-by-128 de un escaneo de datos de resonancia magnética de un cráneo humano.D Valores en el rango de 0 a 88, por lo que el colores es necesario para generar una figura con un rango visual útil.D La dimensionalidad de que sea compatible con.Dmontage Las dos primeras dimensiones son espaciales. La tercera dimensión es la cota de color, con el tamaño 1 porque se indexa en el mapa de color. (sería 3 para una secuencia de imágenes RGB.)size(D,3) La cuarta dimensión es temporal (como con cualquier secuencia de imágenes), pero en este caso particular también es espacial. Así que hay tres dimensiones espaciales en y podemos utilizar o para convertir los cortes horizontales a rodajas sagital (mostrando la vista desde el lado de la cabeza) o rebanadas coronales (frontales) (mostrando la vista desde la parte delantera o trasera de la cabeza).Dimtransformtformarray

Las dimensiones espaciales de se ordenan de la siguiente manera:D

  • Dimensión 1: Frontal a la parte posterior de la cabeza (rostral/anterior a caudal/posterior)

  • Dimensión 2: De izquierda a derecha de la cabeza

  • Dimensión 4: Inferior a la parte superior de la cabeza (inferior a superior).

Un factor importante es que los intervalos de muestreo no son los mismos a lo largo de las tres dimensiones: las muestras a lo largo de la cota vertical (4) se espacian 2,5 veces más ampliamente que a lo largo de las dimensiones horizontales.

Cargue el conjunto de datos de RMN y visualice los 27 sectores horizontales como un montaje.

load mri; montage(D,map) title('Horizontal Slices');

Paso 2: extrae la rebanada sagital de rebanadas horizontales usando IMTRANSFORM

Podemos construir una rebanada sagital media a partir de los datos de RMN tomando un subconjunto de él y transformándolo para tener en cuenta los diferentes intervalos de muestreo y la orientación espacial de las dimensiones de.DD

La siguiente instrucción extrae todos los datos necesarios para un sector sagital medio.

M1 = D(:,64,:,:); size(M1)
ans = 1×4

   128     1     1    27

Sin embargo, no podemos ver como una imagen porque es 128-por-1-por-1-por-27. (o) puede convertir en una imagen de 128-by-27 que es visible con.M1reshapesqueezeM1imshow

M2 = reshape(M1,[128 27]); size(M2)
ans = 1×2

   128    27

figure, imshow(M2,map); title('Sagittal - Raw Data');

Las dimensiones en se ordenan de la siguiente manera:M2

  • Dimensión 1: Frontal a la parte posterior de la cabeza (rostral a caudal)

  • Dimensión 2: Inferior a la parte superior de la cabeza (inferior a superior).

Podemos obtener una visión mucho más satisfactoria transformando para cambiar su orientación y aumentar el muestreo a lo largo de la dimensión vertical (inferior-superior) por un factor de 2,5--haciendo que el intervalo de muestreo sea igual en las tres dimensiones espaciales.M2 Podríamos hacer esto en pasos comenzando con una transposición, pero la siguiente transformación afín permite una transformación de un solo paso y un uso más económico de la memoria.

T0 = maketform('affine',[0 -2.5; 1 0; 0 0]);

El bloque superior 2 por 2 de la matriz pasada a maketform, combina la rotación y el escalado.[0 -2.5;1 0] Después de la transformación tenemos:

  • Dimensión 1: De arriba a abajo de la cabeza (superior a inferior).

  • Dimensión 2: Frontal a la parte posterior de la cabeza (rostral a caudal)

La llamada

intransform (m2, T0, ' cúbico ')

bastaría para aplicar y proporcionar una buena resolución al interpolar a lo largo de la dirección superior a la inferior.TM2 Sin embargo, no hay necesidad de interpolación cúbica en la dirección frontal a posterior, ya que no se producirá ningún remuestreo a lo largo de la cota (salida) 2. Por lo tanto, especificamos el remuestreo de vecino más cercano en esta dimensión, con mayor eficiencia y resultados idénticos.

R2 = makeresampler({'cubic','nearest'},'fill'); M3 = imtransform(M2,T0,R2);   figure, imshow(M3,map); title('Sagittal - IMTRANSFORM')

Paso 3: Extraiga el trozo sagital de los sectores horizontales utilizando TFORMARRAY

En este paso obtenemos el mismo resultado que el paso 2, pero usamos para pasar de tres dimensiones espaciales a dos en una sola operación.tformarray El paso 2 comienza con una matriz que tiene tres dimensiones espaciales y termina con una matriz que tiene dos dimensiones espaciales, pero las imágenes bidimensionales intermedias (y) allanan el camino para la llamada a eso crea.M1M2imtransformM3 Estas imágenes intermedias no son necesarias si usamos en lugar de. es muy conveniente para las transformaciones de 2-D a 2-D, pero es compatible con las transformaciones de N-D a M-D, donde M no necesita igual N.tformarrayimtransformimtransformtformarray

A través de su argumento, nos permite definir una permutación para la matriz de entrada.TDIMS_Atformarray Ya que queremos crear una imagen con:

  • Dimensión 1: Superior a inferior (cota original 4, invertida)

  • Dimensión 2: Caudal a rostral (dimensión original 1)

y extraer un solo plano sagital a través de la cota original 2, especificamos = [4 1 2].tdims_a Creamos una vía de composición comenzando con una transformación afín 2-D que escala la (nueva) dimensión 1 por un factor de-2,5 y añade un desplazamiento de 68,5 para mantener las coordenadas de la matriz positivas.tformT1 La segunda parte de la composición es una transformación personalizada que extrae el 64TH plano sagital utilizando un muy simple.T2INVERSE_FCN

T1 = maketform('affine',[-2.5 0; 0 1; 68.5 0]);   inverseFcn = @(X,t) [X repmat(t.tdata,[size(X,1) 1])]; T2 = maketform('custom',3,2,[],inverseFcn,64); Tc = maketform('composite',T1,T2);

Tenga en cuenta que y tome una entrada 3-D a una entrada 2-D.T2Tc

Usamos el mismo enfoque para remuestrear como antes, pero incluimos una tercera dimensión.

R3 = makeresampler({'cubic','nearest','nearest'},'fill');

transforma las tres dimensiones espaciales de una salida 2-D en un solo paso.tformarrayD Nuestra imagen de salida es 66-by-128, con los 27 planos originales expandiéndose a 66 en la dirección vertical (inferior-superior).

M4 = tformarray(D,Tc,R3,[4 1 2],[1 2],[66 128],[],0);

El resultado es idéntico a la salida anterior de.imtransform

figure, imshow(M4,map); title('Sagittal - TFORMARRAY');

Paso 4: crear y mostrar rebanadas sagital

Creamos una matriz 4-D (la tercera dimensión es la dimensión de color) que se puede utilizar para generar una secuencia de imágenes que va de izquierda a derecha, inicia 30 planos en, omite cada otro plano y tiene 35 fotogramas en total. La matriz transformada tiene:

  • Dimensión 1: De arriba a abajo (superior a inferior)

  • Dimensión 2: Delantero a trasero (rostral a caudal)

  • Dimensión 4: De izquierda a derecha.

Como en el paso anterior, permuto la matriz de entrada usando, de nuevo volteando y reescalado/remuestreando la cota vertical.TDIMS_A = [4 1 2] Nuestra transformación afín es la misma que la T1 anterior, excepto que añadimos una tercera dimensión con un (3, 3) elemento de 0,5 y (4, 3) elemento de-14 elegido para el mapa 30, 32,... 98 a 1, 2,..., 35. Esto centra nuestros 35 marcos en la rebanada sagital media.

T3 = maketform('affine',[-2.5 0 0; 0 1 0; 0 0 0.5; 68.5 0 -14]);

En nuestra llamada a, ahora incluye los marcos 35 en el 4º, dimensión de izquierda a derecha (que es la tercera dimensión de transformación).tformarrayTSIZE_B = [66 128 35] El resampler sigue siendo el mismo.

S = tformarray(D,T3,R3,[4 1 2],[1 2 4],[66 128 35],[],0);

Ver las rebanadas sagital como un montaje (acolchado de la matriz ligeramente para separar los elementos del montaje).

S2 = padarray(S,[6 0 0 0],0,'both'); figure, montage(S2,map) title('Sagittal Slices');

Paso 5: crear y Mostrar divisiones coronales

La construcción de rodajas coronales es casi lo mismo que la construcción de rodajas sagital. Cambiamos de a.TDIMS_A[4 1 2][4 2 1] Creamos una serie de 45 Marcos, comenzando 8 planos en y moviéndose de atrás hacia adelante, saltándose cada otro marco. Las dimensiones de la matriz de salida se ordenan de la siguiente manera:

  • Dimensión 1: De arriba a abajo (superior a inferior)

  • Dimensión 2: De izquierda a derecha

  • Dimensión 4: De vuelta al frente (caudal a rostral).

T4 = maketform('affine',[-2.5 0 0; 0 1 0; 0 0 -0.5; 68.5 0 61]);

En nuestra llamada a, = [66 128 48] especifica las cotas verticales, de lado a lado y de adelante hacia atrás, respectivamente.tformarrayTSIZE_B El resampler sigue siendo el mismo.

C = tformarray(D,T4,R3,[4 2 1],[1 2 4],[66 128 45],[],0);

Tenga en cuenta que todas las permutaciones y saltos de matriz en los pasos 3, 4 y 5 se controlaban como parte de la operación.tformarray

Ver las rebanadas coronales como un montaje (acolchado de la matriz ligeramente para separar los elementos del montaje).

C2 = padarray(C,[6 0 0 0],0,'both'); figure, montage(C2,map) title('Coronal Slices');