为什么要使用它,因为我们可以简单地按像素强度值分割图像分量? 就像我想要提取女孩和她的头发的皮肤一样,我可以简单地在像素强度值上进行,而不是使用复杂的k-means算法。
答案 0 :(得分:2)
细分并不简单。与手动阈值处理相比,聚类更容易,更强大。
让我们来看看Matlab:
感兴趣的区域是黄色的花瓣。让我们将rgb-image划分为三个不同的平面:
lily = imread('yellowlily.jpg')
redplane = lily(:,:,1);
greenplane = lily(:,:,2);
blueplane = lily(:,:;3);
imshow(greenplane); colormap(jet); imcontrast;
查看绿板:
所以黄色实际上是更多的绿色'比绿色?哦,哦。好吧,不管怎样,让我们结合门槛。红色和绿色平面中的黄色很强,所以找到它的两个阈值。绿色强烈绿色,另一方面背景是黑色,并且所有这些都具有很高的价值。因此黄色的两个阈值,一个用于绿色而不是黑色或黄色,因此三个绿色比较...?直到灯光发生变化并彻底破坏我们的手动阈值。
或者我们可以尝试聚类:
redIndices = redPlane(:);
greenIndices = greenPlane(:);
blueIndices = bluePlane(:);
Data = [redIndices, blueIndices, greenIndices];
clusterIdx = kmeans(Data,3);
ClusterImage = zeros(size(RedPlane));
ClusterImage(:) = clusterIdx;
几乎就在那里。我们得到了黄色的花瓣,绿色的失败,黑色需要一些形态的爱。只需一个参数,即簇数。也许高斯混合模型作为软K均值?
要考虑的另一点是重叠的颜色,例如黄色花瓣底部附近的绿色。你正在分割头发的女孩可能站在一些树皮附近,树皮上有同样的棕色。您可以将图像中的距离添加为数据的一个维度,例如,我之前提到的GMM。颜色空间和图像中距离的概念可以是强大且强大的分割工具,这是手动阈值永远不可能的。