关于高斯核卷积与高斯模糊结果差异的技术疑问
关于高斯核卷积与高斯模糊结果差异的技术疑问
我在寻找生成空间变化噪声的方法时,找到了一个能实现需求的方案,但对其中代码的工作原理有点困惑。
根据我的理解,代码第一步是生成高斯核:
import numpy as np import scipy.signal import matplotlib.pyplot as plt # Compute filter kernel with radius correlation_scale (can probably be a bit smaller) correlation_scale = 150 x = np.arange(-correlation_scale, correlation_scale) y = np.arange(-correlation_scale, correlation_scale) X, Y = np.meshgrid(x, y) print(X.shape,Y.shape) dist = np.sqrt(X*X + Y*Y) filter_kernel = np.exp(-dist**2/(2*correlation_scale))
这个核可视化后呈现出中心明亮、向外逐渐变暗的圆形渐变效果。
第二步是生成随机噪声网格:
n = 512 noise = np.random.randn(n, n)
这个噪声图是布满随机明暗斑点的网格,没有明显规律。
第三步是将第二步生成的随机噪声与第一步的滤波器进行卷积:
noise1 = scipy.signal.fftconvolve(noise, filter_kernel, mode='same')
这一步的输出呈现出大尺度的平滑明暗区域变化,看起来像是缓慢起伏的“云状”图案。
我的疑问是:为什么第三步的输出会是这个样子,而不是随机噪声的平滑版本?卷积高斯核不就相当于高斯模糊吗?比如,如果我用高斯滤波器处理生成的随机噪声:
from scipy.ndimage import gaussian_filter noise = gaussian_filter(noise , sigma=1, radius=10)
得到的结果是模糊后的细密斑点,和第三步的“云状”图案差异很大。
为什么这两张结果图会如此不同?
备注:内容来源于stack exchange,提问作者MollieVX




