grabcut

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

Описание

пример

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(___,Name,Value) сегментирует изображение с помощью пар "имя-значение", чтобы управлять аспектами сегментации.

Примеры

свернуть все

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

RGB = imread('peppers.png');

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

L = superpixels(RGB,500);

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

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

roiPoints = h1.Position;
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)))

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

свернуть все

Введите изображение или объем в виде 2D полутонового изображения, 2D изображение истинного цвета или 3-D полутоновый объем. Только полутоновые изображения могут быть типом данных int16.

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

Матрица метки в виде числового массива.

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

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

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

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

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

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

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

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

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

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

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

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

Задайте дополнительные разделенные запятой пары Name,Value аргументы. 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]. Для uint16int16, и 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