首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K均值聚类与Matlab

K均值聚类与Matlab
EN

Stack Overflow用户
提问于 2011-11-05 04:12:38
回答 3查看 12.4K关注 0票数 3

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

这就是我所尝试的:

代码语言:javascript
复制
img = imread('mypic.jpg');
red = img(:,:,1);
green = img(:,:,2);
blue = img(:,:,3);

kmeans(red,5)

我不知道我做得对不对。我遇到了这个错误:

代码语言:javascript
复制
??? 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)

有人能帮我一下吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-05 05:18:01

您的异常是由于kmeans需要双精度类型的数据(因此在下面的第二行中对double的调用)。但是你还有一个额外的问题,那就是你没有把正确的数据传递给kmeans。您需要创建一个数字像素x 3矩阵。在这方面,reshape是你的朋友。下面是一个例子。祝好运。

代码语言:javascript
复制
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)));
票数 5
EN

Stack Overflow用户

发布于 2011-11-05 04:20:24

试试img = double(imread('mypic.jpg'))/255.;

票数 1
EN

Stack Overflow用户

发布于 2013-02-02 03:52:44

代码语言:javascript
复制
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,[])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8015197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档