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.

grabcut

Segmente la imagen en primer plano y fondo utilizando la segmentación iterativa basada en gráficos

Descripción

ejemplo

BW = grabcut(A,L,ROI) segmenta la imagen en regiones de primer plano y de fondo.A La matriz de etiquetas especifica las subregiones de la imagen. es una máscara lógica que designa la región inicial de interés.LROI

BW = grabcut(A,L,ROI,foremask,backmask) segmenta la imagen, donde y son máscaras que designan píxeles en la imagen como primer plano y fondo, respectivamente.Aforemaskbackmask

BW = grabcut(A,L,ROI,foreind,backind) segmenta la imagen , donde y especifique los índices lineales de los píxeles de la imagen marcados como primer plano y de fondo, respectivamente.Aforeindbackind

ejemplo

BW = grabcut(V,___) segmentos del volumen en regiones de primer plano y de fondo.V

BW = grabcut(___,Name,Value) segmenta la imagen utilizando pares nombre-valor para controlar los aspectos de la segmentación.

Ejemplos

contraer todo

Lea una imagen RGB en el espacio de trabajo.

RGB = imread('peppers.png');

Generar matriz de etiquetas.

L = superpixels(RGB,500);

Especifique una región de interés y cree una imagen de máscara.

figure imshow(RGB) h1 = drawpolygon(gca,'Position',[72,105; 1,231; 0,366; 104,359;...         394,307; 518,343; 510,39; 149,72]);

roiPoints = h1.Position; roi = poly2mask(roiPoints(:,1),roiPoints(:,2),size(L,1),size(L,2));

Realice la operación de corte de agarre, especificando la imagen original, la matriz de etiquetas y el ROI.

BW = grabcut(RGB,L,roi); figure imshow(BW)

Crear imagen enmascarada.

maskedImage = RGB; maskedImage(repmat(~BW,[1 1 3])) = 0; figure; imshow(maskedImage)

Cargue datos volumétricos 3D.

load mristack V = mristack;

Cree una máscara 2D para los puntos iniciales de primer plano y de inicialización de fondo.

seedLevel = 10; fseed = V(:,:,seedLevel) > 75; bseed = V(:,:,seedLevel) == 0;

Mostrar puntos de semilla de primer plano y fondo.

imshow(fseed)

imshow(bseed)

Coloque los puntos de semilla en una máscara 3D vacía.

fmask = zeros(size(V)); bmask = fmask; fmask(:,:,seedLevel) = fseed; bmask(:,:,seedLevel) = bseed;

Cree la región inicial de interés.

roi = false(size(V)); roi(10:end-10,10:end-10,:) = true;

Generar matriz de etiquetas.

L = superpixels3(V,500);

Realice GrabCut.

bw = grabcut(V,L,roi,fmask,bmask);

Mostrar imagen segmentada 3D.

montage(reshape(bw,size(V)))

Argumentos de entrada

contraer todo

Imagen de entrada, especificada como una matriz numérica real, finita, no dispersa. Solo las imágenes en escala de grises pueden ser .int16

Tipos de datos: single | double | int16 | uint8 | uint16

Volumen de entrada, especificado como una matriz numérica real, finita, no dispersa, 3D.

Tipos de datos: single | double | int16 | uint8 | uint16

Matriz de etiquetas, especificada como una matriz de etiquetas válida para la imagen de entrada.

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

Región de interés, especificada como una matriz lógica, donde todos los píxeles que definen la región de interés son iguales a .true

Tipos de datos: logical

Máscara de primer plano, especificada como una matriz lógica.

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

Máscara de fondo, especificada como una matriz lógica.

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

Indices de píxeles en primer plano, especificados como vector de índices lineales.

Tipos de datos: double

Indices de píxeles en segundo plano, especificados como vector de índices lineales.

Tipos de datos: double

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como .Name1,Value1,...,NameN,ValueN

Ejemplo: BW = grabcut(A,L,ROI,'Connectivity',4)

Conectividad de componentes conectados, especificada como uno de los siguientes valores. La conectividad predeterminada es 8 para las imágenes 2D y 26 para las imágenes 3D.

Valor

Significado

Conectividades bidimensionales

4

Vecindario conectado en 4

El píxel actual se muestra en gris.

8

Vecindario conectado a 8

El píxel actual se muestra en gris.

Conectividades tridimensionales

6

Vecindario conectado a 6

El píxel actual es el centro del cubo.

18

Vecindario conectado a 18

El píxel actual es el centro del cubo.

26

Vecindario conectado a 26

El píxel actual es el centro del cubo.

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

Número máximo de iteraciones realizadas por el algoritmo. El algoritmo puede converger en una solución antes de alcanzar el número máximo de iteraciones.

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

Argumentos de salida

contraer todo

Imagen de salida, devuelta como imagen binaria del mismo tamaño que la matriz de etiquetas.L

Sugerencias

  • Para e imágenes, asume que el rango de la imagen es .doublesinglegrabcut[0 1] Para , , e imágenes, se supone que el intervalo es el intervalo completo para el tipo de datos especificado.uint16int16uint8grabcut

  • Para las imágenes en escala de grises, el tamaño de , , y debe coincidir con el tamaño de la imagen.LforemaskbackmaskA Para imágenes en color y multicanal, , , y debe ser matrices 2D con las dos primeras dimensiones idénticas a las dos primeras dimensiones de la imagen.LforemaskbackmaskA

Algoritmos

  • El algoritmo trata todas las subregiones completa o espacialmente fuera de la máscara de ROI como pertenecientes al fondo. Para obtener una segmentación óptima, asegúrese de que el objeto que se va a segmentar está totalmente contenido en el ROI, rodeado por un pequeño número de píxeles de fondo.

  • No marque una subregión de la matriz de etiquetas como perteneciente tanto a la máscara de primer plano como a la máscara de fondo. Si una región de la matriz de etiquetas contiene píxeles que pertenecen tanto a la máscara de primer plano como a la máscara de fondo, el algoritmo trata eficazmente la región como sin marcar.

  • El algoritmo supone que todas las subregiones fuera de la región de interés pertenecen al fondo. Marcar una de estas subregiones como perteneciente a la máscara de primer plano o de fondo no tiene ningún efecto en la segmentación resultante.

Referencias

[1] Rother, C., V. Kolmogorov, and A. Blake. "GrabCut - Interactive Foreground Extraction using Iterated Graph Cuts". ACM Transactions on Graphics (SIGGRAPH). Vol. 23, Number 3, 2004, pp. 309–314.

Introducido en R2018a