我有一个
HxWxN
图像 arr
,我想要对其进行高斯模糊。
scipy.ndimage.gaussian_filter
似乎将图像视为通用数组,并且还沿着最终通道维度进行模糊处理。所需的行为是对所有 arr[:, :, i]
独立进行高斯模糊 i
,然后将所得切片连接回 HxWxN
结果数组。
是否有更好的库或函数可以用来直接实现这一目标,或者我真的需要将
scipy.ndimage.gaussian_filter
放入 i
的 for 循环中?
额外的问题是,如果我将 M 张图像组织为
MxHxWxN
数组会怎样?如何仅模糊 H 和 W 尺寸?
scipy.ndimage.gaussian_filter
要仅对标准差为 1.6 的
H
xW
xH
图像 W
的空间维度 N
和 arr
进行高斯模糊,请使用:
std=1.6
gaussian_filter(arr, sigma=(std, std, 0))
根据 SciPy Docs
scipy.ndimage.gaussian_filter
允许通过将标量序列传递给参数 sigma 来单独指定每个轴的标准导数:
sigma:标量或标量序列
高斯核的标准差。高斯滤波器的标准差以序列或单个数字的形式针对每个轴给出,在这种情况下,所有轴的标准差都相等。
将轴的 sigma 设置为
0
表示在该方向上不进行过滤。
如果仅给 sigma 一个标量,则图像的空间维度和 RGB 通道都会一起模糊,从而导致图像不饱和。
对于形状为
M
的 MxHxWxN
图像数组,您可以设置 sigma=(0,std, std, 0)
快速查看 scipy.ndimage.gaussian_filter
gaussian_filter1d
仅适用于那些具有 sigma > 1e-15
的维度。如果 sigma=0
不是
> 1e-15
,则跳过此维度的过滤。所以这个解决方案不应该引起任何不必要的计算。
cv2.GaussianBlur()
正是这样做的:它独立地模糊每个通道,并且图像可以具有任意数量的通道。