双边过滤颜色

时间:2011-02-15 06:48:37

标签: c++ image-processing filtering

我通常理解仅使用灰度图像时双边滤波背后的概念。我已阅读this website on bilateral filtering及其讨论的论文。

我的主要问题是:如何确定颜色的相似性?两个RGB值的相似性是它们的R值,G值和B值的相似性的和/乘积/其他一些操作吗?如果是这种情况,那么分别确定相似性并过滤每个通道是否合理呢?

谢谢

3 个答案:

答案 0 :(得分:3)

我检查了你的链接,答案就在那里。它谈到了第一次转换到CIE实验室色彩空间。然后计算点之间的欧几里德距离,即 distance = sqrt(L*L + a*a + b*b)

Here是一个包含多个转换公式的网站,用于XYZ,RGB和LAB颜色空间。

答案 1 :(得分:2)

RGB值的欧氏距离不是对感知颜色相似性的良好估计。

您的链接页面上述以下问题:

  

实际上,双边滤波器允许适当地组合三个色带,并测量组合空间中像素之间的光度距离。此外,通过在CIE-Lab颜色空间中使用欧几里德距离,可以使该组合距离与感知的不相似性紧密对应。

因此,尝试在CIE-Lab色彩空间中使用euclidiean距离。

最好

拉斯

答案 2 :(得分:2)

CIE-Lab色彩空间测量颜色之间的距离工作正常。 但是将RGB数据转换为这些类型的色彩空间需要时间,这对于实时应用程序(尤其是移动应用程序)来说是不可取的。

我已检查opencvGPUImage代码。

opencv代码使用RGB通道之和的差异。

距离=(R1 + G1 + B1) - (R2 + G2 + B2)

GPUImage在GPU使用方面运行良好,与每个通道的欧氏距离完全吻合。

discante = sqrt((R1-R2)^ 2 +(G1-G2)^ 2 +(B1-B2)^ 2)

在实际情况下(我正在开发手机上的实时双边过滤器应用程序),这两种方法的工作原理相似。我相信,不是将RGB转换为CIE-Lab色彩空间,而是使用上述方法就足够了。