lazysnapping

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

Синтаксис

BW = lazysnapping(I,L,foremask,backmask)
BW = lazysnapping(I,L,foreind,backind)
BW = lazysnapping(___,Name,Value)

Описание

пример

BW = lazysnapping(I,L,foremask,backmask) сегментирует изображение или объем I в передний план и фоновые области памяти с помощью ленивого моментального снимка. Матрица метки L задает подобласти изображения. foremask и backmask являются масками, определяющими пиксели в изображении как передний план и фон, соответственно.

BW = lazysnapping(I,L,foreind,backind) сегментирует изображение или объем I в передний план и фоновые области памяти. foreind и backind задают линейные индексы пикселей в изображении, отмеченном как передний план и фон, соответственно.

BW = lazysnapping(___,Name,Value) сегментирует изображение или объем с помощью пар "имя-значение", чтобы управлять аспектами сегментации.

Примеры

свернуть все

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

RGB = imread('peppers.png');

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

figure; 
imshow(RGB)
h1 = impoly(gca,[34,298;114,140;195,135;...
    259,200;392,205;467,283;483,104],'Closed',false);

Преобразуйте местоположения в линейные индексы.

foresub = getPosition(h1);
foregroundInd = sub2ind(size(RGB),foresub(:,2),foresub(:,1));

Отметьте местоположения на изображении как фон.

figure; 
imshow(RGB)
h2 = impoly(gca,[130,52;170,32],'Closed',false);

Преобразуйте местоположения в линейные индексы.

backsub = getPosition(h2);
backgroundInd = sub2ind(size(RGB),backsub(:,2),backsub(:,1));

Сгенерируйте матрицу метки.

L = superpixels(RGB,500);

Выполните ленивый моментальный снимок.

BW = lazysnapping(RGB,L,foregroundInd,backgroundInd);

Создайте замаскированное изображение.

maskedImage = RGB;
maskedImage(repmat(~BW,[1 1 3])) = 0;
figure; 
imshow(maskedImage)

Загрузите 3-D объемное изображение в рабочую область.

D = load('mri.mat');
V  = squeeze(D.D);  

Создайте 2D маску, идентифицирующую начальный передний план и фоновые точки seed.

 seedLevel = 10;
 fseed = V(:,:,seedLevel) > 75;
 bseed = V(:,:,seedLevel) == 0;
 figure; 
 imshow(fseed)

 figure; 
 imshow(bseed)

Поместите точки seed в пустую 3-D маску.

fmask = zeros(size(V));
bmask = fmask;
fmask(:,:,seedLevel) = fseed;
bmask(:,:,seedLevel) = bseed;

Сгенерируйте 3-D матрицу метки.

 L = superpixels3(V,500);

Сегментируйте изображение на передний план и фон с помощью Ленивого Моментального снимка.

bw = lazysnapping(V,L,fmask,bmask);

Отобразите 3-D сегментированное изображение.

figure;
p = patch(isosurface(double(bw)));
p.FaceColor = 'red';
p.EdgeColor = 'none';
daspect([1 1 27/128]);
camlight; lighting phong

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

свернуть все

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

Тип изображенияФормат данных
2D полутоновое изображение2D матрица размера h-by-w
2D цветное изображениеТрехмерный массив размера h-by-w-by-3
2D многоспектральное изображение с каналами cТрехмерный массив размера h-by-w-by-c
3-D объемное полутоновое изображение с глубиной dТрехмерный массив размера h-by-w-by-d

lazysnapping ожидает, что пиксельные значения типа данных double и single будут в области значений [0, 1]. Можно использовать функцию rescale, чтобы настроить пиксельные значения к ожидаемой области значений. lazysnapping ожидает, что пиксельные значения типа данных uint16, int16 и uint8 будут полным спектром для типа определенных данных. Если значения не совпадают с ожидаемой областью значений, масштабируют изображение к ожидаемой области значений или настраивают EdgeWeightScaleFactor, чтобы улучшить результаты.

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

Матрица метки входного изображения или объема, заданного как числовой массив. Для 2D изображений L является 2D массивом размера h-by-w. Для 3-D объемов L является трехмерным массивом размера h-by-w-by-d.

