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.

Segmenta los pulmones de la exploración de tórax en 3-D

Este ejemplo muestra cómo realizar una segmentación 3D utilizando contornos activos (serpientes). Puede ver los resultados con la aplicación Visor de volumen.

Prepare los datos

Esta parte del ejemplo carga los datos de la tomografía computarizada del tórax humano en el espacio de trabajo de MATLAB®. Para ejecutar este ejemplo, debe descargar los datos de ejemplo de MathWorks mediante el explorador de complementos. Ver Instalar datos de ejemplo mediante el explorador de complementos.

load chestVolume whos
  Name        Size                     Bytes  Class    Attributes    V1        512x512x318            166723584  int16               

Convierta los datos de la exploración CT a normalizar los valores entre.int16single[0 1]

V = im2single(V1); whos 
  Name        Size                     Bytes  Class     Attributes    V         512x512x318            333447168  single                 V1        512x512x318            166723584  int16                

Vea los escaneos de tórax con la aplicación Volume Viewer. Abra la aplicación en la tira de herramientas de MATLAB apps. También puede abrir la aplicación mediante el comando volumeViewer especificando el volumen como argumento,.volumeViewer(V) El visor de volumen tiene alphamaps predefinidos que están diseñados para proporcionar la mejor vista de ciertos tipos de datos. Para obtener la mejor vista de los escaneos de tórax, seleccione el ajuste preestablecido.ct-bone

Segmenta los pulmones

Esta parte del ejemplo muestra cómo segmentar los pulmones en los datos de la exploración por TAC utilizando la técnica de contorno activo. Este es un algoritmo creciente región que requiere puntos semilla iniciales. El ejemplo utiliza la aplicación segmentador de imágenes para crear esta máscara de inicialización segmentando dos divisiones ortogonales 2-D, una en el plano XY y la otra en el plano XZ. A continuación, el ejemplo inserta estas dos segmentaciones en una máscara 3-D. El ejemplo pasa esta máscara a la activecontour función para crear una segmentación 3-D de los pulmones en la cavidad torácica. (En este ejemplo se utiliza el método de contorno activo, pero se pueden utilizar otras técnicas de segmentación para lograr el mismo objetivo, por ejemplo, relleno de inundación.)

Extraiga el sector central en las cotas XY y XZ.

XY = V(:,:,160); XZ = squeeze(V(256,:,:));

Visualice los sectores 2-D con la función.imshow

figure, imshow(XY, [],'Border','tight');

figure, imshow(XZ, [],'Border','tight');

Puede realizar la segmentación en la aplicación segmentador de imágenes. Abra la aplicación desde la franja de herramientas de MATLAB Apps o utilice el comando, especificando un segmento 2-D como argumento,.imageSegmenterimageSegmenter(XY)

Para iniciar el proceso de segmentación, haga clic para abrir el trozo de pulmón en la pestaña.ThresholdThreshold En la ficha umbral, seleccione la opción y mueva el control deslizante umbral para especificar un valor de umbral que logre una buena segmentación de los pulmones.Manual Threshold Haga clic para aceptar el umbral y devolver la pestaña segmentación.Create Mask

La aplicación ejecuta el siguiente código para establecer el umbral de la imagen.

BW = XY > 5.098000e-01;

Después de esta segmentación pulmonar inicial, debe limpiar la máscara utilizando las opciones del menú.Refine Mask

En la aplicación, puede hacer clic en cada opción para invertir la imagen de la máscara para que los pulmones estén en primer plano (), eliminar otros elementos segmentados además de los pulmones () y rellenar los agujeros dentro de la segmentación pulmonar ().Invert MaskClear BordersFill Holes Por último, utilice la opción para suavizar los bordes de la segmentación pulmonar.Morphology En la ficha morfología, seleccione la operación.Erode Mask Después de realizar estos pasos, seleccione y guarde la imagen de máscara en el espacio de trabajo.Show Binary

La aplicación ejecuta el siguiente código para refinar la máscara.

BW = imcomplement(BW); BW = imclearborder(BW); BW = imfill(BW, 'holes'); radius = 3; decomposition = 0; se = strel('disk',radius,decomposition); BW = imerode(BW, se); maskedImageXY = XY; maskedImageXY(~BW) = 0; imshow(maskedImageXY)

Realice la misma operación en el sector XZ. Con cargar imagen, seleccione la variable.XZ Utilice el umbral para realizar la segmentación inicial de los pulmones. Para el sector XZ, la opción crea una segmentación adecuada (la llamada al código siguiente).Global Thresholdimbinarize Al igual que con el sector XY, utilice las opciones del menú para crear una segmentación pulida de los pulmones.Refine Mask En la operación de erosión en la ficha morfología, especifique un radio de 13 para eliminar pequeños objetos extraños.

Para segmentar el sector XZ y pulir el resultado, la aplicación ejecuta el siguiente código.

BW = imbinarize(XZ); BW = imcomplement(BW); BW = imclearborder(BW); BW = imfill(BW,'holes'); radius = 13; decomposition = 0; se = strel('disk',radius,decomposition); BW = imerode(BW, se); maskedImageXZ = XZ; maskedImageXZ(~BW) = 0; imshow(maskedImageXZ)

Crear máscara de semilla y segmentos de pulmones utilizando activecontour

En esta parte del ejemplo, cree la máscara de semilla 3-D que puede utilizar con la función para segmentar los pulmones.activecontour

Cree un volumen 3-D lógico del mismo tamaño que el volumen de entrada y la inserción y en las ubicaciones espaciales apropiadas.mask_XYmask_XZ

mask = false(size(V)); mask(:,:, 160) = maskedImageXY; mask(256, :, :) = mask(256, :, :)|reshape(maskedImageXZ, [1, 512, 318]);

Usando esta máscara de semilla 3-D, segmenta los pulmones en el volumen 3D usando el método de contorno activo. Esta operación puede tardar unos minutos. Para obtener una segmentación de calidad, utilice histeq para propagar valores de voxel sobre el rango disponible.

V = histeq(V);  BW  = activecontour(V,mask,100,'Chan-Vese');  segmentedImage = V.*single(BW);

Puede ver los pulmones segmentados en la aplicación Volume Viewer,.volumeViewer(segmentedImage) Al manipular la configuración de Alphamap en el editor de renderización, puede obtener una buena vista de sólo los pulmones.

Calcule el volumen de los pulmones segmentados

En esta parte del ejemplo, utilice el regionprops función para calcular el volumen (área) de los pulmones.

Calcule el área de los pulmones utilizando la función con la opción.regionprops'area'

volLungsPixels = regionprops3(logical(BW),'volume');

Especifique el espaciado de los vóxeles en la, y las cotas.xyz (Recopilado de los metadatos del archivo anteriormente.)

volLungs1 = volLungsPixels.Volume(1)*0.76*0.76*1.25*1e-6;  volLungs2 = volLungsPixels.Volume(2)*0.76*0.76*1.25*1e-6;  volLungsLiters = volLungs1 + volLungs2
volLungsLiters = 5.7268 

Consulte también

| |