c++ - OpenCV 中 meanShiftFiltering 和 meanShiftSegmentation 的区别

标签 c++ opencv image-processing image-segmentation mean-shift

谁能解释一下 gpu::meanshiftFiltering 之间的区别吗?和 gpu::meanShiftSegmentation

文档并没有真正帮助。

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

最佳答案

长话短说

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


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

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

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

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

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

关于c++ - OpenCV 中 meanShiftFiltering 和 meanShiftSegmentation 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31429342/

相关文章:

image-processing - OpenCV - 图像拼接

matlab - 如何在matlab中屏蔽图像的一部分?

python-3.x - 分割图像上的重叠预测

c++ - 方法不占用 long long int 值显示错误

以对象指针为参数的 C++ 复制构造函数

python - 检测曲线边界上的点

opencv - 多个图像的位置估计

c# - 如何正确地将浮点指针从 C 库传递到其 C# 包装器

c# - 调用 c++ 库中定义的函数时,c# 中出现 AccessViolationException

Python Opencv 透视变换()