Main Content

Utilice LOS ROI a mano alzada para refinar las máscaras de segmentación

En este ejemplo se muestra cómo refinar una máscara de segmentación lógica convirtiéndola en un objeto de ROI a mano alzada. En este método, aprovechará la capacidad de remodelación interactiva del objeto de ROI a mano alzada para ajustar mejor el borde de la máscara de segmentación a la forma de la región de imagen que desea segmentar.

Introducción - Segmentación de imágenes

Los algoritmos de segmentación se utilizan para segmentar partes interesantes de una imagen. Para ilustrar, este ejemplo utiliza la agrupación de medios K para segmentar hueso y tejido en una imagen de RMN.

im = dicomread('knee1.dcm'); segmentedLabels = imsegkmeans(im,3); boneMask = segmentedLabels==2; imshowpair(im, boneMask);

Post-Proceso de las Máscaras de Segmentación

A menudo, los resultados de los algoritmos de segmentación automatizados necesitan un postprocesamiento adicional para limpiar las máscaras. Como primer paso, seleccione los dos huesos más grandes de la máscara, el fémur y la tibia.

boneMask = bwareafilt(boneMask, 2); imshowpair(im, boneMask);

Convertir máscara en objeto de ROI a mano alzada

Para refinar los bordes de la segmentación automática k-means, convierta las dos máscaras en objetos de ROI interactivos a mano alzada. En primer lugar, recupere las ubicaciones de los píxeles de límite que delinean estas dos regiones segmentadas. Tenga en cuenta que estos objetos de ROI se muestrean densamente: su propiedad tiene la misma resolución que los píxeles de imagen.Position

blocations = bwboundaries(boneMask,'noholes'); figure imshow(im, []); for ind = 1:numel(blocations)     % Convert to x,y order.     pos = blocations{ind};     pos = fliplr(pos);     % Create a freehand ROI.     drawfreehand('Position', pos); end

Editar los ROI

El objeto ROI a mano alzada permite ediciones interactivas simples de "banda de goma". Para editar el ROI, haga clic y arrastre cualquiera de los waypoints a lo largo del límite del ROI. Puede agregar puntos intermedios adicionales en cualquier parte del límite haciendo doble clic en la arista del ROI o utilizando el menú contextual al que se puede acceder haciendo clic con el botón derecho en la arista.

Convierta los ROIs a mano alzada en máscaras

Después de editar los ROI, convierta estos objetos de ROI en máscaras binarias mediante el método del objeto ROI.createMask Tenga en cuenta el paso adicional necesario para incluir los píxeles de límite en la máscara final.

% Convert edited ROI back to masks. hfhs = findobj(gca, 'Type', 'images.roi.Freehand'); editedMask = false(size(im));  for ind = 1:numel(hfhs)     % Accumulate the mask from each ROI     editedMask = editedMask | hfhs(ind).createMask();      % Include the boundary of the ROI in the final mask.     % Ref: https://blogs.mathworks.com/steve/2014/03/27/comparing-the-geometries-of-bwboundaries-and-poly2mask/     % Here, we have a dense boundary, so we can take the slightly more     % performant approach of just including the boundary pixels directly in     % the mask.     boundaryLocation = hfhs(ind).Position;     bInds = sub2ind(size(im), boundaryLocation(:,2), boundaryLocation(:,1));     editedMask(bInds) = true; end

Consulte también

| | | | | |