dice

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

Описание

пример

similarity = dice(BW1,BW2) вычисляет коэффициент подобия Сёренсена-Диса между бинарными изображениями BW1 и BW2.

пример

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

similarity = dice(C1,C2) вычисляет индекс Dice для каждой категории в категориальных изображениях 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');

Вычислите индекс Dice сегментации активных контуров относительно основная истина.

similarity = dice(BW, BW_groundTruth);

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

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

Figure contains an axes. The axes with title Dice Index = 0.83828 contains an object of type image.

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

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

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;

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

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
montage({label2rgb(L),label2rgb(L_groundTruth)})
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.

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

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

    0.9396
    0.7247
    0.9139

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

Подробнее о

свернуть все

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

Коэффициент подобия Dice двух множеств A и B выражается как:

dice(A, B) = 2 * | intersection(A, B) | / (| A | + | B |)

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

dice(A, B) = 2 * TP / (2 * TP + FP + FN)

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

dice(A, B) = 2 * jaccard(A, B) / (1 + jaccard(A, B))

См. также

|

Введенный в R2017b