绘制的图像,转换回来

时间:2014-04-01 19:50:08

标签: image matlab

我想画图像,不知道如何描绘图像输出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');
我怎么画图像? 感谢。

1 个答案:

答案 0 :(得分:0)

kmeans中,行是我们想要聚类的东西(即按颜色的像素),列是变量。因此,我们不能直接传入图像,必须先重新整形。例如,如果我们查看this MATLAB example.,图像首先会转换为实验室颜色空间(并在lab_he中)。

首先,他们只使用ab元素:

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

您应该仔细阅读链接的示例,并确保您了解他们正在做什么以及为什么。