我需要在rgb图像上使用kmeans函数。算法的每个元素都需要有3个维度,每个维度对应于图像的每个通道。元素的数量将是图像的像素总数。我需要在集群#5上使用kmeans。
这就是我所尝试的:
img = imread('mypic.jpg');
red = img(:,:,1);
green = img(:,:,2);
blue = img(:,:,3);
kmeans(red,5)我不知道我做得对不对。我遇到了这个错误:
??? 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)有人能帮我一下吗?谢谢
发布于 2011-11-05 05:18:01
您的异常是由于kmeans需要双精度类型的数据(因此在下面的第二行中对double的调用)。但是你还有一个额外的问题,那就是你没有把正确的数据传递给kmeans。您需要创建一个数字像素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)));发布于 2011-11-05 04:20:24
试试img = double(imread('mypic.jpg'))/255.;
发布于 2013-02-02 03:52:44
I1= imread('d:\flowers.jpg');
I2=rgb2gray(I1);
I=double(I2);
figure
subplot(1,3,1)
imshow(I1)
subplot(1,3,2)
imshow(I2)
g=kmeans(I(:),4);
J = reshape(g,size(I));
subplot(1,3,3)
imshow(J,[])https://stackoverflow.com/questions/8015197
复制相似问题