我正在做一些图像处理,我需要做的事情之一是计算5x5平方像素的平均偏差和标准差,并将这些值分配给一个与5x5平方的中心像素相同的索引的数组(平均值和标准差可以用于独立的2D阵列)。我现在的做法是:
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数组。
有人能给我一些建议吗?我可以把它优化成跑得更快吗?提前谢谢你。
发布于 2022-02-22 19:20:02
使用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))https://stackoverflow.com/questions/71227099
复制相似问题