K表示聚类和Matlab

use*_*373 3 matlab image-segmentation

我需要kmeans在rgb图像上使用该功能.算法的每个元素需要具有3个维度,每个维度对应于图像的每个通道.元素的数量将是图像的总像素数.我需要kmeans在群集#5上使用.

所以这就是我的尝试:

img = imread('mypic.jpg');
red = img(:,:,1);
green = img(:,:,2);
blue = img(:,:,3);

kmeans(red,5)
Run Code Online (Sandbox Code Playgroud)


我不知道我是否正确地做到了.我有这个错误:

??? Error using ==> plus
Integers can only be combined with integers of the same class, or scalar doubles.

Error in ==> kmeans>distfun at 704
            D(:,i) = D(:,i) + (X(:,j) - C(i,j)).^2;

Error in ==> kmeans at 313
    D = distfun(X, C, distance, 0);

Error in ==> mysegmentation at 9
kmeans(R,2)
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我一把吗?谢谢

Joh*_*ohn 5

您的例外,是由于kmeans期望double类型的数据(因此double下面第二行中的调用).但是你有一个额外的问题,因为你没有将正确的数据传递给kmeans.您需要创建一个numpixels x 3矩阵. reshape是你这个东西的朋友.这是一个例子.祝好运.

img = imread('mypic.jpg');
flatImg = double(reshape(img,size(img,1)*size(img,2),size(img,3)));
idx = kmeans(flatImg,5);
imagesc(reshape(idx,size(img,1),size(img,2)));
Run Code Online (Sandbox Code Playgroud)