我的图像是k-means分割的结果。获取它的代码就在这里:
% Read the image and convert to L*a*b* color space
I = imread('Crop.jpg');
% h = ginput(2);
% Diameter = sqrt((h(2)-h(1))^2+(h(4)-h(3))^2);
% MeanArea = 3.14*(diameter^2)/4;
Ilab = rgb2lab(I);
% Extract a* and b* channels and reshape
ab = double(Ilab(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
% Segmentation usign k-means
nColors = 4;
[cluster_idx, cluster_center] = kmeans(ab,nColors,...
'distance', 'sqEuclidean', ...
'Replicates', 3);
% Show the result
pixel_labels = reshape(cluster_idx,nrows,ncols);
figure(1);
imshow(pixel_labels,[]), title('image labeled by cluster index');
现在你可以看到,大多数元素是连接的,所以我想计算所有的blob(除了背景之外),然后使用MeanArea过滤它们,这些元素的区域是incircle。如果斑点具有< MeanArea我不算数,而如果blob的尺寸大于> MeanArea我想用MeanArea划分它的面积来获得元素的数量。所有这一切都要有一个措施,使#blobs = #elements。我知道它与'bwlabel'和'regionprops'有关,但由于我是初学者,我不知道如何编码,任何编码帮助都很受欢迎。感谢。
编辑:使用评论中链接的'树'方法我得到了非常糟糕的结果,所以我认为这不是正确的方法。我没有与树例子颜色相同的对象,我只有相同的形状。我正在关注其他方法。 Color segmentation by k-means 我获得了上面标记的图像,但是如何将其保存到变量中以便我可以侵蚀它并计算blob的数量?那是我的问题。