exponenta event banner

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. The axes contains an object of type image.

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

L = superpixels(RGB,500);

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

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

Figure contains an axes. The axes 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. The axes 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. The axes contains an object of type image.

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

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

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

Чтение и отображение изображения.

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

Figure contains an axes. The axes 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. The axes contains an object of type image.

Отображение маски поверх исходного изображения с выделением пикселов переднего плана зеленым цветом.

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

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

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

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

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

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

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

 figure; 
 imshow(bseed)

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

Поместите начальные точки в пустую маску 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. The axes contains an object of type patch.

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

свернуть все

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

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

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

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

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

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

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

Образ маски, определяющий фон, заданный как логический массив. Для 2-D изображений в градациях серого и 3-D объемов в градациях серого размер backmask должен соответствовать размеру входного изображения A. Для цветных и многоканальных изображений: backmask должен быть массивом 2-D, где первые два размера совпадают с первыми двумя размерами входного изображения 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 должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

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

Связность подключенных компонентов, указанная как разделенная запятыми пара, состоящая из 'Connectivity' и одно из следующих: 4 или 8 для 2-D изображений и 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.

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

Совет

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

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

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

Ссылки

[1] Y. Li, S. Jian, C. Tang, H. Shum, Lazy Snapping In Proceedings from the 31 International Conference on Computer Graphics and Interactive Techniques, 2004.

Представлен в R2017a