我想画图像,不知道如何描绘图像输出kmeans
我的代码:
close all; clc; clear;
img = imread('pic7.png');
figure(), imshow(img);
impixelregion;
% nastavenie noveho obrazka
[y x z] = size(img)
for i=1:1:y
for j=1:1:x
imgNew(i, j, :) = 0;
end
end
[X_no_dither, map]= rgb2ind(img,8,'nodither');
figure, imshow(X_no_dither, map);
impixelregion;
m = im2double(X_no_dither)
idx = kmeans(m,4,'emptyaction','singleton');
我怎么画图像?
感谢。
答案 0 :(得分:0)
在kmeans
中,行是我们想要聚类的东西(即按颜色的像素),列是变量。因此,我们不能直接传入图像,必须先重新整形。例如,如果我们查看this MATLAB example.,图像首先会转换为实验室颜色空间(并在lab_he
中)。
首先,他们只使用a
和b
元素:
ab = double(lab_he(:,:,2:3));
然后,重新整形以使ab
的大小为nxm,其中n =总像素数且m = 2 - 这是因为每个像素都基于a
和{{1}进行聚类}值:
b
现在,将这些像素分为三种颜色:
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
然后,结果必须nColors = 3;
% repeat the clustering 3 times to avoid local minima
[cluster_idx cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...
'Replicates',3);
返回要显示的图像:
reshape
在您的情况下,当您使用索引图像时,请尝试以下操作:
pixel_labels = reshape(cluster_idx,nrows,ncols);
imshow(pixel_labels,[]), title('image labeled by cluster index');
idx = kmeans(m(:),4,'emptyaction','singleton');
idx = reshape(idx,size(m));
imshow(idx, []);
只是将像素排列为单列。 m(:)
然后将它们分为四个群集。之后,我们使用输入图像的大小kmeans
返回索引,然后正常显示reshape
。
您应该仔细阅读链接的示例,并确保您了解他们正在做什么以及为什么。