Python 基于NumPy的自适应高斯滤波

Python 基于NumPy的自适应高斯滤波,python,numpy,image-processing,filtering,ndimage,Python,Numpy,Image Processing,Filtering,Ndimage,在具有静态sigma值的图像上运行高斯滤波器很容易: scipy.ndimage.gaussian_filter(input, sigma) 但是如何使用每个像素不同的sigma值来实现这一点呢?例如,我可能有另一个大小相同的NumPy数组,用于指示每个像素使用什么sigma。我不知道OpenCV、scipy.ndimage或scikit image中有自适应高斯滤波器实现。确实有这样一个过滤器(披露:我是作者)。您可以使用pip install diplib安装它 这就是如何使用自适应高斯滤

在具有静态sigma值的图像上运行高斯滤波器很容易:

scipy.ndimage.gaussian_filter(input, sigma)

但是如何使用每个像素不同的
sigma
值来实现这一点呢?例如,我可能有另一个大小相同的NumPy数组,用于指示每个像素使用什么sigma。

我不知道OpenCV、scipy.ndimage或scikit image中有自适应高斯滤波器实现。确实有这样一个过滤器(披露:我是作者)。您可以使用
pip install diplib
安装它

这就是如何使用自适应高斯滤波器的方法,其中只有内核的大小发生变化(此函数还可以旋转拉长的高斯滤波器,它非常简洁,我建议您使用它!)

将diplib作为dip导入
img=dip.ImageRead('examples/trui.ics')
#我们需要一个图像来指示每个像素的内核方向,
#我们只是将其设置为0
方向=img.相似('SFLOAT')
方向。填充(0)
#我们需要一个图像来指示每个像素的内核大小,
#这是你的NumPy阵列
比例=倾角CreateRadiusCoordinate(img.Sizes())/200
#这就是函数。“scale”图像中的内核大小相乘
#根据这里给出的sigmas
out=倾角自适应高斯(img,[方向,刻度],sigmas=[5,5])
dip.ImageWrite(img,'so_in.jpg')
dip.ImageWrite(out,'so_out.jpg')

请注意,到DIPlib的Python绑定中的图像对象与NumPy数组兼容。

您可能没有在ndimage中实现这一点。DIPlib确实有一个实现,或者您可以自己实现。你有几个不同的西格玛值,还是有很多不同的值?我问这个问题是因为有一条捷径可以解决很少的sigma问题,那就是对每个像素进行不同的模糊处理。还有一张“图片”上写着,每个像素应该模糊多少。将尝试一下DIPlib-谢谢你@CrisLuengo