解释了使用均值平移的图像分割


107

谁能帮助我了解“均值漂移”细分实际上是如何工作的?

这是我刚刚组成的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

使用上面的矩阵,可以解释均值移位分割如何将3个不同级别的数字分开?


三个级别?我看到数字在100左右和150左右。–
约翰

2
我认为,中间的数字应该与边缘数字相距甚远,而边缘数字要包含在边界的该部分中。这就是为什么我说3.我可能错了,因为我不太了解这种类型的细分是如何工作的。
Sharpie

哦...也许我们正在采取水平来表达不同的意思。都好。:)
约翰

1
我喜欢接受的答案,但我认为它并不能说明全部情况。IMO这份pdf文件更好地解释了均值移位分割(例如,我认为使用更高维度的空间比2d更好)。eecs.umich.edu/vision/teaching/EECS442_2012/lectures/…–
Helin Wang

Answers:


204

基础知识优先:

Mean Shift分割是一种局部均化技术,对于衰减局部物体的阴影或色调差异非常有用。一个例子胜于许多词:

在此处输入图片说明

行动:将每个像素替换为范围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中进行计算。除了显示实际数字,我们还将显示颜色代码,因此更容易理解正在发生的事情:

矩阵的颜色编码为:

在此处输入图片说明

然后我们进行合理的均值平移:

MeanShiftFilter[a, 3, 3]

我们得到:

在此处输入图片说明

所有中心元素都相等的位置(等于97,BTW)。

您可以使用“均值移位”进行多次迭代,以尝试获得更均匀的着色。经过几次迭代后,您将获得稳定的非各向同性配置:

在此处输入图片说明

目前,应该清楚的是,在选择“均值平移”后,您无法选择获得多少“颜色”。因此,让我们展示如何执行此操作,因为这是您问题的第二部分。

您需要能够预先设置输出集群的数量的是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}}  

要么:

在此处输入图片说明

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

HTH!


是否有Matlab实现图像均值平移?
Kaushik Acharya


164

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

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

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

搜索窗口分布在特征空间上 在此处输入图片说明

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

均值平移迭代:

1.)计算每个窗口内数据样本的均值 在此处输入图片说明

2.)将窗口移至等于其先前计算均值的位置 在此处输入图片说明

重复步骤1.)和2.),直到收敛为止,即所有窗口都落在最终位置 在此处输入图片说明

最终在相同位置上的窗口被合并 在此处输入图片说明

数据根据窗口遍历进行聚类 在此处输入图片说明

...例如,所有以例如位置“ 2”结尾的窗口遍历的所有数据将形成与该位置关联的簇。

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


难道特征空间不能是三维的,说明每个像素的位置吗?
Helin Wang 2014年

@HelinWang是的,可以。
mlai

我了解窗口如何在一维特征空间中定位,但是我看不到如何将您的解释应用于包括空间搜索距离(例如,以像素为单位)和光谱距离(值差)的均值平移算法就像belisarius博士的回答一样。你能澄清一下吗?
Lennert

@Lennert如果我正确理解了您的问题,那么本质上您将要做的是将像素位置(x,y)作为要素添加,或将其他基于位置的要素添加到聚类空间。Belisarius的答案似乎引用了Mathematica中的特定实现,这可能会做一些更复杂的事情。有帮助吗?
mlai

1
@Lennert是的,我想你明白了。我能理解您为什么对我的回答感到困惑。我有点把我的“窗口”画成二维的,但实际上我只是想描绘一维光谱值上的聚类。用绘图或动画可视化三维特征空间中的均值移动聚类非常酷(如果我有时间的话也许是这些日子之一)
mlai
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.