我遇到了具有以下功能的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文档之后。
此外,这种特殊的图像转换是否具有我可以进一步阅读的特定名称?
答案 0 :(得分:3)
我可以看到的主要步骤是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值以不平衡方式变化的区域(即,两个红色通道之间的差异远大于蓝色或绿色通道之间的差异),将有一定程度的颜色,而不仅仅是灰色。 / p>