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.

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

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

RGB = imread('yellowlily.jpg');

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

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

Подробнее о

свернуть все

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

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

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

где |<reservedrangesplaceholder4>| представляет кардинал множества 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