更快地计算大型阵列的均值和标准差
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))
我正在做一些图像处理,我需要做的一件事是计算 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))