1

当我在 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.
请给我一个解决方案来集群这个图像文件。

4

2 回答 2

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)
于 2013-06-29T18:41:25.593 回答
4

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

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

于 2013-06-30T05:09:55.783 回答