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)

Цель состоит в том, чтобы сегментировать лепестки цветка. Задайте начальную область seed как прямоугольный ROI при помощи drawrectangle функция. Отобразите ROI красного цвета. Аргумент пары "имя-значение" 'Position' задает верхнюю левую координату, ширину и высоту ROI как векторный [xmin, ymin, width, height] с 4 элементами. Если вы хотите чертить прямоугольник в интерактивном режиме, то не используйте аргумент пары "имя-значение" 'Position'.

roiObject = drawrectangle(gca,'Position',[350 700 375 120],'Color','r');

Задайте начальные области seed для фона как прямоугольный ROI. Отобразите ROI синего цвета.

roiBackground = drawrectangle(gca,'Position',[90 1230 910 190],'Color','b');

Создайте маску для каждого ROI, в котором ROI является true и другими пикселями является false.

maskObject = createMask(roiObject);
maskBackground = createMask(roiBackground);

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

[L,P] = imseggeodesic(RGB,maskObject,maskBackground);

Отобразите сегментированные метки.

imshow(label2rgb(L))
title('Segmented Labels')

Отобразите сегментированные метки по оригинальному изображению.

imshow(labeloverlay(RGB,L))
title('Labels Overlaid on Original Image')

Считайте и отобразите изображение.

RGB = imread('yellowlily.jpg'); 
imshow(RGB)

Первая область состоит из желтых цветочных лепестков. Задайте начальную область seed как прямоугольный ROI при помощи drawrectangle функция. Чертите ROI желтого цвета. Аргумент пары "имя-значение" 'Position' задает верхнюю левую координату, ширину и высоту ROI как векторный [xmin, ymin, width, height] с 4 элементами. Если вы хотите чертить прямоугольник в интерактивном режиме, то не используйте аргумент пары "имя-значение" 'Position'.

r1 = drawrectangle(gca,'Position',[350 700 425 120],'Color','y');

Вторая область состоит из зеленых листов. Задайте область seed как прямоугольный ROI и чертите ROI красного цвета.

r2 = drawrectangle(gca,'Position',[800 1124 120 230],'Color','r');

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

r3 = drawrectangle(gca,'Position',[1010 290 180 240],'Color','b');

Создайте маску для каждого ROI, в котором ROI является true и другими пикселями является false.

mask1 = createMask(r1);
mask2 = createMask(r2);
mask3 = createMask(r3);

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

[L,P] = imseggeodesic(RGB,mask1,mask2,mask3,'AdaptiveChannelWeighting',true);

Отобразите сегментированные метки по оригинальному изображению.

imshow(labeloverlay(RGB,L))
title('Segmented Image with Three Regions')

Правый нижний угол изображения неправильно классифицируется как область 2 (листы). Добавьте другой фоновый ROI.

r4 = drawrectangle(gca,'Position',[20 1320 480 200],'Color','b');

mask4 = createMask(r4);
maskBackground = mask3 + mask4;

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

[L,P] = imseggeodesic(RGB,mask1,mask2,maskBackground,'AdaptiveChannelWeighting',true);
imshow(labeloverlay(RGB,L))
title('Refined Segmented Image with Three Regions')

Отобразите вероятность, что каждый пиксель, принадлежит каждой метке.

montage(P,'Size',[1 3])
title('Probability That Each Pixel Belongs to Each Label')

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

свернуть все

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

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

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

Изображение Scribble для первой области в виде логической матрицы. BW1 должен иметь одинаковое число строк и столбцы как входное изображение RGB. Чтобы создать каракули в интерактивном режиме, сначала чертите ROI с помощью функций, таких как drawcircle, drawfreehand, drawpolygon, или drawrectangle. Затем создайте маску из ROI с помощью createMask.

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

Изображение Scribble для второй области в виде логической матрицы. BW2 должен иметь одинаковое число строк и столбцы как входное изображение RGB. Чтобы создать каракули в интерактивном режиме, сначала чертите ROI с помощью функций, таких как drawcircle, drawfreehand, drawpolygon, или drawrectangle. Затем создайте маску из ROI с помощью createMask.

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

Изображение Scribble для третьей области в виде логической матрицы. BW3 должен иметь одинаковое число строк и столбцы как входное изображение RGB. Чтобы создать каракули в интерактивном режиме, сначала чертите ROI с помощью функций, таких как drawcircle, drawfreehand, drawpolygon, или drawrectangle. Затем создайте маску из ROI с помощью createMask.

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

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

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

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

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

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

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

свернуть все

Матрица метки, возвращенная как матрица неотрицательных целых чисел. Пиксели пометили 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) должно быть непустым, то есть, должен быть по крайней мере один пиксель (несмотря на то, что больше лучше) отмечен как логический true в каждых из каракулей.

Алгоритмы

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

Ссылки

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

Смотрите также

| | |

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