首页 > 解决方案 > 通过数组循环过滤器的有效方法

问题描述

所以我正在做这门课程,在这个练习中,我必须使用数组的 3x3 区域来模糊图像,并将所有值换成平均值。所以我写了这个我知道仍然不能完全工作的函数:

def replace_avg(img, block=3):
    x_dim, y_dim = img.shape
    for row in range(1,x_dim-block+2,3):
        for col in range(1,y_dim-block+2,3):
            img[row-(block-2):row+(block-1),col-(block-2):col+(block-1)] = np.average(img[row-(block-2):row+(block-1),col-(block-2):col+(block-1)])
    return img

我的问题是有没有一种更有效的方法可以使用 numpy 使用 3x3 过滤器循环遍历这个数组?

标签: pythonnumpyimage-processing

解决方案


skimage 包提供了一个完全符合您要求的功能:

from skimage import transform
img_rescaled = transform.rescale(img,1/block)

也许您正在寻找专门使用 Numpy 的解决方案,在这种情况下,您应该查看该函数在 skimage 模块中的编码方式


推荐阅读