为了研究cv2.GaussianBlur()内部的计算逻辑
可以分为两部分,第一步获取高斯核, 第二步滑动窗口进行卷积操作.
ta = cv2.GaussianBlur(da, (kernel, kernel), 0)
(1)设高斯kernel=3,sigma=0, 可得高斯核为:
ka = gaussian_kernel_2d(kernel, 0)
(2)使用高斯核进行卷积, 为了方便, 这里不考虑位于矩阵边界的值, 可得高斯模糊的结果:
radium = kernel//2
rows, cols = db.shape
result2 = copy.deepcopy(db)
for i in range(radium, rows-radium, 1):
for j in range(radium, rows-radium, 1):
result2[i, j] = (db[i-radium:i+radium+1, j-radium:j+radium+1] * ka).sum()
(3)与直接使用cv2.GaussianBlur的计算结果保持一致.
另外,经计算发现,borderType=cv2.BORDER_CONSTANT时, 边界填充值为0.
参考资料:
https://blog.csdn.net/weixin_37804469/article/details/113843829?spm=1001.2101.300