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]);

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

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

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

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

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

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

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

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

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

load mristack
V = mristack;

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

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

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

imshow(fseed)

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

imshow(bseed)

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

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

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

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

свернуть все

Введите изображение или объем в виде 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