exponenta event banner

jaccard

Коэффициент подобия Jaccard для сегментации изображения

Описание

пример

similarity = jaccard(BW1,BW2) вычисляет пересечение двоичных изображений BW1 и BW2 разделен союзом BW1 и BW2, также известный как индекс Жаккарда. Изображения могут быть двоичными изображениями, изображениями меток или категориальными изображениями.

пример

similarity = jaccard(L1,L2) вычисляет индекс Jaccard для каждой метки в изображениях меток L1 и L2.

similarity = jaccard(C1,C2) вычисляет индекс Jaccard для каждой категории в категориальных изображениях C1 и C2.

Примеры

свернуть все

Считывание изображения, содержащего объект для сегмента. Преобразуйте изображение в градации серого и отобразите результат.

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

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

Используйте метод активных контуров (змей) для сегментации руки.

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

Прочитайте в земле истину, с которой сравнивать сегментацию.

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

Вычислите индекс Jaccard этой сегментации.

similarity = jaccard(BW, BW_groundTruth);

Отображение масок друг на друге. Цвета указывают на различия в масках.

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

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

В этом примере показано, как сегментировать изображение на несколько областей. Затем в примере вычисляется коэффициент подобия Jaccard для каждой области.

Чтение изображения с несколькими областями для сегментации.

RGB = imread('yellowlily.jpg');

Создайте писанки для трех областей, отличающих их типичные цветовые характеристики. Первая область классифицирует жёлтый цветок. Вторая область классифицирует зелёный стебель и листья. Последний регион классифицирует коричневую грязь по двум отдельным пятнам изображения. Области задаются 4-элементным вектором, элементы которого обозначают координату x и y верхнего левого угла ROI, ширину ROI и высоту 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;

Отображение начальных областей поверх изображения.

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

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

Сегментируйте изображение на три области с помощью цветовой сегментации на основе геодезических расстояний.

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

Загрузите сегментацию истинности на земле изображения.

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

Визуально сравните результаты сегментации с основной истинностью.

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

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

Вычислите индекс подобия Jaccard (IoU) для каждой сегментированной области.

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

    0.8861
    0.5683
    0.8414

Индекс подобия Jaccard заметно меньше для второго региона. Этот результат согласуется с визуальным сравнением результатов сегментации, которая ошибочно классифицирует грязь в правом нижнем углу изображения как листья.

Входные аргументы

свернуть все

Первый двоичный образ, заданный как логический массив любого измерения.

Типы данных: logical

Второй двоичный образ, заданный как логический массив того же размера, что и BW1.

Типы данных: logical

Первое изображение метки, указанное как массив неотрицательных целых чисел, любого размера.

Типы данных: double

Второе изображение метки, указанное как массив неотрицательных целых чисел того же размера, что и L1.

Типы данных: double

Первое категориальное изображение, указанное как categorical массив любого измерения.

Типы данных: category

Второе категориальное изображение, указанное как categorical массив того же размера, что и C1.

Типы данных: category

Выходные аргументы

свернуть все

Коэффициент подобия Jaccard, возвращаемый как числовой скалярный или числовой вектор со значениями в диапазоне [0, 1]. A similarity 1 означает, что сегментации в двух изображениях являются идеальным совпадением. Если входные массивы:

  • двоичные изображения, similarity является скаляром.

  • изображения меток, similarity является вектором, где первый коэффициент является индексом Jaccard для метки 1, второй коэффициент является индексом Jaccard для метки 2 и так далее.

  • категориальные изображения, similarity - вектор, где первый коэффициент является индексом Jaccard для первой категории, второй коэффициент является индексом Jaccard для второй категории и так далее.

Типы данных: double

Подробнее

свернуть все

Коэффициент подобия Jaccard

Коэффициент Jaccard подобия двух множеств A и B (также известный как пересечение через объединение или IoU) выражается как:

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

где | A | представляет кардинал множества A. Индекс Jaccard также может быть выражен в терминах истинных положительных (TP), ложных положительных (FP) и ложных отрицательных (FN) как:

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

Индекс Jaccard связан с индексом Dice согласно:

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

См. также

|

Представлен в R2017b