在使用PIL读取图像后,我通常会使用scipy.ndimage执行高斯滤波,如下所示。
import PIL
from scipy import ndimage
PIL_image = PIL.Image.open(filename)
data = PIL_image.getdata()
array = np.array(list(data)).reshape(data.size[::-1]+(-1,))
img = array.astype(float)
fimg = ndimage.gaussian_filter(img, sigma=sigma, mode='mirror', order=0)
PIL 中有高斯模糊函数,如下所示(参考这个答案),但我不知道它是如何工作的,使用了什么内核:
from PIL import ImageFilter
fimgPIL = PIL_image.filter(ImageFilter.GaussianBlur(radius=r)
PIL.ImageFilter.GaussianBlur
相关问题:
- 半径参数到底是什么,是否相当于标准差 σ?
- 对于给定的半径,它计算卷积核的范围有多远? 2σ? 3σ? 6σ?
这个评论 是关于 Gaussian Blur - standard deviation, radius and kernel size 答案的,但我还没有找到PIL的信息。
OpenCV 使用的卷积核半径为
(sigma * 3)
,而scipy.ndimage.gaussian_filter 使用的卷积核半径为 int(4 * sigma + 0.5)