更快地计算大型阵列的均值和标准差

Quicker Mean and Standard Deviation Calculation for Large Array

我正在做一些图像处理,我需要做的一件事是计算 5x5 像素平方的均值和标准差,并将这些值分配给与 5x5 中心像素具有相同索引的数组平方(平均值和标准差可以去单独的二维数组)。目前我这样做的方式是:

for i in range(2, num_rows+2, 1):
    for j in range(2, num_cols+2, 1):
        #enter pixel values of 5x5 cluster into a list
        pixel_list = [padded_grey[i-2,j-2],padded_grey[i-2,j-1],padded_grey[i-2,j],padded_grey[i-2,j+1],padded_grey[i-2,j+2],padded_grey[i-1,j-2],padded_grey[i-1,j-1],padded_grey[i-1,j],padded_grey[i-1,j+1],padded_grey[i-1,j+2],padded_grey[i,j-2],padded_grey[i,j-1],padded_grey[i,j+1],padded_grey[i,j+2],padded_grey[i+1,j-2],padded_grey[i+1,j-1],padded_grey[i+1,j],padded_grey[i+1,j+1],padded_grey[i+1,j+2],padded_grey[i+2,j-2],padded_grey[i+2,j-1],padded_grey[i+2,j],padded_grey[i+2,j+1],padded_grey[i+2,j+2],padded_grey[i,j]]

        #calculate mean and standard deviation of values in list and enter into index of central pixel
        mean_vals[i-2,j-2] = np.mean(pixel_list)
        stddev_vals[i-2,j-2] = np.std(pixel_list)

for 循环移动 2 个索引的原因是数组 padded_grey 被零填充以防止当我靠近循环的边缘时出现“超出范围”错误大批。当然,这需要很长时间才能完成执行,因为我必须逐个像素地遍历整个 1024x1280 数组。

有人可以建议我可以优化它以更快 运行 的方法吗?提前谢谢你。

使用sliding_window_view:

window_view = np.lib.stride_tricks.sliding_window_view(pixel_array, (5, 5))

window_view_mean = window_view.mean(axis=(2, 3))
window_view_std = window_view.std(axis=(2, 3))