imseggeodesic

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

Синтаксис

L = imseggeodesic(RGB,BW1,BW2)
L = imseggeodesic(RGB,BW1,BW2,BW3)
[L,P] = imseggeodesic(___)
[L,P] = imseggeodesic(___,Name,Value)

Описание

пример

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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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