使用K均值进行图像分割

时间:2013-06-29 11:52:18

标签: matlab debugging

当我在Matlab 2012a中执行以下命令时

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 请给我一个集群此图像文件的解决方案。

2 个答案:

答案 0 :(得分: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 :(得分:4)

使用kmeans Segmentation算法代替MATLAB中提供的默认kmeans算法。

请参阅此file。这是用于分割目的的K均值算法。通过使用这个算法,我的程序正在运行。