执行K意味着使用k = 3(段)进行聚类。所以我:
1)将RGB img转换为灰度
2)将原始图像转换为n X 1列矩阵
3)idx = kmeans(column_matrix)
4)output = idx,返回到与原始图像相同的尺寸。
我的问题是:
A
当我做imshow(输出)时,我得到一个纯白色的图像。但是,当我进行imshow(输出[0 5])时,它会显示输出图像。我知道0和5指定显示范围。但为什么我必须这样做?
B) 现在输出图像意味着分成3段。如何对其进行阈值处理以便分配
0表示区域1的簇 1表示区域2的簇 2对于区域3的聚类
由于我做这个聚类的重点是我可以将图像分割成3个区域。
非常感谢。
亲切的问候。
答案 0 :(得分:3)
A:鉴于您的矩阵output
包含范围从1到3的标量值,imshow(output)
将此视为灰度矩阵,假设整个值范围是0到255.这就是为什么需要约束颜色限制,否则你的图像全是白色或几乎都是白色。
B: output = output - 1
答案 1 :(得分:1)
正如Ryan所指出的,你的问题可能就是你如何显示图像。这是一个有效的例子:
snow = rand(256, 256);
figure;
imagesc(snow);
nClusters = 3;
clusterIndices = kmeans(snow(:), nClusters);
figure;
imagesc(reshape(clusterIndices, [256, 256]));