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 = rgb2gray(A);
figure
imshow(I)
title('Original 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)])

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

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

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)')

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

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

    0.8861
    0.5683
    0.8414

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

Второе категориальное изображение, заданное как 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