将图像的3D numpy数组堆栈重塑为向量,然后恢复为3D,保留图像结构

2024-10-03 17:22:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我从时间的重复意象中观察到了变化。我有一个3D numpy数组,它应该表示一个由2个图像组成的堆栈,每个图像3x3像素(为了简单起见-形状:2×3×3):

x = np.array([
    [
        [1,2,3],
        [4,5,6],
        [7,8,9]
    ],
    [
        [10,11,12],
        [13,14,15],
        [16,17,18]
    ]
])

我对它进行了转置和重塑,现在我有了“时间像素向量”,如下所示:

y = x.transpose(2,1,0).reshape(-1, x.shape[0])

>>> array([[ 1, 10],
       [ 4, 13],
       [ 7, 16],
       [ 2, 11],
       [ 5, 14],
       [ 8, 17],
       [ 3, 12],
       [ 6, 15],
       [ 9, 18]])

我做了一些科学计算,最后得到了每个像素向量的布尔值,评估了某些特征:

>>> array([[ True, False, True],
       [ True, True, True],
       [False, False, True],
       [False, False, False],
       [ True, False, True],
       [ True, False, True],
       [ True, False, True],
       [ True, True, True],
       [False, False, True]])

现在,我如何将这个数组重塑/转换为(特征数)×3×3的形状,并保持单个图像像素的逻辑顺序,如在数组x中

如有需要,我会进一步澄清。 谢谢


Tags: 图像numpyfalsetrue堆栈np时间像素
1条回答
网友
1楼 · 发布于 2024-10-03 17:22:55

您可以使用y(不是掩码)来验证是否成功地重建了x,但本质上,在重新整形之前跟踪中间数组的形状,只需重新整形为该形状并再次转置:

y_t = x.transpose(2,1,0) # same as x.T
y = y_t.reshape(-1, x.shape[0])

y.reshape(y_t.shape).T
array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9]],

       [[10, 11, 12],
        [13, 14, 15],
        [16, 17, 18]]])

否则,也可以仅使用初始阵列的形状作为参考:

y = x.transpose(2,1,0).reshape(-1, x.shape[0])
y.reshape(x.shape[::-1]).T
array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9]],

       [[10, 11, 12],
        [13, 14, 15],
        [16, 17, 18]]])

相关问题 更多 >