OpenCV 中 meanShiftFiltering 和 meanShiftSegmentation 的区别

Difference between meanShiftFiltering and meanShiftSegmentation in OpenCV

有人可以解释一下 gpu::meanshiftFiltering and gpu::meanShiftSegmentation 之间的区别吗?

文档并没有真正帮助。

也许这是一个不同的问题,但我的目标是提取对象的边界,如果有人能帮助我,那就太好了。

TL;DR

均值偏移过滤旨在减少噪声并提高图像质量,它returns一个“更干净”的图像。
另一方面,mean shift segmentation 将图像分割成颜色大致相同的区域。它 returns 每个像素与其对应段的映射。
如果你想要对象边界,你应该使用 mean shift segmentation.


请参阅 Comaniciu 和 MeerMean shift: A robust approach toward feature space analysis (PAMI 2002) 描述“均值偏移”程序的开创性工作。

“均值偏移”是一种数字程序,旨在搜索通过样本定义的分布模式(“集中点”)。在图像处理的上下文中用更简单的话来说:您可以将图像的所有像素视为 RGB-XY space 中的样本。图像中的“红色”区域可以被视为在该区域的 XY 坐标中具有红色的像素的“高概率”。 因此,您可以将图像视为 RGB-XY 样本的集合,定义此 space.
中的分布 “均值偏移”程序旨在以高概率找到 RGB-XY space 中的区域("mode" = 分布的局部最大点)。

为什么这个观点有用?您可能会问自己。好吧,考虑一个有噪声的图像,噪声使像素远离 RGB-XY space 中原始分布的模式。如果您可以将每个像素从其当前(嘈杂的)颜色“转移”到一种分布模式,您可能会减少噪声。

因此,均值偏移过滤 会改变像素的颜色,使其类似于附近最主要的颜色。

向前一步,你可以问自己“每个像素属于哪一种模式?”。因此,如果您有 m 模式(在 RGB-XY space 中),您可以将每个像素分配给这些 m 模式之一,从而有效地将图像分割成 m 段。此过程称为均值偏移 分割.