2013-06-29 149 views
1

當我在Matlab 2012A執行以下命令圖像分割K均值

centroids=kmeans(imread('image.jpg'),4); 

我得到以下錯誤:

Error using + 
Integers can only be combined with integers of the same class, or scalar doubles. 

Error in kmeans>distfun (line 659) 

      D(:,i) = D(:,i) + (X(:,j) - C(i,j)).^2; 

Error in kmeans (line 273) 

D = distfun(X, C, distance, 0, rep, reps); 

我需要將圖像分割成4個簇。該圖像是JPEG格式的CT腦腫瘤圖像。這個圖像的大小是233x216
請給我一個解決方案來聚集這個圖像文件。

+0

這種情況下'X'和'C'是什麼? – Schorsch

回答

4

使用kmeans分段算法而不是MATLAB中提供的默認kmeans算法。

請參閱此file。這是用於分割目的的K均值算法。通過使用這個算法我的程序正在工作。

4

問題可能是由於彩色圖像(MxNx3)

如果你想要做的是圖像分成4個集羣集羣的強度值,你應該寧願做

im = imread('image.jpg'); 
im=rgb2gray(im) //if you only want grayscale intensities 
[idx centroids]=kmeans(double(im(:)),4); 

如果你要考慮顏色,你可以做類似

im = imread('image.jpg'); 
im = reshape(im,size(im,1)*size(im,2),size(im,3)) 
[idx centroids]=kmeans(double(im(:)),4); 

爲了形象化,你可以做類似

分割
imseg = zeros(size(im,1),size(im,2)); 
for i=1:max(idx) 
    imseg(idx==i)=i; 
end 
imagesc(imseg) 
+1

謝謝您的評論.. – user1994657