lazysnapping

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

Описание

пример

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

пример

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

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

Примеры

свернуть все

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

RGB = imread('peppers.png');
imshow(RGB)

Figure contains an axes object. The axes object contains an object of type image.

Создайте матрицу метки.

L = superpixels(RGB,500);

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

f = drawrectangle(gca,'Position',[100 128 350 150],'Color','g');

Figure contains an axes object. The axes object contains 2 objects of type image, images.roi.rectangle.

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

foreground = createMask(f,RGB);

Задайте фоновые ROI. Чтобы улучшить точность сегментации, этот пример задает два прямоугольных ROI в различных областях фона.

b1 = drawrectangle(gca,'Position',[130 30 40 30],'Color','r');
b2 = drawrectangle(gca,'Position',[6 368 500 10],'Color','r');

Figure contains an axes object. The axes object contains 4 objects of type image, images.roi.rectangle.

Создайте маску, которая содержит фоновые пиксели. Эта маска является объединением двух фоновых ROI.

background = createMask(b1,RGB) + createMask(b2,RGB);

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

BW = lazysnapping(RGB,L,foreground,background);

Визуализируйте результат сегментации путем выделения переднего плана зеленого цвета.

imshow(labeloverlay(RGB,BW,'Colormap',[0 1 0]))

Figure contains an axes object. The axes object contains an object of type image.

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

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

Figure contains an axes object. The axes object contains an object of type image.

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

RGB = imread('peppers.png');
imshow(RGB)

Figure contains an axes object. The axes object contains an object of type image.

Создайте матрицу метки.

L = superpixels(RGB,500);

Задайте x-и y-координаты пикселей на переднем плане.

foregroundX = [34 114 195 259 392 467 483];
foregroundY = [298 140 135 200 205 283 104];

Преобразуйте координаты в линейные индексы. sub2ind берет (строка, столбец) координаты, так задайте входные параметры с y-координатами перед x-координатами.

foregroundInd = sub2ind(size(RGB),foregroundY,foregroundX);

Задайте x-и y-координаты пикселей в фоновом режиме.

backgroundX = [130 170];
backgroundY = [52 32];

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

backgroundInd = sub2ind(size(RGB),backgroundY,backgroundX);

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

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

Отобразите сегментированную маску. Приоритетными пикселями является true и фоновыми пикселями является false.

imshow(BW)

Figure contains an axes object. The axes object contains an object of type image.

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

imshow(labeloverlay(RGB,BW,'Colormap',[0 1 0]))

Figure contains an axes object. The axes object contains an object of type image.

Загрузите 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 contains an axes object. The axes object contains an object of type image.

 figure; 
 imshow(bseed)

Figure contains an axes object. The axes object contains an object of type image.

Поместите точки 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

Figure contains an axes object. The axes object contains an object of type patch.

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

свернуть все

Отобразите, чтобы сегментироваться в виде 2D шкалы полутонов, истинного цвета, или многоспектрального изображения или 3-D полутонового объема. Для double и single изображения, lazysnapping принимает область значений изображения, чтобы быть [0, 1]. Для uint16int16, и uint8 изображения, lazysnapping принимает область значений, чтобы быть полным спектром для типа определенных данных. Если значения не совпадают с ожидаемой областью значений на основе типа данных, то масштабируют изображение к ожидаемой области значений или настраивают EdgeWeightScaleFactor улучшить результаты.

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

Матрица метки входного изображения или объема в виде числового массива. Для 2D полутоновых изображений и 3-D полутоновых объемов, размера L должен соответствовать размер входа отображают A. Для цветных изображений и многоканальных изображений, L должен быть 2D массив, где первые две размерности соответствуют, первые две размерности входа отображают A.

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

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

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

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

Рисунок маски, который задает фон в виде логического массива. Для 2D полутоновых изображений и 3-D полутоновых объемов, размера backmask должен соответствовать размер входа отображают A. Для цветных изображений и многоканальных изображений, backmask должен быть 2D массив, где первые две размерности соответствуют, первые две размерности входа отображают A.

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

Линейный индекс пикселей в матрице метки в виде числового вектора.

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

Линейный индекс пикселей, которые задают фон в виде числового вектора.

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

Аргументы name-value

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

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

Возможность соединения связанных компонентов в виде разделенной запятой пары, состоящей из 'Connectivity' и одно из следующего: 4 или 8, для 2D изображений, и 6, 18, или 26 для 3-D изображений (объемы).

Типы данных: 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-средних значений. Эта реализация ленивого алгоритма моментального снимка не кластеризирует подобный передний план или фоновые пиксели. Чтобы улучшать производительность, сократите количество пикселей с подобными значениями, которые идентифицированы как передний план или фон.

  • Получить маски foremask или backmask в интерактивном режиме можно чертить ROI на изображении, затем создают маску из ROI при помощи createMask функция. Для получения дополнительной информации смотрите, Создают Формы ROI.

  • Получить пиксельные индексы foreind или backind в интерактивном режиме можно чертить Polyline Объект ROI при помощи drawpolyline функция. Получите x - и y - координаты вершин от Position свойство Polyline. Наконец, преобразуйте координаты в линейные индексы при помощи sub2ind функция. Обратите внимание на то, что sub2ind функционируйте использование (row, column) координаты вместо (x, y) координаты.

Ссылки

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

Введенный в R2017a