如何高斯滤波(模糊)浮点numpy数组

2024-09-28 20:50:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个类型为float64的numpy数组a。如何用高斯滤镜模糊这些数据?

我试过了

from PIL import Image, ImageFilter

image = Image.fromarray(a)
filtered = image.filter(ImageFilter.GaussianBlur(radius=7))

,但这会产生ValueError: 'image has wrong mode'。(它有模式F。)

我可以通过将a与某个常量相乘,然后舍入为整数来创建合适模式的图像。这应该行得通,但我想有一个更直接的方法。

(我用的枕头是2.7.0。)


Tags: 数据fromimageimportnumpy类型pil模式
2条回答

这是我只使用numpy的方法。 它是用一个简单的3x3内核准备的,稍加改动就可以使它与定制大小的内核一起工作。

def blur(a):
    kernel = np.array([[1.0,2.0,1.0], [2.0,4.0,2.0], [1.0,2.0,1.0]])
    kernel = kernel / np.sum(kernel)
    arraylist = []
    for y in range(3):
        temparray = np.copy(a)
        temparray = np.roll(temparray, y - 1, axis=0)
        for x in range(3):
            temparray_X = np.copy(temparray)
            temparray_X = np.roll(temparray_X, x - 1, axis=1)*kernel[y,x]
            arraylist.append(temparray_X)

    arraylist = np.array(arraylist)
    arraylist_sum = np.sum(arraylist, axis=0)
    return arraylist_sum

如果你有一个二维的numpy数组a,你可以直接在上面使用高斯滤波器,而不必先用枕头把它转换成图像。scipy有一个函数^{}做同样的事情。

from scipy.ndimage.filters import gaussian_filter

blurred = gaussian_filter(a, sigma=7)

相关问题 更多 >