Коэффициент подобия Jaccard для сегментации изображения
вычисляет пересечение бинарных изображений similarity = jaccard(BW1,BW2)BW1 и BW2 разделенный на объединение BW1 и BW2, также известный как индекс Жаккара. Изображения могут быть бинарными изображениями, метками изображений или категориальными изображениями.
вычисляет индекс Jaccard для каждой метки в изображениях меток similarity = jaccard(L1,L2)L1 и L2.
вычисляет индекс Jaccard для каждой категории в категориальных изображениях similarity = jaccard(C1,C2)C1 и C2.
Чтение изображения, содержащего объект, в сегмент. Преобразуйте изображение в полутоновое и отобразите результат.
A = imread('hands1.jpg'); I = im2gray(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)])
В этом примере показано, как сегментировать изображение в несколько областей. Затем пример вычисляет коэффициент подобия Жаккара для каждой области.
Чтение на изображении с несколькими областями в сегменте.
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')

Сегментируйте изображение в три области с помощью геодезической сегментации цвета на основе расстояния.
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
Индекс подобия Жаккара для второй области заметно меньше. Этот результат согласуется с визуальным сравнением результатов сегментации, которое ошибочно классифицирует грязь в правом нижнем углу изображения как листья.
BW1 - Первое бинарное изображениеПервое бинарное изображение, заданное как логический массив любой размерности.
Типы данных: logical
BW2 - Второе бинарное изображениеВторое бинарное изображение, заданное как логический массив того же размера, что и BW1.
Типы данных: logical
L1 - Первое изображение меткиПервое изображение метки, заданное как массив неотрицательных целых чисел, любой размерности.
Типы данных: double
L2 - Второе изображение меткиВторое изображение метки, заданное как массив неотрицательных целых чисел, того же размера, что и L1.
Типы данных: double
C1 - Первое категориальное изображениеcategorical массивПервое категориальное изображение, заданное как a categorical массив любой размерности.
Типы данных: category
C2 - Второе категориальное изображениеcategorical массивВторое категориальное изображение, заданное как a categorical массив того же размера, что и C1.
Типы данных: category
similarity - коэффициент подобия JaccardКоэффициент подобия Jaccard, возвращенный как числовой скаляр или числовой вектор со значениями в области значений [0, 1]. A similarity из 1 означает, что сегментации в двух изображениях являются идеальным соответствием. Если входные массивы:
бинарные изображения, similarity является скаляром.
метка изображений, similarity является вектором, где первый коэффициент является индексом Жаккарда для метки 1, второй коэффициент является индексом Жаккара для метки 2 и так далее.
категориальные изображения, similarity является вектором, где первый коэффициент является индексом Жаккара для первой категории, второй коэффициент является индексом Жаккара для второй категории и так далее.
Типы данных: double
Коэффициент подобия 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))
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.