Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

superpixels

图像的二维超像素过分割

说明

示例

[L,NumLabels] = superpixels(A,N) 计算二维灰度或 RGB 图像 A 的超像素。N 指定您要创建的超像素的数量。该函数返回 Ldouble 类型的标签矩阵)和 NumLabels(计算出的实际超像素数)。

superpixels 函数使用简单线性迭代聚类 (SLIC) 算法 [1]。此算法将像素划分为具有相似值的各个区域。在图像处理运算(如分割)中使用这些区域可以降低这些运算的复杂度。

[L,NumLabels] = superpixels(A,N,Name,Value) 使用用于控制分割的各个方面的名称-值对组参数计算图像 A 的超像素。

示例

全部折叠

将图像读入工作区。

A = imread('kobi.png');

计算图像的超像素。

[L,N] = superpixels(A,500);

在原始图像上叠加显示超像素的边界。

figure
BW = boundarymask(L);
imshow(imoverlay(A,BW,'cyan'),'InitialMagnification',67)

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

将输出图像中每个像素的颜色设置为所在超像素区域的 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
imshow(outputImage,'InitialMagnification',67)

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

输入参数

全部折叠

要分割的图像,指定为二维灰度图像或二维真彩色图像。对于 int16 数据,A 必须为灰度图像。当参数 isInputLabtrue 时,输入图像必须为数据类型 singledouble

数据类型: single | double | int16 | uint8 | uint16

所需的超像素数量,指定为正整数。

数据类型: 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);

超像素的形状,指定为数值标量。SLIC 算法的紧凑性参数控制超像素的形状。值越高,超像素的形状越规则,即越接近正方形。值越低,超像素会更好地贴合边界,使其形状不规则。允许的范围是 (0 Inf)。紧凑性的取值通常在 [1,20] 范围内。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

输入图像数据在 L*a*b* 颜色空间内,指定为 truefalse

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

用于计算超像素的算法,指定为下列值之一。superpixels 函数使用简单线性迭代聚类 (SLIC) 算法的两种变体。

意义

'slic0'

superpixels 在第一次迭代后使用 SLIC0 算法以自适应方式优化 'Compactness'。这是默认设置。

'slic'

'Compactness' 在聚类过程中保持不变。

数据类型: char | string

算法在聚类阶段使用的迭代次数,指定为正整数。对于大多数问题,没有必要调整此参数。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

输出参数

全部折叠

标签矩阵,以正整数数组形式返回。值 1 表示图像中的第一个超像素区域,2 表示第二个区域,依此类推。

数据类型: double

计算出的超像素的数量,以正整数形式返回。

数据类型: double

参考

[1] Radhakrishna Achanta, Appu Shaji, Kevin Smith, Aurelien Lucchi, Pascal Fua, and Sabine Susstrunk, SLIC Superpixels Compared to State-of-the-art Superpixel Methods. IEEE Transactions on Pattern Analysis and Machine Intelligence, Volume 34, Issue 11, pp. 2274-2282, May 2012

扩展功能

在 R2016a 中推出