2012-04-27 41 views
0

我想做k表示集群在一个1024 * 1024 * 3 .ppm文件。我必须承认这张照片中的点数非常低。现在,我读取图片,然后调整它的大小,以便替代matlab可以显示它。然后是代码行来重塑它并将其转换为double,这样我就可以将它传递给内置的matlab kmeans函数。k表示聚类输入?

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; 

大多数我的图片是白色的低强度分scattered.Any其他办法可以增加这些点的强度?

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

+0

校正的图像是.ppm格式扩展 – simplycurious 2012-04-27 16:40:36

回答

1

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

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