jaccard

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

Описание

пример

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

пример

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;

Отобразите области seed сверху изображения.

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 заметно меньше для второй области. Этот результат сопоставим с визуальным сравнением результатов сегментации, которое ошибочно классифицирует грязь на правый нижний угол изображения как листы.

Входные параметры

свернуть все

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

Типы данных: логический

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

Типы данных: логический

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

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

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

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

Сначала категориальное изображение в виде a categorical массив любой размерности.

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

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

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

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

свернуть все

Коэффициент подобия Jaccard, возвращенный в виде числа или числового вектора со значениями в области значений [0, 1]. 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 - diceA, B

Смотрите также

|

Введенный в R2017b