2015-04-21 103 views
3

我想將rgb圖像轉換爲灰度圖,然後使用matlab的kmean函數對其進行聚類。使用k-mean灰度圖像處理

這裏是我的代碼

he = imread('tumor2.jpg'); 

%convert into a grayscale image 
ab=rgb2gray(he); 
nrows = size(ab,1); 
ncols = size(ab,2); 

%convert the image into a column vector 
ab = reshape(ab,nrows*ncols,1); 

%nColors=no of clusters 
nColors = 3; 
%cluster_idx is a n x 1 vector where cluster_idx(i) is the index of cluster assigned to ith pixel 
[cluster_idx, cluster_center ,cluster_sum] = kmeans(ab,nColors,'distance','sqEuclidean','Replicates',1,'EmptyAction','drop'); 

figure; 
%converting vector into a matrix of dimensions equal to that of original 
%image dimensions (nrows x ncols) 
pixel_labels = reshape(cluster_idx,nrows,ncols); 
pixel_labels 
imshow(pixel_labels,[]), title('image labeled by cluster index'); 

問題

1)輸出圖像始終是一個純白色的圖像。 我試過下面的鏈接給出的解決方案,但在這種情況下圖像的輸出是一個普通的灰色圖像。

find the solution tried here

2)當我執行我的代碼第二時間,執行不進行超出K均值函數(它喜歡有一個無限循環)。因此在這種情況下沒有輸出。

+0

您可以發佈示例圖片嗎? –

+0

這很好奇,因爲如果我設置30個'nColors',那麼我會爲攝影師圖像獲得3個簇。可能有更多kmeans經驗的人可以幫助 –

+0

警告:在複製1 – dhama

回答

2

實際上,它看起來像當你是色彩分割kmeans已知落在局部最小值。這意味着它通常不會找到你想要的聚類數量,因爲最小化並不是最好的(這就是爲什麼很多人使用其他類型的分段,比如層次集或簡單區域增長)。

一個選項是增加複製量(kmeans將嘗試查找答案的次數)。目前你將它設置爲1,但你可以嘗試3或4,並且可能以這種方式達到解決方案。

this問題中,接受的答案建議使用專門爲圖像分割創建的算法的kmeans版本。我沒有嘗試過自己,但我認爲它值得一試。

Link to FEX