imseggeodesic

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

Описание

пример

L = imseggeodesic(RGB,BW1,BW2) сегментирует цветное изображение RGB, возврат сегментированного двухуровневого изображения с маркирует L. BW1 и BW2 двухуровневые изображения, которые задают местоположение начальных областей seed, названных scribbles, для этих двух областей (передний план и фон).

imseggeodesic использует каракули, заданные в BW1 и BW2 как репрезентативные пробы для вычисления статистики для их соответствующих областей, которые это затем использует в сегментации. Каракули заданы BW1 и BW2 (области, которые являются логической истиной) не должен накладываться. Базовый алгоритм использует статистику, оцененную по областям, отмеченным каракулями для сегментации. Чем больше количество пикселей, отмеченных каракулями, тем более точный оценка статистики области, которая обычно приводит к более точной сегментации. Поэтому это - хорошая практика, чтобы обеспечить как можно больше каракулей. Как правило, обеспечьте по крайней мере несколько сотен пикселей как каракули для каждой области.

пример

L = imseggeodesic(RGB,BW1,BW2,BW3) сегментирует цветное изображение RGB, возврат сегментированного изображения с тремя сегментами (trinary сегментация) с метками области, заданными матрицей метки L. BW1, BW2, и BW3 двухуровневые изображения, которые задают местоположение начальных областей seed или каракулей для этих трех областей. Каракули заданы BW1, BW2, и BW3 (области, которые являются логической истиной) не должен накладываться.

пример

[L,P] = imseggeodesic(___) также возвращает вероятность для каждого пикселя, принадлежащего каждой из меток в матричном P.

пример

[L,P] = imseggeodesic(___,Name,Value) пары "имя-значение" использования, чтобы управлять аспектами сегментации.

Примеры

свернуть все

Считайте изображение в рабочую область и отобразите его.

RGB = imread('yellowlily.jpg');
imshow(RGB,'InitialMagnification',50)
hold on

Задайте начальные области seed или "каракули" для основного объекта в форме [left_topR left_topC bottom_rightR bottom_rightC].

bbox1 = [700 350 820 775];
BW1 = false(size(RGB,1),size(RGB,2));
BW1(bbox1(1):bbox1(3),bbox1(2):bbox1(4)) = true;

Задайте начальные области seed или "каракули" для фона.

bbox2 = [1230 90 1420 1000];  
BW2 = false(size(RGB,1),size(RGB,2));
BW2(bbox2(1):bbox2(3),bbox2(2):bbox2(4)) = true;

Отобразите области seed. Передний план находится в красном, и фон является синим.

visboundaries(BW1,'Color','r');
visboundaries(BW2,'Color','b');

Сегментируйте изображение.

[L,P] = imseggeodesic(RGB,BW1,BW2);

Отображение результатов.

figure
imshow(label2rgb(L),'InitialMagnification', 50)
title('Segmented image')

  
figure
imshow(P(:,:,1),'InitialMagnification', 50)
title('Probability that a pixel belongs to the foreground')

Считайте изображение в рабочую область и отобразите его.

RGB = imread('yellowlily.jpg'); 
imshow(RGB,'InitialMagnification', 50)
hold on

Создает каракули для трех областей. Обратите внимание на то, что можно задать каракули в интерактивном режиме с помощью инструментов, таких как roipoly, imfreehand, imrect, impoly, и imellipse. Область 1 является желтым цветком. Область 2 является зелеными листами. Область 3 является фоном.

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.

visboundaries(BW1,'Color','r');
visboundaries(BW2,'Color','g');
visboundaries(BW3,'Color','b');

Сегментируйте изображение.

[L,P] = imseggeodesic(RGB,BW1,BW2,BW3, 'AdaptiveChannelWeighting', true);

Отображение результатов.

figure
imshow(label2rgb(L),'InitialMagnification', 50)
title('Segmented image with three regions')

  
figure
imshow(P(:,:,2),'InitialMagnification', 50)
title('Probability that a pixel belongs to region/label 2')

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

