Main Content

superpixels

图像的二维超像素过分割

说明

[L,numLabels] = superpixels(A,N) 计算二维灰度或 RGB 图像 A 的超像素。N 指定您要创建的超像素的数量。该函数返回标签矩阵 L 和计算出的实际超像素数 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 object. The hidden axes object 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 object. The hidden axes object 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

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量后,但对各个参量对组的顺序没有要求。

示例: B = superpixels(A,100,NumIterations=20); 执行二十次迭代。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: B = superpixels(A,100,"NumIterations",20);

超像素的形状,指定为正数。SLIC 算法的紧凑性参数控制超像素的形状。值越高,超像素的形状越规则,即越接近正方形。值越低,超像素会更好地贴合边界,使其形状不规则。紧凑性的取值通常在 [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 中推出

全部展开