grabcut

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

Синтаксис

BW = grabcut(A,L,ROI)
BW = grabcut(A,L,ROI,foremask,backmask)
BW = grabcut(A,L,ROI,foreind,backind)
BW = grabcut(V,___)
BW = grabcut(___,Name,Value)

Описание

пример

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

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

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

пример

BW = grabcut(V,___) сегментирует объем V на передний план и фоновые области памяти.

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

Примеры

свернуть все

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

RGB = imread('peppers.png');

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

L = superpixels(RGB,500);

Задайте видимую область и создайте рисунок маски.

figure
imshow(RGB)
h1 = impoly(gca,[72,105; 1,231; 0,366; 104,359;...
        394,307; 518,343; 510,39; 149,72]);

roiPoints = getPosition(h1);
roi = poly2mask(roiPoints(:,1),roiPoints(:,2),size(L,1),size(L,2));

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

BW = grabcut(RGB,L,roi);
figure
imshow(BW)

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

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

Загрузите 3-D объемные данные.

load mristack
V = mristack;

Создайте 2D маску для начального переднего плана и фоновых точек seed.

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

Отобразите передний план и фоновые точки seed.

imshow(fseed)

imshow(bseed)

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

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

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

roi = false(size(V));
roi(10:end-10,10:end-10,:) = true;

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

L = superpixels3(V,500);

Выполните GrabCut.

bw = grabcut(V,L,roi,fmask,bmask);

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

montage(reshape(bw,size(V)))

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

свернуть все

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

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

Введите объем, заданный как действительный, конечный, неразреженный, 3-D числовой массив.

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

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

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

Видимая область, заданная как логический массив, где все пиксели, которые задают видимую область, равны true.

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

Приоритетная маска, заданная как логический массив.

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

Фоновая маска, заданная как логический массив.

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

Индексы пикселей на переднем плане, заданном как вектор линейных индексов.

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

Индексы пикселей в фоне, заданном как вектор линейных индексов.

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

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

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

Пример: BW = grabcut(A,L,ROI,'Connectivity',4)

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

Значение

Значение

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

4

Связанное с 4 окружение

Текущий пиксель отображают серым.

8

Связанное с 8 окружение

Текущий пиксель отображают серым.

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

6

Связанное с 6 окружение

Текущий пиксель является центром куба.

18

Связанное с 18 окружение

Текущий пиксель является центром куба.

26

Связанное с 26 окружение

Текущий пиксель является центром куба.

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

Максимальное количество итераций выполняется алгоритмом. Алгоритм может сходиться к решению прежде, чем достигнуть максимального количества итераций.

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

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

свернуть все

Выходное изображение, возвращенное как двухуровневое изображение тот же размер как матрица метки L.

Советы

  • Для double и изображений single, grabcut принимает область значений изображения, чтобы быть [0 1]. Для uint16, int16 и изображений uint8, grabcut принимает область значений, чтобы быть полным спектром для типа определенных данных.

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

Алгоритмы

  • Алгоритм обрабатывает все подобласти полностью или пространственно вне маски ROI как принадлежащий фону. Чтобы получить оптимальную сегментацию, убедитесь, что объект, который будет сегментирован, полностью содержится в ROI, окруженном небольшим количеством фоновых пикселей.

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

  • Алгоритм принимает, что все подобласти вне видимой области принадлежат фону. Отмечание одной из этих подобластей как принадлежащий переднему плану или фоновой маске не имеет никакого эффекта на получившуюся сегментацию.

Ссылки

[1] Rother, C., В. Кольмогоров и А. Блэйк. "GrabCut - Интерактивная Приоритетная Экстракция с помощью Выполненных с помощью итераций Сокращений Графика". Транзакции ACM на Графике (SIGGRAPH). Издание 23, Номер 3, 2004, стр 309–314.

Введенный в R2018a

Для просмотра документации необходимо авторизоваться на сайте