Python 使用numpy逐像素矢量化两组窗口图像之间的误差计算

Python 使用numpy逐像素矢量化两组窗口图像之间的误差计算,python,image,numpy,vectorization,Python,Image,Numpy,Vectorization,我正在尝试计算(每个图像的)两个窗口图像集逐像素之间的误差。为了做到这一点,我将编码的img的值减去原始img。 完成后,我想计算每个像素到0的距离(使用RGB图像的3维)。我现在搜索的结果是一个与原始数据形状相同但只有一维的新矩阵(l2_矩阵) 我使用的代码是: n_windows_max, n_imgs_window_max, x_max, y_max, n_dim = diff_matrix.shape l2_matrix = np.zeros((n_windows_max,n_imgs

我正在尝试计算(每个图像的)两个窗口图像集逐像素之间的误差。为了做到这一点,我将编码的img的值减去原始img。 完成后,我想计算每个像素到0的距离(使用RGB图像的3维)。我现在搜索的结果是一个与原始数据形状相同但只有一维的新矩阵(l2_矩阵)

我使用的代码是:

n_windows_max, n_imgs_window_max, x_max, y_max, n_dim = diff_matrix.shape

l2_matrix = np.zeros((n_windows_max,n_imgs_window_max,x_max, y_max, 1))

n_window = 0
n_img_window = 0
x_i = 0
y_i = 0

for n_window in range(n_windows_max): # read each window
  for n_img_window in range(n_imgs_window_max): #read all the images of each window
    for x_i in range(x_max): 
      for y_i in range(y_max): 
        a0 = diff_matrix[n_window, n_img_window, x_i, y_i, 0]
        a1 = diff_matrix[n_window, n_img_window, x_i, y_i, 1]
        a2 = diff_matrix[n_window, n_img_window, x_i, y_i, 2]

        a = array([a0, a1, a2])
        l2_matrix[n_window, n_img_window, x_i, y_i, 0] = norm(a)

正如你所见,我有一个5维矩阵,形状是:(窗口数量,每个窗口中的图像数量,x轴,y轴,维度数量)。上面的代码工作得很好,但我想改进它。我曾尝试将其矢量化,但我不知道如何正确地执行(我读过一些文章,其中有如何执行的示例,但出于更简单的目的,我无法将其外推到这个问题上)。

您可以定义要计算范数的轴

例如,这里第一窗口的第一个图像的前三个通道像素的范数:

np.linalg.norm(diff_matrix[:1, :1, :1, :1], axis=4)

因此,您可以将
l2\u矩阵定义为:

l2_matrix = np.linalg.norm(diff_matrix, axis=4)
作为
n\u windows\u max,n\u imgs\u window\u max,x\u max,y\u max
的维度

如果您在末端需要额外的尺寸,您可以:

l2_matrix.reshape(*l2_matrix.shape, 1)