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.

lazysnapping

Segmentar la imagen en primer plano y en segundo plano mediante la segmentación basada en gráficos

Descripción

ejemplo

BW = lazysnapping(I,L,foremask,backmask) segmenta la imagen o el volumen en las regiones de primer plano y de fondo mediante forzado de cursor.I La matriz de etiquetas especifica las subregiones de la imagen. y son máscaras que designan píxeles en la imagen como primer plano y fondo, respectivamente.Lforemaskbackmask

BW = lazysnapping(I,L,foreind,backind) segmenta la imagen o el volumen en las regiones de primer plano y de fondo. y especifique los índices lineales de los píxeles de la imagen marcados como primer plano y fondo, respectivamente.Iforeindbackind

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

Ejemplos

contraer todo

Leer una imagen en el espacio de trabajo.

RGB = imread('peppers.png');

Marque ubicaciones en la imagen como primer plano.

figure;  imshow(RGB) h1 = impoly(gca,[34,298;114,140;195,135;...     259,200;392,205;467,283;483,104],'Closed',false);

Convierta las ubicaciones en índices lineales.

foresub = getPosition(h1); foregroundInd = sub2ind(size(RGB),foresub(:,2),foresub(:,1));

Marcar ubicaciones en la imagen como fondo.

figure;  imshow(RGB) h2 = impoly(gca,[130,52;170,32],'Closed',false);

Convierta las ubicaciones en índices lineales.

backsub = getPosition(h2); backgroundInd = sub2ind(size(RGB),backsub(:,2),backsub(:,1));

Genere la matriz de etiquetas.

L = superpixels(RGB,500);

Realice la alineación diferida.

BW = lazysnapping(RGB,L,foregroundInd,backgroundInd);

Crear imagen enmascarada.

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

Cargue la imagen volumétrica 3-D en el espacio de trabajo.

D = load('mri.mat'); V  = squeeze(D.D);  

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

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

 figure;   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;

Genere una matriz de etiquetas 3-D.

 L = superpixels3(V,500);

Segmenta la imagen en primer plano y en segundo plano con ajuste diferido.

bw = lazysnapping(V,L,fmask,bmask);

Visualice la imagen segmentada en 3D.

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

Argumentos de entrada

contraer todo

Imagen de entrada, especificada como una matriz numérica en uno de estos formatos.

Tipo de imagenFormato de datos
imagen en escala de grises 2-Dmatriz 2-D de tamaño-por-hw
imagen en color 2-Darray 3-D de talla-por--por-3hw
imagen multiespectral 2-D con canalescarray 3-D de tamaño-por--por-hwc
3-D imagen volumétrica en escala de grises con profundidaddarray 3-D de tamaño-por--por-hwd

espera valores de píxel de tipo de datos y estar en el intervalo [0, 1].lazysnappingdoublesingle Puede utilizar la función para ajustar los valores de píxel al intervalo esperado. espera los valores de píxel del tipo de datos y que sea el intervalo completo para el tipo de datos especificado.rescalelazysnappinguint16int16uint8 Si los valores no coinciden con el intervalo esperado, escale la imagen al intervalo esperado o ajuste para mejorar los resultados.EdgeWeightScaleFactor

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

Matriz de etiquetas de la imagen de entrada o el volumen, especificada como matriz numérica. Para imágenes en 2-D, es una matriz de 2-D de tamaño por.Lhw Para volúmenes 3-D, es una matriz 3D de tamaño por--por-.Lhwd

No marque una subregión determinada 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, segmenta la región como fondo.lazysnapping

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

Imagen de máscara que define el primer plano, especificado como una matriz lógica. Para imágenes en 2-D, es una matriz de 2-D de tamaño por.foremaskhw Para volúmenes 3-D, es una matriz 3D de tamaño por--por-.foremaskhwd

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

Imagen de máscara que define el fondo, especificado como una matriz lógica. Para imágenes en 2-D, es una matriz de 2-D de tamaño por.backmaskhw Para volúmenes 3-D, es una matriz 3D de tamaño por--por-.backmaskhwd

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

Índice lineal de píxeles en la matriz de etiquetas, especificado como un vector de enteros positivos. Puede utilizar una herramienta de dibujo de ROI, por ejemplo, para seleccionar puntos en primer plano.drawpolyline A continuación, convierta las coordenadas de los puntos en índices lineales utilizando.sub2ind Si las coordenadas son valores no enteros, redondee los valores antes de convertirlos a índices lineales.

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

Índice lineal de píxeles que definen el fondo, especificado como un vector de enteros positivos. Puede utilizar una herramienta de dibujo de ROI, por ejemplo, para seleccionar puntos en el fondo.drawpolyline A continuación, convierta las coordenadas de los puntos en índices lineales utilizando.sub2ind Si las coordenadas son valores no enteros, redondee los valores antes de convertirlos a índices lineales.

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

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: 'Connectivity',18

Conectividad de componentes conectados, especificado como uno de los valores de esta tabla. La conectividad predeterminada es para imágenes en 2-D y para imágenes 3D.826

Valor

Significado

Two-Dimensional Connectivities

4-connected

Los píxeles se conectan si los bordes se tocan. Dos píxeles adyacentes forman parte del mismo objeto si están conectados y se conectan a lo largo de la dirección horizontal o vertical.

8-connected

Los píxeles se conectan si los bordes o las esquinas se tocan. Dos píxeles adyacentes forman parte del mismo objeto si están conectados y se conectan a lo largo de la dirección horizontal, vertical o diagonal.

Three-Dimensional Connectivities

6-conectado

Los píxeles se conectan si se tocan las caras. Dos píxeles adyacentes forman parte del mismo objeto si están conectados y se conectan en:

  • Una de estas direcciones: en, fuera, izquierda, derecha, arriba y abajo

18-conectado

Los píxeles se conectan si sus caras o aristas se tocan. Dos píxeles adyacentes forman parte del mismo objeto si están conectados en

  • Una de estas direcciones: en, fuera, izquierda, derecha, arriba y abajo

  • Una combinación de dos direcciones, como la derecha-abajo o en

26-conectado

Los píxeles se conectan si sus caras, aristas o esquinas se tocan. Dos píxeles adyacentes forman parte del mismo objeto si están conectados en

  • Una de estas direcciones: en, fuera, izquierda, derecha, arriba y abajo

  • Una combinación de dos direcciones, como la derecha-abajo o en

  • Una combinación de tres direcciones, como en-derecha-arriba o en-izquierda-abajo

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

Factor de escala para los pesos de arista entre las subregiones de la matriz de etiquetas, especificado como el par separado por comas que consta de un escalar positivo.'EdgeWeightScaleFactor' Los valores típicos oscilan entre [10, 1000]. Al aumentar este valor, aumenta la probabilidad de que las etiquetas subregiones vecinas se juntan como primer plano o fondo.lazysnapping

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

Argumentos de salida

contraer todo

Imagen segmentada, devuelta como una matriz numérica del mismo tamaño que la matriz de etiquetas,.L

Algoritmos

El algoritmo de alineación diferida desarrollado por Li et al. agrupa los valores de primer plano y de fondo mediante el método K-means. Esta implementación del algoritmo de ajuste diferido no se agrupara en píxeles de primer plano o de fondo similares. Para mejorar el rendimiento, reduzca el número de píxeles con valores similares que se identifican como primer plano o fondo.

Referencias

[1] Y. Li, S. Jian, C. Tang, H. Shum. Lazy Snapping. In Proceedings from the 31st International Conference on Computer Graphics and Interactive Techniques, 2004.

Introducido en R2017a