文档帮助中心文档
基于K-means聚类的图像分割
l = imsegkmeans(i,k)
[L,中心]= imsegkmeans (I (k)
l = imsegkmeans(i,k,名称,值)
例子
l= imsegkmeans(我,k)部分图片我成k通过执行k-means聚类和返回的分段标记输出l.
l= imsegkmeans(我,k)
l
我
k
[l,中心) = imsegkmeans (我,k)还返回群集质心位置,中心.
[l,中心) = imsegkmeans (我,k)
中心
l= imsegkmeans(我,k,名称,价值)使用名称值参数来控制K-means群集算法的方面。
l= imsegkmeans(我,k,名称,价值)
名称,价值
全部收缩
将图像读入工作区。
我= imread('cameraman.tif');imshow(i)标题('原始图像')
使用k-means聚类将图像分割为三个区域。
[l,中心] = imsegkmeans(我,3);b = labeloverlay(i,l);imshow (B)标题('标记图像')
将图像读入工作区。减小图像大小以使示例运行得更快。
rgb = imread(“kobi.png”);RGB = imresize (RGB, 0.5);imshow (RGB)
将图像分成两个区域,使用k-means群集。
L = imsegkmeans (RGB, 2);B = labeloverlay (RGB, L);imshow (B)标题('标记图像')
几个像素误标定。该示例的其余部分示出了如何通过补充关于每个像素的信息来改进k均值分割。
用每个像素附近的纹理信息补充图像。为了获得纹理信息,使用一组Gabor过滤器对图像的灰度版本进行过滤。
创建一组24个Gabor滤波器,覆盖6个波长和4个方向。
波长= 2.^(0:5)* 3;取向= 0:45:135;g =伽柏(波长、取向);
将图像转换为灰度。
i = 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 = size(RGB,1);ncols =尺寸(RGB,2);[x,y] = meshgrid(1:ncols,1:nrows);
连接每个像素的强度信息,邻域纹理信息和空间信息。
对于本例,特征集包括强度图像我而不是原始彩色图像,RGB.从特征集中省略了颜色信息,因为狗皮毛的黄色类似于瓷砖的黄色色调。颜色通道不提供有关狗的有关截然不同的信息和背景以进行清洁分割。
RGB
featureSet =猫(3我gabormag, X, Y);
利用补充的特征集,利用k-means聚类将图像分割为两个区域。
l2 = imsegkmeans(占用2,2,'normalizeInpul',真正的);C = labeloverlay (RGB, L2);imshow (C)标题('标记图像与其他像素信息')
我= imread('peppers.png');imshow(i)标题('原始图像')
通过使用K-means群集将图像分段为50个区域。返回标签矩阵l以及星系团的质心位置C.群集中心位置是50种颜色中每一种的RGB值。
C
[l,c] = imsegkmeans(i,50);
将标签矩阵转换为RGB图像。指定簇的质心位置,C,作为新图像的Colormap。
j = label2RGB(L,IM2double(C));
显示量化图像。
imshow (J)标题(“颜色量化图像”)
将原始和压缩图像写入文件。量化后的图像文件大约是原始图像文件大小的四分之一。
imwrite(我,'peppersoriginal.png');IMWRITE(J,“peppersQuantized.png”);
图像分割,指定为二维灰度图像、二维彩色图像或二维多光谱图像。
数据类型:单|int8|INT16|uint8|uint16
单
int8
INT16
uint8
uint16
要创建的集群数量,指定为正整数。
指定可选的逗号分隔的对名称,价值论点。的名字参数名和价值是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen.
的名字
价值
name1,value1,...,namen,valuen
“NumAttempts”,5
IrmentizeInpul.
真的
1
错误的
0
将输入数据标准化为零平均值和单位方差,指定为包括的逗号分隔对'normalizeInpul'和数字或逻辑1(真的) 或者0(错误的).如果您指定真的,然后imsegkmeans分别对输入的每个通道进行归一化。
'normalizeInpul'
imsegkmeans
NumAttempts
3.
使用新的初始聚类质心位置重复聚类过程的次数,指定为由逗号分隔的对组成“NumAttempts”和一个正整数。
“NumAttempts”
MaxIterations
100.
最大迭代次数,由逗号分隔对组成“MaxIterations”和一个正整数。
“MaxIterations”
临界点
1E-4
精度阈值,指定为逗号分隔对组成“阈值”和一个正数。算法在连续迭代中的每个群集中心移动小于阈值时停止。
“阈值”
标记矩阵,指定为一个正整数矩阵。具有标签1的像素属于第一个聚类,标签2属于第二个聚类,以此类推k集群。l和图像的前两个维度相同吗我.班上l取决于集群的数量。
“uint8”
k <= 255
'uint16'
256 <= k <= 65535
'uint32'
65536 <= k <= 2 ^ 32-1
'双倍的'
2 ^ 32 <= k
群集中心位置,以大小的数字矩阵返回k-经过-c, 在哪里k簇数是和吗c为通道的数量。中心和图像是同一类吗我.
该功能产生可重复的结果。给定相同的输入参数时,输出不会因多个运行而变化。
[1]Arthur,D.和S. Vassilvitskii。“K-Means ++:仔细播种的优势。”SODA '07:第十八届ACM-SIAM Symposium在离散算法上的诉讼程序.新奥尔良,洛杉矶,2007年1月,第1027-1035页。
imsegkmeans3
咯
imgaborfilt
labeloverlay
label2rgb
superpixels
lazysnapping
分水岭
labelmatrix
您拥有此示例的修改版本。您是否希望使用您的编辑打开此示例?
你点击一个链接对应于这个MATLAB命令:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,在那里获得翻译的内容,并看到当地的活动和优惠。根据您的位置,我们建议您选择:.
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
联系您当地的办公室