Main Content

jaccard

Coeficiente de similitud de Jaccard para segmentación de imágenes

Descripción

ejemplo

similarity = jaccard(BW1,BW2) calcula la intersección de las imágenes binarias BW1 y BW2 dividida entre la unión de BW1 y BW2, también conocido como el índice de Jaccard. Las imágenes pueden ser imágenes binarias, imágenes de etiquetas o imágenes categóricas.

ejemplo

similarity = jaccard(L1,L2) calcula el índice de Jaccard para cada etiqueta en imágenes de etiqueta L1 y L2.

similarity = jaccard(C1,C2) calcula el índice de Jaccard para cada categoría en imágenes categóricas C1 y C2.

Ejemplos

contraer todo

Lea una imagen que contenga un objeto que desee segmentar. Convierta la imagen a escala de grises y muestre el resultado.

A = imread('hands1.jpg');
I = im2gray(A);
figure
imshow(I)
title('Original Image')

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

Use el método de contornos activos (snakes) para segmentar la mano.

mask = false(size(I));
mask(25:end-25,25:end-25) = true;
BW = activecontour(I, mask, 300);

Lea la validación (ground truth) con la que comparar la segmentación.

BW_groundTruth = imread('hands1-mask.png');

Calcule el índice de Jaccard de esta segmentación.

similarity = jaccard(BW, BW_groundTruth);

Muestre las máscaras unas sobre otras. Los colores indican diferencias entre las máscaras.

figure
imshowpair(BW, BW_groundTruth)
title(['Jaccard Index = ' num2str(similarity)])

Figure contains an axes object. The axes object with title Jaccard Index = 0.72158 contains an object of type image.

En este ejemplo se muestra cómo segmentar una imagen en múltiples regiones. Después, el ejemplo calcula el coeficiente de similitud de Jaccard para cada región.

Lea una imagen con varias regiones que desee segmentar.

RGB = imread('yellowlily.jpg');

Cree garabatos para tres regiones que distingan las características típicas de su color. La primera región clasifica la flor amarilla. La segunda región clasifica el tallo y las hojas verdes. La última región clasifica la tierra marrón en dos zonas separadas de la imagen. Las regiones están especificadas por un vector de 4 elementos cuyos elementos indican las coordenadas x e y de la esquina superior izquierda de la ROI, con el ancho de la ROI y la altura de la ROI.

region1 = [350 700 425 120]; % [x y w h] format
BW1 = false(size(RGB,1),size(RGB,2));
BW1(region1(2):region1(2)+region1(4),region1(1):region1(1)+region1(3)) = true;

region2 = [800 1124 120 230];
BW2 = false(size(RGB,1),size(RGB,2));
BW2(region2(2):region2(2)+region2(4),region2(1):region2(1)+region2(3)) = true;

region3 = [20 1320 480 200; 1010 290 180 240]; 
BW3 = false(size(RGB,1),size(RGB,2));    
BW3(region3(1,2):region3(1,2)+region3(1,4),region3(1,1):region3(1,1)+region3(1,3)) = true;
BW3(region3(2,2):region3(2,2)+region3(2,4),region3(2,1):region3(2,1)+region3(2,3)) = true;

Muestre las regiones de valor inicial sobre la imagen.

figure
imshow(RGB)
hold on
visboundaries(BW1,'Color','r');
visboundaries(BW2,'Color','g');
visboundaries(BW3,'Color','b');
title('Seed Regions')

Figure contains an axes object. The axes object with title Seed Regions contains 7 objects of type line, image.

Segmente la imagen en tres regiones mediante segmentación geodésica basada en el color.

L = imseggeodesic(RGB,BW1,BW2,BW3,'AdaptiveChannelWeighting',true);

Cargue una segmentación de validación de la imagen.

L_groundTruth = double(imread('yellowlily-segmented.png'));

Compare visualmente los resultados de la segmentación con la validación.

figure
imshowpair(label2rgb(L),label2rgb(L_groundTruth),'montage')
title('Comparison of Segmentation Results (Left) and Ground Truth (Right)')

Figure contains an axes object. The axes object with title Comparison of Segmentation Results (Left) and Ground Truth (Right) contains an object of type image.

Calcule el índice de similitud de Jaccard para cada región segmentada.

similarity = jaccard(L, L_groundTruth)
similarity = 3×1

    0.8861
    0.5683
    0.8414

El índice de similitud de Jaccard es claramente más pequeño en la segunda región. Este resultado es consistente con la comparación visual de los resultados de la segmentación, que por error clasifican la tierra en la esquina derecha de abajo de la imagen como hojas.

Argumentos de entrada

contraer todo

Primera imagen binaria, especificada como arreglo lógico de cualquier dimensión.

Tipos de datos: logical

Segunda imagen binaria, especificada como arreglo lógico del mismo tamaño que BW1.

Tipos de datos: logical

Primera imagen de etiqueta, especificada como arreglo de enteros no negativos, de cualquier dimensión.

Tipos de datos: double

Segunda imagen de etiqueta, especificada como arreglo de enteros no negativos del mismo tamaño que L1.

Tipos de datos: double

Primera imagen categórica, especificada como arreglo categorical de cualquier dimensión.

Tipos de datos: category

Segunda imagen categórica, especificada como arreglo categorical del mismo tamaño que C1.

Tipos de datos: category

Argumentos de salida

contraer todo

Coeficiente de similitud de Jaccard, devuelto como escalar numérico o vector numérico con valores en el intervalo [0, 1]. Un valor de similarity de 1 significa que las segmentaciones en las dos imágenes coinciden perfectamente. Si los arreglos de entrada son:

  • imágenes binarias, similarity es un escalar.

  • imágenes de etiqueta, similarity es un vector, donde el primer coeficiente es el índice de Jaccard para la etiqueta 1, el segundo coeficiente es el índice de Jaccard para la etiqueta 2; y así sucesivamente.

  • imágenes categóricas, similarity es un vector, donde el primer coeficiente es el índice de Jaccard para la primera categoría, el segundo coeficiente es el índice de Jaccard para la segunda categoría; y así sucesivamente.

Tipos de datos: double

Más acerca de

contraer todo

Coeficiente de similitud de Jaccard

El coeficiente de similitud de Jaccard de dos conjuntos A y B (también conocido como intersección sobre unión) se expresa así:

jaccard(A,B) = | intersection(A,B) | / | union(A,B) |

donde |A| representa el conjunto cardinal A. El índice de Jaccard también puede expresarse en términos de verdaderos positivos (TP), falsos positivos (FP) y falsos negativos (FN) como:

jaccard(A,B) = TP / (TP + FP + FN)

El índice de Jaccard está relacionado con el índice de Dice según:

jaccard(A,B) = dice(A,B) / (2 - dice(A,B) )

Historial de versiones

Introducido en R2017b

Consulte también

|