能否使用matlab对图像的RGB + 空间特征进行聚类?注意:我想使用kmeans
进行聚类。
实际上,我只想做一件事,就是从这个图片
得到这个图片
能否使用matlab对图像的RGB + 空间特征进行聚类?注意:我想使用kmeans
进行聚类。
实际上,我只想做一件事,就是从这个图片
得到这个图片
[imgQ,map]= rgb2ind(img,4,'nodither'); %change this 4 to the number of desired colors
%in quantized image
imshow(imgQ,map);
结果:
使用 kmeans
:
%img is the original image
imgVec=[reshape(img(:,:,1),[],1) reshape(img(:,:,2),[],1) reshape(img(:,:,3),[],1)];
[imgVecQ,imgVecC]=kmeans(double(imgVec),4); %4 colors
imgVecQK=pdist2(imgVec,imgVecC); %choosing the closest centroid to each pixel,
[~,indMin]=min(imgVecQK,[],2); %avoiding double for loop
imgVecNewQ=imgVecC(indMin,:); %quantizing
imgNewQ=img;
imgNewQ(:,:,1)=reshape(imgVecNewQ(:,1),size(img(:,:,1))); %arranging back into image
imgNewQ(:,:,2)=reshape(imgVecNewQ(:,2),size(img(:,:,1)));
imgNewQ(:,:,3)=reshape(imgVecNewQ(:,3),size(img(:,:,1)));
imshow(img)
figure,imshow(imgNewQ,[]);
kmeans
的结果如下:
kmeans
中,则代码会稍有不同。基本上,您需要将相应像素值的像素坐标连接起来。但是请记住,在为每个像素分配最近的质心时,仅分配颜色,即前3个维度,而不是后2个维度。这显然没有意义。代码与先前非常相似,请注意更改并理解它们。[col,row]=meshgrid(1:size(img,2),1:size(img,1));
imgVec=[reshape(img(:,:,1),[],1) reshape(img(:,:,2),[],1) reshape(img(:,:,3),[],1) row(:) col(:)];
[imgVecQ,imgVecC]=kmeans(double(imgVec),4); %4 colors
imgVecQK=pdist2(imgVec(:,1:3),imgVecC(:,1:3));
[~,indMin]=min(imgVecQK,[],2);
imgVecNewQ=imgVecC(indMin,1:3); %quantizing
imgNewQ=img;
imgNewQ(:,:,1)=reshape(imgVecNewQ(:,1),size(img(:,:,1))); %arranging back into image
imgNewQ(:,:,2)=reshape(imgVecNewQ(:,2),size(img(:,:,1)));
imgNewQ(:,:,3)=reshape(imgVecNewQ(:,3),size(img(:,:,1)));
imshow(img)
figure,imshow(imgNewQ,[]);
< p > 带距离约束的 < code > kmeans 结果: < /p >
< p > kmeans
的决策。试一下吧。根据结果,我可以给你进一步的建议。请编辑你的问题并将其添加到那里。 - Autonomous
k
-means。 - rayryeng