语法
[L,NumLabels] = superpixels(A,N)
[L,NumLabels] = superpixels(A,N,Name,Value)
说明
[L,NumLabels] = superpixels(A,N)
%计算二维灰度或 RGB 图像 A 的超像素(期望的超像素数量)。
%N 指定要创建的超像素的数量。
%该函数返回 L(double 类型的标签矩阵)和 NumLabels(计算出的实际超像素数)。
[L,NumLabels] = superpixels(A,N,Name,Value)
%使用用于控制分割的各个方面的名称-值对组参数计算图像 A 的超像素。
superpixels 函数使用简单线性迭代聚类 (SLIC) 算法 。此算法将像素划分为具有相似值的各个区域。在图像处理运算(如分割)中使用这些区域可以降低这些运算的复杂度。
示例
计算输入RGB图像的超像素
%将图像读入工作区
A = imread('kobi.png');
%计算图像的超像素
[L,N] = superpixels(A,500);
%在原始图像上叠加显示超像素的边界
figure(1)
BW = boundarymask(L);
imshow(imoverlay(A,BW,'cyan'),'InitialMagnification',67)
%将输出图像中每个像素的颜色设置为所在超像素区域的 RGB 均值颜色
outputImage = zeros(size(A),'like',A);
idx = label2idx(L);
numRows = size(A,1);
numCols = size(A,2);
for labelVal = 1:N
redIdx = idx{labelVal};
greenIdx = idx{labelVal}+numRows*numCols;
blueIdx = idx{labelVal}+2*numRows*numCols;
outputImage(redIdx) = mean(A(redIdx));
outputImage(greenIdx) = mean(A(greenIdx));
outputImage(blueIdx) = mean(A(blueIdx));
end
figure(2)
imshow(outputImage,'InitialMagnification',67)
输入参数
A :要分割的图像
要分割的图像,指定为二维灰度图像或二维真彩色图像。对于 int16 数据,A 必须为灰度图像。当参数 isInputLab 是 true 时,输入图像必须为数据类型 single 或 double。
A的数据类型:single | double | int16 | uint8 | uint16
N:期望的超像素数量
所需的超像素数量,指定为正整数。
N的数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
名称-值对组参数
指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,…,NameN,ValueN。
比如:
B = superpixels(A,100,'NumIterations', 20);
%将图像A分割成100个超像素,迭代次数为20次
常见的name参数:
(1)‘Compactness’
超像素的形状,指定为数值标量。SLIC 算法的紧凑性参数控制超像素的形状。值越高,超像素的形状越规则,即越接近正方形。值越低,超像素会更好地贴合边界,使其形状不规则。允许的范围是 (0 Inf)。紧凑性的取值通常在 [1,20] 范围内。其默认值为10。
Compactness对应的值(value)的数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
(2)‘IsInputLab’
输入图像数据在 Lab* 颜色空间内,指定为 true 或 false。默认为false。
'IsInputLab’对应的值(value)的数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
(3)‘Method’
用于计算超像素的算法,指定为下列值之一。superpixels 函数使用简单线性迭代聚类 (SLIC) 算法的两种变体。
值 | 意义 |
---|---|
‘slic0’ | superpixels 在第一次迭代后使用 SLIC0 算法以自适应方式优化 ‘Compactness’。这是默认设置。 |
‘slic’ | ‘Compactness’ 在聚类过程中保持不变。 |
'Method’对应的值(value)的数据类型: char | string
(4)‘NumIterations’
算法在聚类阶段使用的迭代次数,指定为正整数(默认为10)。对于大多数问题,没有必要调整此参数。
'NumIterations’对应的值(value)的数据类型:single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
输出参数
L:标签矩阵,以正整数数组形式返回。值 1 表示图像中的第一个超像素区域,2 表示第二个区域,依此类推。
数据类型: double
NumLabels:计算出的超像素的数量,以正整数形式返回。
数据类型: double