如何通过创建假 z 轴将 64x64 图像转换为 64x64x64 体积?

how to convert 64x64 images to 64x64x64 volumes by creating a fake z axis?

我正在尝试通过复制 MxN 值来创建假的 z 轴。例如,

假设我们有一个 4x4 矩阵

0 0 0 0 
0 1 2 0
0 3 4 0
0 0 0 0  

转换数组4x4x4后,下一个切片应该完全一样。

0 0 0 0 
0 1 2 0
0 3 4 0
0 0 0 0  

如果我们把它设为 4x4x4,如果我们从右边看,我们应该看到这样的体积:

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

旋转体积的下一个切片应该是:

0 0 0 0
2 2 2 2
4 4 4 4
0 0 0 0

你要实现的操作叫做广播。 您可以在 keras 文档或 numpy 文档中找到更多信息。 Here for example

使用 numpy 库(可以说它比 keras 或 tensorflow 更常见)。例如,您可以这样写。

import numpy as np
a = np.array([[0.0,1, 2, 3], [4, 5, 6, 7], [0.0, 10.0, 20.0, 30.0], [432, 342, 342, 12]])
b = np.zeros(a.shape[0])
c = a[:, :, np.newaxis] + b
print(c)

它提供了以下结果。

 array([[[  0.,   0.,   0.,   0.],
    [  1.,   1.,   1.,   1.],
    [  2.,   2.,   2.,   2.],
    [  3.,   3.,   3.,   3.]],

   [[  4.,   4.,   4.,   4.],
    [  5.,   5.,   5.,   5.],
    [  6.,   6.,   6.,   6.],
    [  7.,   7.,   7.,   7.]],

   [[  0.,   0.,   0.,   0.],
    [ 10.,  10.,  10.,  10.],
    [ 20.,  20.,  20.,  20.],
    [ 30.,  30.,  30.,  30.]],

   [[432., 432., 432., 432.],
    [342., 342., 342., 342.],
    [342., 342., 342., 342.],
    [ 12.,  12.,  12.,  12.]]])

作为全局注释,请记住,"volume" 这里是一个数学概念。在打印的方式中,第一、第二和第三维度是可交换的。

因此,这些结果在数学上也是正确的:

d = c.transpose()
print(d)

[[[  0.   4.   0. 432.]
  [  1.   5.  10. 342.]
  [  2.   6.  20. 342.]
  [  3.   7.  30.  12.]]

 [[  0.   4.   0. 432.]
  [  1.   5.  10. 342.]
  [  2.   6.  20. 342.]
  [  3.   7.  30.  12.]]

 [[  0.   4.   0. 432.]
  [  1.   5.  10. 342.]
  [  2.   6.  20. 342.]
  [  3.   7.  30.  12.]]

 [[  0.   4.   0. 432.]
  [  1.   5.  10. 342.]
  [  2.   6.  20. 342.]
  [  3.   7.  30.  12.]]]

e = d.transpose()
print(e)

[[[  0.   0.   0.   0.]
  [  1.   1.   1.   1.]
  [  2.   2.   2.   2.]
  [  3.   3.   3.   3.]]

 [[  4.   4.   4.   4.]
  [  5.   5.   5.   5.]
  [  6.   6.   6.   6.]
  [  7.   7.   7.   7.]]

 [[  0.   0.   0.   0.]
  [ 10.  10.  10.  10.]
  [ 20.  20.  20.  20.]
  [ 30.  30.  30.  30.]]

 [[432. 432. 432. 432.]
  [342. 342. 342. 342.]
  [342. 342. 342. 342.]
  [ 12.  12.  12.  12.]]]

您可以选择哪一个对您更友好。 希望对你有帮助。

您可以使用 numpy 库:

import numpy as np
a = np.array([[0, 0, 0, 0],
            [0, 1, 2, 0],
            [0, 3, 4, 0],
            [0, 0, 0, 0]])
a3d = np.dstack([a, a, a])

dstack() 类似于 hstack() 和 vstack()(我记住 h 代表水平,v 代表垂直,d 可能代表深度)。

如果你想使用纯python它可以像相乘列表一样简单。

a = [[0,0,0,0],[0,1,2,0],[0,3,4,0],[0,0,0,0]]
result = [a] * 4

现在结果是你的 3 维矩阵。