使用Mean Shift解释图像分割

Sha*_*pie 103 algorithm image image-processing image-segmentation

有谁可以帮我理解Mean Shift分割实际上是如何工作的?

这是我刚刚编写的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
Run Code Online (Sandbox Code Playgroud)

使用上面的矩阵可以解释Mean Shift分割如何将3个不同的数字水平分开?

Dr.*_*ius 199

基础知识首先:

Mean Shift分割是一种局部均匀化技术,对于抑制局部对象中的阴影或色调差异非常有用.一个例子比许多单词更好:

在此输入图像描述

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

Mean Shift通常需要3个输入:

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

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

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

让我们看看矩阵的中心:

153  153  153  153 
147  96   98   153 
153  97   96   147   
153  153  147  156  
Run Code Online (Sandbox Code Playgroud)

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

让我们在Mathematica中计算它.我们将显示颜色编码,而不是显示实际数字,因此更容易理解发生的情况:

矩阵的颜色编码是:

在此输入图像描述

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

MeanShiftFilter[a, 3, 3]
Run Code Online (Sandbox Code Playgroud)

我们得到:

在此输入图像描述

所有中心元素相等(至97,BTW).

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

在此输入图像描述

此时,应该清楚的是,您无法选择应用Mean Shift后获得的"颜色"数量.所以,让我们展示一下如何做到这一点,因为这是你问题的第二部分.

您需要能够提前设置输出集群的数量就像Kmeans集群一样.

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

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}}  
Run Code Online (Sandbox Code Playgroud)

要么:

在此输入图像描述

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

HTH!

  • @KaushikAcharya见http://www.shawnlankton.com/2007/11/mean-shift-segmentation-in-matlab/ (2认同)

mla*_*lai 159

Mean-Shift分段的工作方式如下:

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

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

搜索窗口分布在要素空间上 在此输入图像描述

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

Mean-Shift迭代:

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

2.)窗口被移位到与其先前计算的平均值相等的位置 在此输入图像描述

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

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

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

...例如,最终位于位置"2"的窗口遍历的所有数据将形成与该位置相关联的集群.

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