首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在matlab中实现基于颜色的聚类精确排序

如何在matlab中实现基于颜色的聚类精确排序
EN

Stack Overflow用户
提问于 2016-06-22 14:02:02
回答 2查看 108关注 0票数 0

我有一张叶子的图像,它主要有三种颜色的黑色背景,绿色的叶子和棕色的病斑。这是图片

当我第一次对它进行聚类时,我得到了簇1中的棕色斑点,簇2中的绿色部分,簇3中的黑色区域(例如)。

当我对它进行第二次聚类时,我得到了簇1中的绿色部分,簇2中的棕色斑点,簇3中的黑色区域(例如)。B

当我第三次对其进行聚类时,聚类的顺序再次不同。

我想要更改代码,使棕色斑点出现在集群1,绿色部分在集群2和黑色在集群3。集群的顺序应该是相同的,即使我集群许多times.Could有人可以帮助我与代码?我正在使用Matlab2009a。这个问题是关于集群排序的

以下是目前正在做的事情

代码语言:javascript
运行
复制
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');
EN

回答 2

Stack Overflow用户

发布于 2016-06-22 14:18:11

Matlab kmeans有一个'Start‘参数,它可以设置为质心初始位置的矩阵。你可以初始化为黑色、棕色和绿色,如果图像真的是由这些颜色组成的,你甚至可能会更快地得到结果。

Documentation

票数 0
EN

Stack Overflow用户

发布于 2016-06-22 18:06:06

只需在聚类后检查颜色!

一种方法是将质心颜色空间转换为HSV,并检查H和V的值。H会给你颜色(例如,大约120.0度它的绿色),V会给你"ligth",所以如果V是0,那么无论H是什么,它都是黑色簇。

这对于编程来说应该是微不足道的,但请毫不犹豫地提出任何关于它的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37959756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档