【问题标题】:What does this subtract_gaussian_blur function that uses the GaussianBlur function in OpenCV do?这个在OpenCV中使用GaussianBlur函数的subtract_gaussian_blur函数有什么作用?
【发布时间】:2019-07-18 21:06:37
【问题描述】:

我遇到了this Kaggle 内核,它具有以下功能。

def subtract_gaussian_blur(img):
    gb_img = cv2.GaussianBlur(img, (0, 0), 5)
    return cv2.addWeighted(img, 4, gb_img, -4, 128)

转换此 RGB 图像。

进入下图。

我可以看到效果是它稍微锐化了图像并将其变成了更灰度的图像(实际上不是灰度,因为图像仍然是 RGB)但我实际上不确定我是否完全理解函数中发生的事情即使在阅读了有关 GaussianBlur 和 addWeighted 的 OpenCV 文档之后。

另外,这个特定的图像转换是否有一个我可以进一步阅读的特定名称?

【问题讨论】:

    标签: opencv image-processing


    【解决方案1】:

    我可以看到的主要步骤是cv2.addWeighted(img, 4, gb_img, -4, 128)。 addWeighted 的基本方程是dst(I)=saturate(src1(I)∗alpha+src2(I)∗beta+gamma)。在此处的示例中,alpha 为 4,beta -4 和 gamma 128。

    我对其工作原理的理解是,它首先执行高斯模糊来制作图像的去噪版本。然而,除了去除噪声外,高斯模糊还可以“涂抹”边缘,这在后面很重要。然后它从原始版本中减去去噪版本,并为每个像素颜色通道添加 128。

    在原始像素与过滤后的像素相同的区域中,这将产生均匀的灰色区域。在原始像素和过滤像素差异很大的区域中,您最终会得到更亮或更暗的区域,具体取决于原始像素或过滤像素的强度是否更高。差异在原始图像的边缘附近最为明显,因为这些差异会被高斯模糊强烈“涂抹”。

    结果不是完全灰度,因为addWeighted() 分别应用于像素的每个颜色通道。前后模糊图像的 RGB 值以不平衡方式不同的区域(即两个红色通道之间的差异远大于蓝色或绿色通道之间的差异)将存在一定程度的颜色而不仅仅是灰色。

    【讨论】:

    • 这是一个很好且易于理解的答案:) 谢谢。
    • 很好的解释!关于名称:此函数减去平均值,但在本地计算。它也是高斯拉帕克算子(LoG算子)或高斯差(DoG算子)的粗略近似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2016-06-16
    • 2010-12-05
    • 2011-07-10
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多