Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 图像的k-均值分割_Matlab_Image Processing_K Means - Fatal编程技术网

Matlab 图像的k-均值分割

Matlab 图像的k-均值分割,matlab,image-processing,k-means,Matlab,Image Processing,K Means,我遇到了下面的代码,它通过k-means聚类算法使用numno.of clusters分割图像。但是,我无法理解第一个for循环中第二条语句的含义。请帮助我理解该语句的作用以及~=的含义(此处) 此外,当我运行代码时,会出现以下错误: ??? Attempt to grow array along ambiguous dimension. Error in ==> kmeansseg at 42 color(rgb_label ~= k) = 0; 似乎除了num=3之外,我的

我遇到了下面的代码,它通过k-means聚类算法使用
num
no.of clusters分割图像。但是,我无法理解第一个
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

它将图像中与特定标签不对应的任何元素设置为零。这就是获得一系列分割图像的方式。它从
rgb_label
变量中获取隔离标签

什么~=意味着“对于分割图像的每个像素不等于当前分割数,将图像像素设置为零,保持其他图像像素不变”


关于您的编辑-看起来颜色和rgb_标签矩阵没有相同的尺寸

在不知道矩阵的尺寸的情况下很难判断,但我怀疑这就是问题所在。我使用的是标准的
peppers.png
图像,尺寸
。您能让代码在这行后面输出颜色和rgb_标签的尺寸吗:
color=im
rgb_标签
size:
384x512x6
color
size
384x512x3
。是因为我试图将图像分割成6个簇吗?我的输入是
>kmeansseg(f,6)
f
是输入图像)。我无法进行深入验证,但感觉该函数设置为期望使用单色图像,而不是RGB。您应该能够选择任意数量的簇,它不应该与图像中颜色通道的数量相关联。您如何调用此函数?您使用的是什么输入参数?请添加函数调用。@kkuilla,函数调用:
>f=imread('peppers.png')
>kmeansseg(f,6)
请将其添加到问题中。