k表示聚类输入?

时间:2012-04-27 16:32:07

标签: matlab sign k-means

我想做k意味着在1024 * 1024 * 3 .ppm文件上进行聚类。我必须承认这张图片中的点数非常低。现在,我阅读图片,然后调整大小,以便alteast matlab可以显示它。然后是重塑它并将其转换为double的代码行,以便我可以将它传递给内置的matlab kmeans函数。

img1 = imread('picture.ppm');
img= imresize(img1,0.15);
imshow(img);
imf = double(reshape(img,size(img,1)*size(img,2),size(img,3)));
imf = imresize(imf,.15);
[m,n,z]=size(imf)

但我遇到了很多错误。 1)点的强度非常低。在我这样做之后:

Y=Y*255; %y being of the same dimension as my img
imf1 = Y-imf;

我的大部分照片是白色的,低强度点散射。除此之外,我可以增加这些点的强度吗?

2)我如何处理图像,以便它可以作为有效输入传递给各种kmeans算法?我需要两个黑点和红点。

1 个答案:

答案 0 :(得分:1)

K-means不允许您根据预定义的标准指定输出集群的组成。它只是试图找到与你的点距离最小的质心。您通常可以提供与黑色和红色相对应的起始点[0,0,0;1,0,0],但不能保证最终的质心将与起点相似。

但是,如果您知道先验您的质心应该是什么样子,那么您不需要k-means。只需计算每个像素与黑色像素和红色像素的距离,然后选择最小的距离。