【问题标题】:Image Segmentation Using K means使用 K 均值进行图像分割
【发布时间】:2013-12-26 12:36:25
【问题描述】:

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

【问题讨论】:

  • 在这种情况下XC 是什么?

标签: matlab debugging


【解决方案1】:

问题可能是由于彩色图像 (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)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-23
      • 2017-05-29
      • 2021-06-04
      • 2013-12-24
      • 2023-03-04
      • 1970-01-01
      • 2012-09-23
      • 2018-12-21
      • 2016-07-23
      相关资源
      最近更新 更多