свернуть все

Отобразите, чтобы быть сегментированными, заданными как изображение RGB. imseggeodesic преобразует изображение входа RGB в цветовое пространство YCbCr прежде, чем выполнить сегментацию.

Пример: RGB = imread('peppers.png');

Типы данных: double | uint8 | uint16

Изображение Scribble, заданное как логическая матрица. BW1 должен иметь одинаковое число строк и столбцы как входное изображение RGB. Чтобы задать каракули в интерактивном режиме, используйте roipoly, imfreehand, imrect, impoly, или imellipse.

Пример: bbox1 = [700 350 820 775]; BW1 = false(size(RGB,1),size(RGB,2)); BW1(bbox1(1):bbox1(3),bbox1(2):bbox1(4)) = true;

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

Изображение Scribble, заданное как логическая матрица. BW2 должен иметь одинаковое число строк и столбцы как входное изображение RGB. Чтобы задать каракули в интерактивном режиме, используйте roipoly, imfreehand, imrect, impoly, или imellipse.

Пример: bbox2 = [1230 90 1420 1000]; BW2 = false(size(RGB,1),size(RGB,2)); BW2(bbox2(1):bbox2(3),bbox2(2):bbox2(4)) = true;

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

Изображение Scribble, заданное как логическая матрица. BW3 должен иметь одинаковое число строк и столбцы как входное изображение RGB. Чтобы задать каракули в интерактивном режиме, используйте roipoly, imfreehand, imrect, impoly, или imellipse.

Пример: bbox3 = [20 1320 480 200; 1010 290 180 240]; BW3 = false(size(RGB,1),size(RGB,2)); BW3(bbox3(1,2):bbox3(1,2)+bbox3(1,4),bbox3(1,1):bbox3(1,1)+bbox3(1,3)) = true;

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

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: [L,P] = imseggeodesic(RGB,BW1,BW2,BW3,'AdaptiveChannelWeighting',true);

Используйте адаптивное взвешивание канала, заданное как логический скаляр. Когда true, imseggeodesic взвешивает каналы, пропорциональные на сумму дискриминационной информации, которую они имеют, который полезен для сегментации (на основе каракулей, обеспеченных, как введено). Когда false (значение по умолчанию), imseggeodesic веса все каналы одинаково.

Пример: [L,P] = imseggeodesic(RGB,BW1,BW2,BW3, 'AdaptiveChannelWeighting', true);

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

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

свернуть все

Матрица метки, возвращенная как матрица неотрицательных целых чисел. Пиксели пометили 0 фон, и пиксели пометили 1 идентифицируйте сегментированную область. Пиксели пометили 2 идентифицируйте другую сегментированную область в trinary сегментации.

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

Вероятность пиксель принадлежит помеченной области, заданной как M-by-N-by-2 матрица для бинарной сегментации или M-by-N-by-3 матрица для trinary сегментации. M и N являются количеством строк и столбцов во входном изображении. P(i,j,k) задает вероятность пикселя в местоположении (i,j) принадлежность метке k.

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

Советы

  • Каракули для двух (или три) области не должны перекрывать друг друга. Каждая матрица каракулей (BW1, BW2, и BW3) должно быть непустым, то есть, должен быть по крайней мере один пиксель (несмотря на то, что больше лучше) отмечен как логическая истина в каждых из каракулей.

Алгоритмы

imseggeodesic использует геодезический основанный на расстоянии цветной алгоритм сегментации (похожий на [1]).

Ссылки

[1] А. Протир и Г. Сэпиро, Интерактивная Сегментация Изображений через Адаптивные Взвешенные Расстояния, Транзакции IEEE на Обработке изображений. Объем 16, Выпуск 4, 2007.

Представленный в R2015a

Для просмотра документации необходимо авторизоваться на сайте