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

Segmentar la imagen en primer plano y en segundo plano mediante 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, dónde y cuáles son las máscaras que designan los píxeles de la imagen como primer plano y fondo, respectivamente.Aforemaskbackmask

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

ejemplo

BW = grabcut(V,___) segmenta el 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

Leer una imagen RGB en el espacio de trabajo.

RGB = imread('peppers.png');

Genere la 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 = impoly(gca,[72,105; 1,231; 0,366; 104,359;...         394,307; 518,343; 510,39; 149,72]);

roiPoints = getPosition(h1); 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 los datos volumétricos 3-D.

load mristack V = mristack;

Cree una máscara 2-D para los puntos iniciales del primer plano y de la semilla de fondo.

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

Mostrar puntos de semilla de primer plano y de fondo.

imshow(fseed)

imshow(bseed)

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

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

Cree una región de interés inicial.

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

Genere la 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 pueden ser imágenes en escala de grises.int16

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

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

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

Label Matrix, 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

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

Tipos de datos: double

Índices de píxeles en el fondo, especificados como un vector de índices lineales.

Tipos de datos: double

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.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, especificado como uno de los siguientes valores. La conectividad predeterminada es 8 para imágenes 2 – D, y 26 para imágenes 3 – D.

Valor

Significado

Two-dimensional connectivities

4

4-Connected vecindario

El píxel actual se muestra en gris.

8

8-Connected vecindario

El píxel actual se muestra en gris.

Three-dimensional connectivities

6

6-Connected vecindario

El píxel actual es el centro del cubo.

18

barrio con 18

El píxel actual es el centro del cubo.

26

26-Connected vecindario

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 el rango de la imagen a ser.doublesinglegrabcut[0 1] Para, e imágenes, asume que el rango es el rango completo para el tipo de datos dado.uint16int16uint8grabcut

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

Algoritmos

  • El algoritmo trata todas las subregiones completamente o espacialmente fuera de la máscara de ROI como perteneciente al fondo. Para obtener una segmentación óptima, asegúrese de que el objeto que se va a segmentar está totalmente contenido dentro del 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 a la máscara de primer plano y a la máscara de fondo. Si una región de la matriz de etiquetas contiene píxeles pertenecientes tanto a la máscara de primer plano como a la máscara de fondo, el algoritmo trata eficazmente a la región como sin marcar.

  • El algoritmo asume 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