当我在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
请给我一个集群此图像文件的解决方案。
答案 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均值算法。通过使用这个算法,我的程序正在运行。