使用Grabcut分割图像中的背景前景
clear all close all clc 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)使用Grabcut分割3-D图像
clear all close all clc load mristack V = mristack; %为初始前景和背景种子点创建一个二维蒙版。 seedLevel = 10; fseed = V(:,:,seedLevel) > 75; bseed = V(:,:,seedLevel) == 0; %显示前景和背景种子点。 imshow(fseed) imshow(bseed) %将种子点放入空的3D蒙版中。 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)))
L —标签矩阵 数值数组 标签矩阵,指定为数字数组。 ROI—感兴趣的区域 逻辑数组 感兴趣的区域,指定为逻辑数组。 定义关注区域的所有像素均等于true。 foremask—前景面具 逻辑数组 前景蒙版,指定为逻辑数组。 backmask—背景掩膜 逻辑数组 背景掩码,指定为逻辑数组。 foreind—前景中的像素的索引 矢量 前景中的像素索引,指定为线性索引的向量。 backind —背景中的像素的索引 矢量 背景中的像素索引,指定为线性索引的向量。 名称-值对参数 ‘Connectivity’—所连接组件的连通性 4 | 8 | 6 | 18 | 26 连接的组件的连接性,指定为下列值之一。 对于2D图像,默认连接为8,对于3D图像,默认连接为26。 ‘MaximumIterations’-最大迭代次数 5(默认)| 正标量 该算法执行的最大迭代次数。 该算法可以在达到最大迭代次数之前收敛到解决方案。
对于双张和单张图像,抓取假定图像的范围为[0 1]。 对于uint16,int16和uint8图像,抓取会将范围假定为给定数据类型的完整范围。
对于灰度图像,L,前掩膜和后掩膜的大小必须与图像A的大小匹配。对于彩色和多通道图像,L,前掩膜和后掩膜的大小必须是二维数组,且前两个维度与 图像A的前两个维度。
