113

任何人都可以帮助我了解均值偏移分割的实际工作原理吗?

这是我刚刚制作的一个 8x8 矩阵

  103  103  103  103  103  103  106  104   
  103  147  147  153  147  156  153  104   
  107  153  153  153  153  153  153  107   
  103  153  147  96   98   153  153  104   
  107  156  153  97   96   147  153  107   
  103  153  153  147  156  153  153  101   
  103  156  153  147  147  153  153  104   
  103  103  107  104  103  106  103  107

使用上面的矩阵是否可以解释 Mean Shift 分割如何分离 3 个不同级别的数字?

4

2 回答 2

212

先说基础:

Mean Shift 分割是一种局部均匀化技术,对于抑制局部对象中的阴影或色调差异非常有用。一个例子胜过许多话:

在此处输入图像描述

动作:用 range-r 邻域中像素的平均值替换每个像素,其值在距离 d 内。

均值偏移通常需要 3 个输入:

  1. 用于测量像素之间距离的距离函数。通常是欧几里得距离,但可以使用任何其他明确定义的距离函数。曼哈顿距离有时是另一个有用的选择。
  2. 一个半径。该半径内的所有像素(根据上述距离测量)将被计算在内。
  3. 价值差异。从半径 r 内的所有像素中,我们将只取那些值在这个差值范围内的像素来计算平均值

请注意,算法在边界处没有很好地定义,因此不同的实现会在那里给你不同的结果。

我不会在这里讨论血淋淋的数学细节,因为如果没有适当的数学符号,它们是不可能显示的,在 StackOverflow 中不可用,而且还因为它们可以从其他地方的好资源中找到。

让我们看看矩阵的中心:

153  153  153  153 
147  96   98   153 
153  97   96   147   
153  153  147  156  

通过合理选择半径和距离,四个中心像素将获得 97(它们的平均值)的值,并且与相邻像素不同。

让我们在Mathematica中计算它。我们将显示颜色编码,而不是显示实际数字,以便更容易理解正在发生的事情:

矩阵的颜色编码是:

在此处输入图像描述

然后我们采取合理的 Mean Shift:

MeanShiftFilter[a, 3, 3]

我们得到:

在此处输入图像描述

所有中心元素都相等(等于 97,顺便说一句)。

您可以使用 Mean Shift 进行多次迭代,以尝试获得更均匀的颜色。经过几次迭代后,您会得到一个稳定的非各向同性配置:

在此处输入图像描述

这时候应该清楚了,在应用 Mean Shift 之后,你无法选择得到多少个“颜色”。因此,让我们展示如何做到这一点,因为这是您问题的第二部分。

您需要能够提前设置输出集群的数量类似于Kmeans clustering

它以这种方式为您的矩阵运行:

b = ClusteringComponents[a, 3]

{{1, 1, 1, 1, 1, 1, 1, 1}, 
 {1, 2, 2, 3, 2, 3, 3, 1}, 
 {1, 3, 3, 3, 3, 3, 3, 1}, 
 {1, 3, 2, 1, 1, 3, 3, 1}, 
 {1, 3, 3, 1, 1, 2, 3, 1}, 
 {1, 3, 3, 2, 3, 3, 3, 1}, 
 {1, 3, 3, 2, 2, 3, 3, 1}, 
 {1, 1, 1, 1, 1, 1, 1, 1}}  

或者:

在此处输入图像描述

这与我们之前的结果非常相似,但是如您所见,现在我们只有三个输出级别。

于 2011-01-29T05:29:13.430 回答
172

Mean-Shift 分割的工作原理如下:

图像数据转换为特征空间 特征空间

在您的情况下,您所拥有的只是强度值,因此特征空间将只是一维的。(例如,您可能会计算一些纹理特征,然后您的特征空间将是二维的——您将根据强度纹理进行分割)

搜索窗口分布在特征空间上 在此处输入图像描述

对于此示例,窗口数量、窗口大小和初始位置是任意的——可以根据特定应用程序进行微调

均值漂移迭代:

1.) 计算每个窗口内数据样本的平均值 在此处输入图像描述

2.) 窗口被转移到等于它们先前计算的平均值的位置 在此处输入图像描述

重复步骤 1.) 和 2.) 直到收敛,即所有窗口都已确定最终位置 在此处输入图像描述

最终位于相同位置的窗口被合并 在此处输入图像描述

根据窗口遍历对数据进行聚类 在此处输入图像描述

... 例如,所有由窗口遍历并最终到达位置“2”的数据,将形成与该位置相关联的集群。

因此,这种分割将(巧合地)产生三个组。以原始图像格式查看这些组可能看起来像belisarius 回答中的最后一张图片。选择不同的窗口大小和初始位置可能会产生不同的结果。

于 2013-07-28T20:40:21.163 回答