imsegkmeans
基于k均值聚类的图像分割
描述
例子
用k均值聚类方法分割灰度图像
将图像读入工作区。
我= imread (“cameraman.tif”);imshow (I)标题(的“原始图像”)
使用k-均值聚类将图像分割为三个区域。
[L,中心]= imsegkmeans(我,3);B = labeloverlay(左);imshow (B)标题(“标记图像”)
利用纹理和空间信息改进k均值分割
将图像读入工作区。减小图像大小以使示例运行得更快。
RGB = imread (“kobi.png”);RGB = imresize (RGB, 0.5);imshow (RGB)
使用k-均值聚类将图像分割为两个区域。
L = imsegkmeans (RGB, 2);B = labeloverlay (RGB, L);imshow (B)标题(“标记图像”)
有几个像素标错了。该示例的其余部分展示了如何通过补充关于每个像素的信息来改进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])
平滑每个经过过滤的图像以去除局部变化。以蒙太奇的方式显示平滑的图像。
为i = 1:长度(g) sigma = 0.5*g(i).波长;gabormag(:,:我)= imgaussfilt (gabormag(:,:我),3 *σ);结束蒙太奇(gabormag“大小”[4 - 6])
用空间位置信息补充每个像素的信息。这些额外的信息使得k-means聚类算法更倾向于在空间上紧密结合的分组。
得到了x而且y输入图像中所有像素的坐标。
nrows =大小(RGB, 1);ncols =大小(RGB, 2);(X, Y) = meshgrid (1: ncols, 1: nrows);
连接每个像素的强度信息、邻域纹理信息和空间信息。
对于本例,特征集包括强度图像我
而不是原来的彩色图像,RGB
.颜色信息从特征集中被省略,因为狗毛的黄色颜色与瓷砖的黄色色调相似。颜色通道不能提供关于狗和背景的足够明显的信息来进行清晰的分割。
featureSet =猫(3我gabormag, X, Y);
利用补充特征集的k-均值聚类将图像分割为两个区域。
L2 = imsegkmeans (featureSet 2“NormalizeInput”,真正的);C = labeloverlay (RGB, L2);imshow (C)标题(“附加像素信息的标签图像”)
使用k均值分割压缩彩色图像
将图像读入工作区。
我= imread (“peppers.png”);imshow (I)标题(的“原始图像”)
利用k-均值聚类将图像分割为50个区域。返回标签矩阵l
和聚类质心的位置C
.群集质心位置是50种颜色中每一种的RGB值。
[L, C] = imsegkmeans(我,50);
将标签矩阵转换为RGB图像。指定聚类质心位置,C
,作为新图像的色彩图。
J = label2rgb (L, im2double (C));
显示量化图像。
imshow (J)标题(“颜色量化图像”)
将原始图像和压缩图像写入文件。量化后的图像文件大约是原始图像文件大小的四分之一。
imwrite(我“peppersOriginal.png”);imwrite (J,“peppersQuantized.png”);
利用可选颜色空间改进k均值分割
将图像读入工作区。图像显示组织被血红素和伊红染色(H&E)。这种染色方法有助于病理学家区分染成蓝紫色和粉红色的组织类型。
他= imread (“hestain.png”);imshow(他)、标题(“他走时形象”);文本(大小(他,2),大小(他,1)+ 15,...“图片由约翰霍普金斯大学的Alan Partin提供”,...“字形大小”7“HorizontalAlignment”,“正确”);
方法将图像转换为L*a*b*颜色空间rgb2lab
函数。L*a*b*颜色空间将图像亮度和颜色分开。这使它更容易分割区域的颜色,独立于亮度。
lab_he = rgb2lab(他);
若要仅使用颜色信息分割图像,请将图像限制为中的a*和b*值lab_he
.将图像转换为数据类型单
使用imsegkmeans
.使用imsegkmeans
函数将图像分割为三个区域。
ab = lab_he (:,: 2:3);ab = im2single (ab);numColors = 3;L2 = imsegkmeans (ab, numColors);
将标签图像显示为原始图像上的覆盖层。标签图像将白色、蓝紫色和粉色染色的组织区域分开。
B2 = labeloverlay (L2);imshow (B2)标题(“标记图像* b *”)
输入参数
我
- - - - - -图像部分
二维灰度图像|二维彩色图像|二维多光谱图像
要分割的图像,指定为二维灰度图像、二维彩色图像或二维多光谱图像。如果原始图像是数据类型的双
,将图像转换为数据类型单
通过使用im2single
函数。
数据类型:单
|int8
|int16
|uint8
|uint16
k
- - - - - -数量的集群
正整数
要创建的集群数量,指定为正整数。
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
例子:imsegkmeans (k,我NumAttempts = 5)
重复聚类过程五次。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:imsegkmeans (k,我“NumAttempts”,5)
重复聚类过程五次。
NormalizeInput
- - - - - -正常输入数据
真正的
或1
(默认)|假
或0
将输入数据归一化为零均值和单位方差,指定为数字的或逻辑的1
(真正的
)或0
(假
).如果您指定真正的
,然后imsegkmeans
分别规范化输入的每个通道。
NumAttempts
- - - - - -重复聚类过程的次数
3.
(默认)|正整数
使用新的初始聚类质心位置重复聚类过程的次数,指定为正整数。
MaxIterations
- - - - - -最大迭代次数
One hundred.
(默认)|正整数
最大迭代次数,指定为正整数。
阈值
- - - - - -精度的阈值
1的军医
(默认)|正数
精度阈值,指定为正数。在连续迭代中,当每个聚类中心的移动小于阈值时,算法停止。
输出参数
提示
该函数产生可重复的结果。给定相同的输入参数,输出在多次运行时不会发生变化。
的
imsegkmeans
函数在所有支持的颜色空间中接受输入图像。使用不同的颜色空间会产生不同的效果。如果输入图像没有得到满意的结果,可以考虑尝试替代颜色空间。更多关于颜色空间的信息在MATLAB中®,请参阅理解颜色空间和颜色空间转换.对数据类型的图像执行k-means聚类
双
,将图像转换为数据类型单
通过使用im2single
函数。用于要求输入数据类型的应用程序双
,请参阅kmeans
(统计和机器学习工具箱)函数。
参考文献
[1]亚瑟,大卫和谢尔盖·瓦西里维茨基。《k - means++:谨慎播种的优势》在第18届离散算法ACM-SIAM年会论文集1027 - 35。苏打水' 07。美国:工业与应用数学学会,2007。
版本历史
介绍了R2018b
另请参阅
应用程序
功能
主题
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。