2012-04-27 44 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。簡單地計算每個像素到黑色像素和紅色像素的距離,然後選擇最小的距離。