MATLAB superpixels函数(图像的二维超像素过分割)

语法

[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

猜你喜欢

转载自blog.csdn.net/qq_46068864/article/details/111099052