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.

Segmentar pulmones de exploración de tórax 3D

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

Preparar los datos

Cargue los datos de la tomografía computarizada del tórax humano en el espacio de trabajo. Para ejecutar este ejemplo, debe descargar los datos de ejemplo de MathWorks™ mediante el Explorador de complementos. Ver.Instale datos de ejemplo mediante el Explorador de complementos

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

Convierta los datos de exploración por TC de a para normalizar los valores al rango [0, 1].int16single

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

Vea los escaneos de pecho con la aplicación Visor de volumen. Abra la aplicación desde 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 volúmenes tiene mapas alfa predefinidos que están diseñados para proporcionar la mejor vista de ciertos tipos de datos. Para obtener la mejor vista de las exploraciones torácicas, seleccione el ajuste preestablecido.ct-bone

Segmentar los pulmones

Segmente los pulmones en los datos de la tomografía computarizada utilizando la técnica de contorno activo. Los contornos activos son un algoritmo de crecimiento de la región que requiere puntos iniciales de inicialización. En el ejemplo se utiliza la aplicación Image Segmenter para crear esta máscara de semilla segmentando dos sectores 2D ortogonales, uno en el plano XY y el otro en el plano XZ. A continuación, el ejemplo inserta estas dos segmentaciones en una máscara 3D. El ejemplo pasa esta máscara a la función para crear una segmentación tridimensional de los pulmones en la cavidad torácica.activecontour (En este ejemplo se utiliza el método de contorno activo, pero podría utilizar otras técnicas de segmentación para lograr el mismo objetivo, como relleno de inundación.)

Extraiga el sector central en las cotas XY y XZ.

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

Vea los sectores 2D utilizando la función.imshow

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

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

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

Para iniciar el proceso de segmentación, haga clic para abrir la rebanada de pulmón en la pestaña.UmbralUmbral En la pestaña 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.Umbral manual Haga clic para aceptar el umbral y devolver la pestaña Segmentación.Crear máscara

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

BW = XY > 5.098000e-01;

Después de esta segmentación pulmonar inicial, limpie la máscara usando las opciones del menú.Refinar máscara

En la aplicación, puede hacer clic en cada opción para invertir la imagen de la máscara de modo que los pulmones estén en primer plano ( ), eliminar otros elementos segmentados además de los pulmones ( ), y rellenar agujeros dentro de la segmentación pulmonar ( ).Invertir máscaraFronteras clarasRellenar agujeros Por último, utilice la opción para suavizar los bordes de la segmentación pulmonar.Morfología En la pestaña Morfología, seleccione la operación.Máscara de ero Después de realizar estos pasos, seleccione y guarde la imagen de máscara en el espacio de trabajo.Mostrar binario

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 en el código siguiente).Umbral globalimbinarize Al igual que con la rebanada XY, utilice las opciones del menú para crear una segmentación pulida de los pulmones.Refinar máscara En la operación de erosión de la ficha Morfología, especifique un radio de 13 para eliminar objetos extraños pequeñ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 segmentar pulmones usando activecontour

Cree la máscara de semilla 3D que puede utilizar con la función para segmentar los pulmones.activecontour

Cree un volumen 3D lógico del mismo tamaño que el volumen de entrada e insértelo y en las ubicaciones espaciales adecuadas.mask_XYmask_XZ

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

Con esta máscara de semilla 3D, segmente los pulmones en el volumen 3D utilizando el método de contorno activo. Esta operación puede tardar unos minutos. Para obtener una segmentación de calidad, utilice para distribuir los valores de vóxeles en el rango disponible.histeq

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

Puede ver los pulmones segmentados en la aplicación Visor de volumen, .volumeViewer(segmentedImage) Al manipular la configuración de alfamap en el Editor de renderización, puede obtener una buena vista de solo los pulmones.

Calcular el volumen de los pulmones segmentados

Utilice la función con la opción de calcular el volumen de los pulmones.regionprops3'volume'

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

Especifique el espaciado de los vóxeles en las dimensiones , , y que se recopiló a partir de los metadatos del archivo original.xyz Los metadatos no se incluyen con los datos de imagen que se descargan desde el Explorador de complementos.

spacingx = 0.76; spacingy = 0.76; spacingz = 1.26*1e-6; unitvol = spacingx*spacingy*spacingz;  volLungs1 = volLungsPixels.Volume(1)*unitvol; volLungs2 = volLungsPixels.Volume(2)*unitvol; volLungsLiters = volLungs1 + volLungs2
volLungsLiters = 5.7726 

Consulte también

| | |