图像分割使用 Mean Shift 进行解释

有没有人能帮助我理解 Mean Shift 分割实际上是如何工作的?

这是我刚刚做的一个8乘8的矩阵

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

84360 次浏览

首先是基础知识:

均值漂移分割是一种局部均匀化技术,对局部物体的阻尼阴影或色调差异非常有用。 一个例子胜过许多词语:

enter image description here

Action:将每个像素替换为距离为 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

With reasonable choices for radius and distance, the four center pixels will get the value of 97 (their mean) and will be different form the adjacent pixels.

Let's calculate it in Mathematica. Instead of showing the actual numbers, we will display a color coding, so it's easier to understand what is happening:

矩阵的颜色编码是:

enter image description here

然后我们采取一个合理的均值变化:

MeanShiftFilter[a, 3, 3]

然后我们得到:

enter image description here

其中所有中心元素相等(顺便说一下,97)。

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

enter image description here

在这个时候,应该很清楚,你不能选择多少“颜色”你得到后应用均值移动。那么,让我们来演示一下怎么做,因为这是你问题的第二部分。

您需要预先设置输出集群的数量,比如 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}}

或者:

enter image description here

这和我们之前的结果非常相似,但是你可以看到,现在我们只有三个输出级别。

哈!

Mean-Shift 分段的工作原理是这样的:

将图像数据转换为特征空间 feature space

在您的示例中,所有的都是强度值,因此特征空间将只是一维的。(例如,你可以计算一些纹理特征,然后你的特征空间将是二维的——你将根据强度 还有纹理进行分割)

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

The number of windows, window size, and initial locations are arbitrary for this example – something that can be fine-tuned depending on specific applications

Mean-Shift 迭代:

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”,这些数据会形成一个与该位置相关的集群。

因此,这种细分将(巧合地)产生三组。以原始图像格式查看这些组可能类似于 贝利萨留斯回答的最后一张图片。选择不同的窗口大小和初始位置可能会产生不同的结果。