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.

imsegfmm

Segmentación de imágenes binarias mediante el método de marcha rápida

Descripción

ejemplo

BW = imsegfmm(W,mask,thresh) devuelve una imagen segmentada, que se calcula mediante el método de marcha rápida.BW La matriz especifica pesos para cada píxel. es una matriz lógica que especifica las ubicaciones de semillas. es un escalar no negativo en el rango que especifica el nivel de umbral.Wmaskthresh[0 1]

BW = imsegfmm(W,C,R,thresh) devuelve una imagen segmentada, con ubicaciones de semillas especificadas por los vectores y , que contienen índices de columna y fila. y deben contener valores que sean índices de píxeles válidos en .CRCRW

BW = imsegfmm(W,C,R,P,thresh) devuelve una imagen segmentada, con ubicaciones de semillas especificadas por los vectores , , y , que contienen índices de columna, fila y plano. , , y debe contener valores que sean índices de píxeles válidos en .CRPCRPW

[BW,D] = imsegfmm(___) devuelve el mapa de distancia geodésica normalizado calculado mediante el Método de marcha rápida. es una versión de umbral de , donde todos los píxeles que tienen valores de distancia geodésica normalizados menores que se consideran píxeles de primer plano y se establecen en . puede ser umbral en diferentes niveles para obtener diferentes resultados de segmentación.DBWDthreshtrueD

Ejemplos

contraer todo

En este ejemplo se muestra cómo segmentar un objeto de una imagen mediante el método de marcha rápida en función de las diferencias en la intensidad de la escala de grises en comparación con las ubicaciones de las semillas.

Leer imagen.

I = imread('cameraman.tif'); imshow(I) title('Original Image')

Cree una máscara y especifique la ubicación de los valores de los valores de los valores. También puede utilizar para crear la máscara de forma interactiva.roipoly

mask = false(size(I));  mask(170,70) = true;

Calcular la matriz de peso en función de las diferencias de intensidad de escala de grises.

W = graydiffweight(I, mask, 'GrayDifferenceCutoff', 25);

Segmente la imagen utilizando los pesos.

thresh = 0.01; [BW, D] = imsegfmm(W, mask, thresh); figure imshow(BW) title('Segmented Image')

Puede umbral la matriz de distancia geodésica utilizando diferentes umbrales para obtener resultados de segmentación diferentes.D

figure imshow(D) title('Geodesic Distances')

Este ejemplo segmenta el cerebro a partir de los datos de RMN de la cabeza humana.

Cargue los datos de RMN.

load mri V = squeeze(D);

Visualice los datos.

sizeO = size(V); figure; slice(double(V),sizeO(2)/2,sizeO(1)/2,sizeO(3)/2); shading interp, colormap gray; title('Original');

Establezca las ubicaciones de las semillas.

seedR = 75;  seedC = 60;  seedP = 10;

Calcular pesos basados en diferencias de intensidad en escala de grises.

W = graydiffweight(V, seedC, seedR, seedP , 'GrayDifferenceCutoff', 25);

Segmente la imagen utilizando los pesos.

thresh = 0.002; BW = imsegfmm(W, seedC, seedR, seedP, thresh);

Visualice la imagen segmentada utilizando una superficie iso.

figure; p = patch(isosurface(double(BW))); p.FaceColor = 'red'; p.EdgeColor = 'none'; daspect([1 1 27/64]); camlight;  lighting phong;

Argumentos de entrada

contraer todo

Matriz de peso, especificada como una matriz numérica no dispersa y no negativa. Utilice las funciones o para calcular esta matriz de peso.graydiffweightgradientweight Los valores altos en los valores de identificación del primer plano (objeto) y bajos identifican el fondo.W

Ejemplo: W = graydiffweight(I, mask,'GrayDifferenceCutoff', 25);

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

Máscara de ubicaciones de semillas, especificada como una matriz lógica, del mismo tamaño que .W Las ubicaciones donde es true son ubicaciones de semillas.mask Si usó para crear la matriz de peso, se recomienda utilizar el mismo valor de con el que utilizó con .graydiffweightWmaskimsegfmmgraydiffweight

Ejemplo: mask = false(size(I)); mask(170,70) = true;

Tipos de datos: logical

Nivel de umbral utilizado para obtener la imagen binaria, especificada como escalar no negativo en el intervalo.[0 1] Los valores bajos suelen dar como resultado regiones de primer plano grandes (lógica true) en , y los valores altos producen regiones de primer plano pequeñas.BW

Ejemplo: 0.5

Tipos de datos: double

El índice de columnas de píxeles de referencia, especificado como vector numérico.

Ejemplo: [50 75 93]

Tipos de datos: double

Índice de fila de píxeles de referencia, especificado como vector numérico.

Ejemplo: [48 71 89]

Tipos de datos: double

Plano de índice de píxeles de referencia, especificado como vector numérico.

Ejemplo: ]

Tipos de datos: double

Argumentos de salida

contraer todo

Imagen segmentada, devuelta como una matriz lógica del mismo tamaño que .W

Ejemplo:

Tipos de datos: logical

Mapa de distancia geodésica normalizado, devuelto como una matriz del mismo tamaño que .doubleW Si es de clase , es de clase .WsingleDsingle

Sugerencias

  • utiliza operaciones de punto flotante de doble precisión para los cálculos internos para todas las clases excepto la clase .imsegfmmsingle Si es de clase , utiliza operaciones de punto flotante de precisión única internamente.Wsingleimsegfmm

  • establece los píxeles con o valores de peso en la imagen de distancia geodésica.imsegfmm0NaNInfD Estos píxeles forman parte del fondo (falso lógico) de la imagen segmentada.BW

Referencias

[1] Sethian, J. A. Level Set Methods and Fast Marching Methods: Evolving Interfaces in Computational Geometry, Fluid Mechanics, Computer Vision, and Materials Science, Cambridge University Press, 2nd Edition, 1999.

Introducido en R2014b