2011-01-28 23 views
93

任何人都可以请帮我理解Mean Shift分割实际上是如何工作的吗?使用Mean Shift进行图像分割解释

这里是我编造的

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个不同层次的数字的8×8矩阵?

+0

三个层次?我看到的数字大约在100和150左右。 – John 2011-01-28 19:05:23

+2

作为一个分段,我认为中间的数字将远离要包含在边界的边界数字。这就是为什么我说3. 我可能是错的,因为我真的不明白这种类型的segmenation如何工作。 – Sharpie 2011-01-28 19:12:10

+0

哦...也许我们正在采取不同的意思。都好。 :) – John 2011-01-28 19:15:39

回答

179

基础知识第一:

均值漂移分割是局部均匀化技术,其是用于局部对象阻尼阴影或色调的差异是非常有用的。 一个例子是比许多话更好:

enter image description here

操作:替换每个像素具有一介于-R附近的像素的平均值和其值是一个距离d内。

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

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

请注意算法在边界处没有很好的定义,所以不同的实现会给你不同的结果。

我不会在这里讨论血淋淋的数学细节,因为如果没有适当的数学符号,它们是不可能显示的,在StackOverflow中不可用,还因为它们可以在from good sources elsewhere找到。

让我们看看你的矩阵中心:

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

随着半径和距离合理的选择,这四个中心的像素将获得的97(其平均值)的值,将不同形式的相邻像素。

让我们来计算它在Mathematica。相反,显示实际数字,我们会显示一个颜色编码,所以它更容易明白发生了什么:

的颜色编码为您的矩阵是:

enter image description here

然后我们采取合理的平均换档:

MeanShiftFilter[a, 3, 3] 

而我们得到:

enter image description here

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

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

enter image description here

在这个时候,应该明确的是,你不能选择你将平均后移多少“颜色”获得。所以,让我们展示如何去做,因为这是你问题的第二部分。

你需要能够预先设置输出簇的数量就像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}} 

或者:

enter image description here

这非常类似于我们以前的结果,但你可以看到,现在我们只有三个产出水平。

HTH!

143

均值漂移分割的工作是这样的:

的图像数据转换成特征空间 feature space

在你的情况,你所有的只是强度值,所以特征空间不仅会是一维的。 (你可能会计算一些纹理特征,例如,然后你的功能空间是二维的 - 你会被分割基于强度纹理)

搜索窗口分布在特征空间 enter image description here

窗口,窗口大小,和初始位置的数目是任意的在这个例子中 - 这可以是微调依赖于特定的应用

均值移位迭代:

1。),每个窗口内的数据样本的装置被计算 enter image description here

2.)窗口被转移到等于它们的先前计算装置的位置 enter image description here

步骤1.)和2- 。)被重复直至收敛,即所有的窗户都在最后的位置 enter image description here

,关于最终的结算窗口相同的位置根据所述窗口遍历 enter image description here

...例如合并 enter image description here

的数据被群集所有被窗口遍历的数据,例如位置“2”,将形成与该位置关联的群集。

所以,这种分割将(巧合)产生三组。以原始图像格式查看这些组可能看起来像the last picture in belisarius' answer。选择不同的窗口大小和初始位置可能会产生不同的结果。