【发布时间】:2015-09-23 03:47:44
【问题描述】:
我遇到了以下代码,它使用num no 分割图像。聚类,通过 k-means 聚类算法。但是,我无法理解第一个 for 循环中第二个语句的含义。请帮助我了解该声明的作用以及~= 的含义(此处)。
另外,当我运行代码时,我收到以下错误:
??? Attempt to grow array along ambiguous dimension.
Error in ==> kmeansseg at 42
color(rgb_label ~= k) = 0;
似乎除了num=3 之外的每个值都出现此错误。那么,这是否意味着我不能将 rgb 图像聚集成超过 3 种颜色?输入图像有 6 种颜色,我可以区分。有人可以为此提出解决方案吗?
函数调用:
>> f=imread('peppers.png');
>> kmeansseg(f,6)
代码如下:
function kmeansseg(im,num)
figure(1),imshow(im), title('original image');
cform = makecform('srgb2lab');
lab_im = applycform(im,cform);
ab = double(lab_im(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
nColors = num;
[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...
'Replicates',3);
pixel_labels = reshape(cluster_idx,nrows,ncols);
figure(2),imshow(pixel_labels,[]), title('image labeled by cluster index');
segmented_images = cell(1,nColors);
rgb_label = repmat(pixel_labels,[1 1 nColors]);
for k = 1:nColors
color = im;
color(rgb_label ~= k) = 0; %meaning?
segmented_images{k} = color;
end
figure(3),imshow(segmented_images{1}), title('objects in cluster 1');
figure(4),imshow(segmented_images{2}), title('objects in cluster 2');
figure(5),imshow(segmented_images{3}), title('objects in cluster 3');
end
end
【问题讨论】:
-
如何调用这个函数?您使用什么输入参数?请添加函数调用。
-
@kkuilla,函数调用:
>> f=imread('peppers.png');>> kmeansseg(f,6) -
请将其添加到问题中。
标签: matlab image-processing k-means