K means clustering in MATLAB - output image

て烟熏妆下的殇ゞ 提交于 2019-12-10 10:47:25

问题


To perform K means clustering with k = 3 (segments). So I:

1) Converted the RGB img into grayscale

2) Casted the original image into a n X 1, column matrix

3) idx = kmeans(column_matrix)

4) output = idx, casted back into the same dimensions as the original image.

My questions are :

A

When I do imshow(output), I get a plain white image. However when I do imshow(output[0 5]), it shows the output image. I understand that 0 and 5 specify the display range. But why do I have to do this?

B) Now the output image is meant to be split into 3 segments right. How do I threshold it such that I assign a

0 for the clusters of region 1 1 for clusters of region 2 2 for clusters of region 3

As the whole point of me doing this clustering is so that I can segment the image into 3 regions.

Many thanks.

Kind Regards.


回答1:


A: Given that your matrix output contains scalar values ranging from 1 to 3, imshow(output) is treating this as a grayscale matrix and assuming that the full range of values is 0 to 255. This is why constraining the color limits is necessary as otherwise your image is all white or almost all white.

B: output = output - 1




回答2:


As pointed out by Ryan, your problem is probably just how you display the image. Here's a working example:

snow = rand(256, 256);
figure;
imagesc(snow);

nClusters = 3;
clusterIndices = kmeans(snow(:), nClusters);

figure;
imagesc(reshape(clusterIndices, [256, 256]));


来源:https://stackoverflow.com/questions/16690669/k-means-clustering-in-matlab-output-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!