Не отмечайте данную подобласть матрицы метки как принадлежащий и приоритетной маске и фоновой маске. Если область матрицы метки содержит пиксели, принадлежащие и приоритетной маске и фоновой маске, то сегменты lazysnapping область как фон.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

Рисунок маски, который задает передний план, заданный как логический массив. Для 2D изображений foremask является 2D массивом размера h-by-w. Для 3-D объемов foremask является трехмерным массивом размера h-by-w-by-d.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

Рисунок маски, который задает фон, заданный как логический массив. Для 2D изображений backmask является 2D массивом размера h-by-w. Для 3-D объемов backmask является трехмерным массивом размера h-by-w-by-d.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

Линейный индекс пикселей в матрице метки, заданной как вектор положительных целых чисел. Можно использовать инструмент для рисования ROI, такой как drawpolyline, чтобы выбрать точки на переднем плане. Затем преобразуйте координаты точек к линейным индексам с помощью sub2ind. Если координаты являются значениями нецелого числа, то вокруг значений прежде, чем преобразовать в линейные индексы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

Линейный индекс пикселей, которые задают фон, заданный как вектор положительных целых чисел. Можно использовать инструмент для рисования ROI, такой как drawpolyline, чтобы выбрать точки в фоновом режиме. Затем преобразуйте координаты точек к линейным индексам с помощью sub2ind. Если координаты являются значениями нецелого числа, то вокруг значений прежде, чем преобразовать в линейные индексы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

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

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

Пример: 'Connectivity',18

Возможность соединения связанных компонентов, заданных как одно из значений в этой таблице. Возможностью соединения по умолчанию является 8 для 2D изображений и 26 для 3-D изображений.

Значение

Значение

Двумерные возможности соединения

4

Пиксели соединяются, если их ребра затрагивают. Два смежных пикселя являются частью того же объекта, если они и включены и соединяются вдоль горизонтального или вертикального направления.

8

Пиксели соединяются, если их ребра или углы затрагивают. Два смежных пикселя являются частью того же объекта, если они и включены и соединяются вдоль горизонтали, вертикального, или диагонального направления.

3D возможности соединения

6

Пиксели соединяются, если их поверхности затрагивают. Два смежных пикселя являются частью того же объекта, если они и включены и соединяются в:

  • Одно из этих направлений: в, левый, правильный, и вниз

18

Пиксели соединяются, если их поверхности или ребра затрагивают. Два смежных пикселя являются частью того же объекта, если они и включены и соединяются в

  • Одно из этих направлений: в, левый, правильный, и вниз

  • Комбинация двух направлений, таких как право вниз или в -

26

Пиксели соединяются, если их поверхности, ребра или углы затрагивают. Два смежных пикселя являются частью того же объекта, если они и включены и соединяются в

  • Одно из этих направлений: в, левый, правильный, и вниз

  • Комбинация двух направлений, таких как право вниз или в -

  • Комбинация трех направлений, такой как "в праве" или "в сниженном"

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Масштабный коэффициент для веса ребра между подобластями матрицы метки, заданной как пара, разделенная запятой, состоящая из 'EdgeWeightScaleFactor' и положительной скалярной величины. Типичные значения располагаются от [10, 1000]. Увеличение этого повышения стоимости вероятность, что метки lazysnapping, граничащие с подобластями вместе или как передний план или как фон.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

свернуть все

Сегментированное изображение, возвращенное как числовой массив, одного размера как матрица метки, L.

Алгоритмы

Ленивый алгоритм Моментального снимка, разработанный Ли и др. передний план кластеров и фоновые значения с помощью K-среднего метода. Эта реализация Ленивого алгоритма Моментального снимка не кластеризирует подобный передний план или фоновые пиксели. Чтобы улучшать производительность, сократите количество пикселей с подобными значениями, которые идентифицированы как передний план или фон.

Ссылки

[1] И. Ли, С. Цзянь, К. Тан, Х. Шум. Ленивый моментальный снимок. В продолжениях от 31-й международной конференции по вопросам компьютерной графики и интерактивных методов, 2004.

Введенный в R2017a