【问题标题】:Why k-means clustering is used in image processing?为什么在图像处理中使用 k-means 聚类?
【发布时间】:2016-10-09 18:58:04
【问题描述】:

为什么使用它,因为我们可以通过像素强度值简单地分割图像组件? 就像我想提取一个女孩的皮肤和她的头发一样,我可以简单地在像素强度值上执行此操作,而不是使用复杂的 k-means 算法。

【问题讨论】:

  • 当您事先不知道皮肤和头发的强度时,不要这样做! K-means 会为您选择它们​​(前提是它们覆盖了图像上足够大的区域)。
  • 为什么那些对一个完全合理的问题投反对票?
  • @YvesDaoust 因为你可以简单地用谷歌 k-means 图像处理来找到大量的答案和例子?这个问题基本上是说:我懒得花 10 分钟阅读,请其他人花 15 分钟把它归结为一个不错的答案吗?
  • @Piglet:也许吧。问题不是“一个人如何计算 K-means”,而更多的是“我不明白什么是什么”,谷歌搜索对此无济于事。我一直认为反对票是不正当的。无论如何,当我看到 OP 接受的答案(绝对不是关于自动阈值计算)时,我想知道他是否理解了自己的问题。
  • @YvesDaoust 我接受了,因为我想赢得声誉和道德,否则我的导师帮助我真正理解了我的问题。谢谢

标签: image-processing machine-learning


【解决方案1】:

细分并不简单。聚类比手动阈值更容易、更健壮。

让我们用 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。色彩空间和图像中的距离概念可以是一个强大而强大的分割工具,这是手动阈值永远无法做到的。

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 2014-06-04
    • 2018-05-12
    • 2021-04-29
    • 2015-04-11
    • 2014-04-13
    • 2020-09-24
    • 2017-05-23
    • 2011-04-11
    相关资源
    最近更新 更多