我有一张叶子的图像,它主要有三种颜色的黑色背景,绿色的叶子和棕色的病斑。这是图片
当我第一次对它进行聚类时,我得到了簇1中的棕色斑点,簇2中的绿色部分,簇3中的黑色区域(例如)。
当我对它进行第二次聚类时,我得到了簇1中的绿色部分,簇2中的棕色斑点,簇3中的黑色区域(例如)。B
当我第三次对其进行聚类时,聚类的顺序再次不同。
我想要更改代码,使棕色斑点出现在集群1,绿色部分在集群2和黑色在集群3。集群的顺序应该是相同的,即使我集群许多times.Could有人可以帮助我与代码?我正在使用Matlab2009a。这个问题是关于集群排序的
以下是目前正在做的事情
function segmented_img = leaf_segmentation( original_img, nclusters )
original_img = im2double(original_img);
G=fspecial('gaussian',[200 250],1);
smoothed_img =imfilter(original_img,G,'same');
conversionform = makecform('srgb2lab');
lab_img = applycform(smoothed_img,conversionform);
ab_img = double(lab_img(:,:,2:3));
nrows = size(ab_img,1);
ncols = size(ab_img,2);
ab_img = reshape(ab_img,nrows*ncols,2);
cluster_idx =
kmeans(ab_img,nclusters,'distance','sqEuclidean','Replicates',3);
cluster_img = reshape(cluster_idx,nrows,ncols);
segmented_img = cell(1,nclusters);
for k = 1:nclusters
segmented_img{k} = bsxfun( @times, original_img, cluster_img == k );
end
end
segmented = leaf_segmentation( imread('input image'), 3 );
figure,imshow(segmented{1}), title('Cluster 1');
figure, imshow(segmented{2}), title('Cluster 2');
figure, imshow(segmented{3}), title('Cluster 3');
发布于 2016-06-22 14:18:11
Matlab kmeans有一个'Start‘参数,它可以设置为质心初始位置的矩阵。你可以初始化为黑色、棕色和绿色,如果图像真的是由这些颜色组成的,你甚至可能会更快地得到结果。
Documentation
发布于 2016-06-22 18:06:06
只需在聚类后检查颜色!
一种方法是将质心颜色空间转换为HSV,并检查H和V的值。H会给你颜色(例如,大约120.0度它的绿色),V会给你"ligth",所以如果V是0,那么无论H是什么,它都是黑色簇。
这对于编程来说应该是微不足道的,但请毫不犹豫地提出任何关于它的问题。
https://stackoverflow.com/questions/37959756
复制相似问题