主要内容

imsegkmeans

基于K-means聚类的图像分割

描述

例子

l= imsegkmeans (k部分图片k通过执行k-means聚类和返回的分段标记输出l

例子

l中心) = imsegkmeans (k也返回星团质心位置,中心

l= imsegkmeans (k名称,值使用名称-值参数来控制k-means聚类算法的各个方面。

例子

全部折叠

将图像读入工作区。

我= imread (“cameraman.tif”);imshow (I)标题(原始图像的

图中包含一个轴对象。标题为“Original Image”的axis对象包含一个类型为Image的对象。

使用k-means聚类将图像分割为三个区域。

[L,中心]= imsegkmeans(我,3);B = labeloverlay(左);imshow (B)标题(“标记图像”

图中包含一个轴对象。标题为“图像”的axis对象包含一个类型为“图像”的对象。

将图像读入工作区。减小图像大小以使示例运行得更快。

RGB = imread (“kobi.png”);RGB = imresize (RGB, 0.5);imshow (RGB)

图中包含一个轴对象。axis对象包含一个image类型的对象。

利用k-means聚类将图像分割为两个区域。

L = imsegkmeans (RGB, 2);B = labeloverlay (RGB, L);imshow (B)标题(“标记图像”

图中包含一个轴对象。标题为“图像”的axis对象包含一个类型为“图像”的对象。

有几个像素标错了。示例的其余部分展示了如何通过补充每个像素的信息来改进k-means分割。

用每个像素附近的纹理信息补充图像。为了获得纹理信息,使用一组Gabor过滤器对图像的灰度版本进行过滤。

创建一组24个Gabor过滤器,覆盖6个波长和4个方向。

波长= 2.^(0:5)* 3;取向= 0:45:135;g =伽柏(波长、取向);

将图像转换为灰度。

我= im2gray (im2single (RGB));

使用Gabor过滤器过滤灰度图像。显示在一个蒙太奇的24过滤图像。

gabormag = imgaborfilt(我,g);蒙太奇(gabormag“大小”[4 - 6])

图中包含一个轴对象。axis对象包含一个image类型的对象。

平滑每个过滤图像,以消除局部变化。显示平滑的图像在蒙太奇。

i = 1:长度(g) sigma = 0.5*g(i).波长;gabormag(:,:我)= imgaussfilt (gabormag(:,:我),3 *σ);结束蒙太奇(gabormag“大小”[4 - 6])

图中包含一个轴对象。axis对象包含一个image类型的对象。

用空间位置信息补充每个像素的信息。这些额外的信息使得k-means聚类算法更倾向于在空间上接近的分组。

得到了xy输入图像中所有像素的坐标。

nrows =大小(RGB, 1);ncols =大小(RGB, 2);(X, Y) = meshgrid (1: ncols, 1: nrows);

连接每个像素的强度信息、邻域纹理信息和空间信息。

对于本例,特征集包括强度图像而不是原始的彩色图像,RGB.颜色信息从特征集中被省略了,因为狗皮毛的黄色与瓷砖的黄色相类似。颜色通道不能提供足够清晰的关于狗和背景的信息来进行清晰的分割。

featureSet =猫(3我gabormag, X, Y);

利用补充的特征集,利用k-means聚类将图像分割为两个区域。

L2 = imsegkmeans (featureSet 2“NormalizeInput”,真正的);C = labeloverlay (RGB, L2);imshow (C)标题(“带有附加像素信息的标签图像”

图中包含一个轴对象。标题为“带有附加像素信息的图像”的轴对象包含一个类型为“图像”的对象。

将图像读入工作区。

我= imread (“peppers.png”);imshow (I)标题(原始图像的

图中包含一个轴对象。标题为“Original Image”的axis对象包含一个类型为Image的对象。

利用k-means聚类将图像分割为50个区域。返回标签矩阵l以及星系团的质心位置C.群集中心位置是50种颜色中每一种的RGB值。

[L, C] = imsegkmeans(我,50);

将标签矩阵转换为RGB图像。指定簇的质心位置,C,作为新图像的彩色地图。

J = label2rgb (L, im2double (C));

显示量化后的图像。

imshow (J)标题(“颜色量化图像”

图中包含一个轴对象。标题为Color Quantized Image的axis对象包含一个类型为Image的对象。

将原始和压缩图像写入文件。量化后的图像文件大约是原始图像文件大小的四分之一。

imwrite(我“peppersOriginal.png”);imwrite (J,“peppersQuantized.png”);

输入参数

全部折叠

图像分割,指定为二维灰度图像、二维彩色图像或二维多光谱图像。

数据类型:|int8|int16|uint8|uint16

要创建的集群数量,指定为正整数。

名称-值参数

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“NumAttempts”,5

将输入数据归一化为零平均值和单位方差,指定为逗号分隔对组成“NormalizeInput”数字的或逻辑的1真正的)或0.如果您指定真正的,然后imsegkmeans分别对输入的每个通道进行归一化。

使用新的初始聚类质心位置重复聚类过程的次数,指定为由逗号分隔的对组成“NumAttempts”一个正整数。

最大迭代次数,由逗号分隔对组成“MaxIterations”一个正整数。

精度阈值,指定为逗号分隔对组成“阈值”和一个正数。在连续的迭代中,当每个聚类中心的移动都小于阈值时,算法停止。

输出参数

全部折叠

标记矩阵,指定为一个正整数矩阵。具有标签1的像素属于第一个聚类,标签2属于第二个聚类,以此类推k集群。l和图像的前两个维度相同吗.的类l取决于集群的数量。

类的l 数量的集群
“uint8” k < = 255
“uint16” 256 <= k <= 65535
“uint32” 65536 <= k <= 2^32-1
“双” < = 2 ^ 32 k

群集中心位置,以大小的数字矩阵返回k——- - - - - -c,在那里k簇数是和吗c为通道的数量。中心和图像是同一类吗

提示

  • 该功能产生可重复的结果。给定相同的输入参数,输出不会在多次运行中发生变化。

参考文献

[1]亚瑟,D.和S.瓦西里维茨基。"k-means++:小心播种的好处"SODA '07:第十八届ACM-SIAM年度离散算法研讨会论文集.新奥尔良,洛杉矶,2007年1月,第1027-1035页。

介绍了R2018b