exponenta event banner

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;

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

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

Отображение начальных точек переднего и заднего плана.

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.

Поместите начальные точки в пустую маску 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);

Выполните команду «Захват».

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.

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

свернуть все

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

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

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

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

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

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

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

Типы данных: 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 для 2-D изображений и 26 для 3-D изображений.

Стоимость

Значение

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

4

4-подключенный район

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

8

8-подключенный район

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

Трехмерные связи

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 должны быть 2-D массивы с первыми двумя размерами, идентичными первым двум размерам изображения A.

Алгоритмы

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

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

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

Ссылки

[1] Ротер, К., В. Колмогоров и А. Блейк. «Захват выреза - интерактивное извлечение переднего плана с использованием итерируемых вырезов графика». Транзакции ACM на графике (SIGGRAPH). Том 23, номер 3, 2004, стр. 309-314.

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