重塑numpy数组

时间:2018-11-15 06:37:11

标签: python numpy image-processing hessian-matrix

我想做的是获取一个表示3D图像数据的numpy数组,并为每个体素计算hessian矩阵。我的输入是一个形状为(Z,X,Y)的矩阵,我可以轻松地沿z切片并检索单个原始图像。

gx, gy, gz = np.gradient(imgs)

gxx, gxy, gxz = np.gradient(gx)
gyx, gyy, gyz = np.gradient(gy)
gzx, gzy, gzz = np.gradient(gz)

我可以按如下方式访问单个体素的粗麻布:

x = 100
y = 100
z = 63

H = [[gxx[z][x][y], gxy[z][x][y], gxz[z][x][y]],
     [gyx[z][x][y], gyy[z][x][y], gyz[z][x][y]],
     [gzx[z][x][y], gzy[z][x][y], gzz[z][x][y]]]

但这很麻烦,我无法轻松地对数据进行切片。

我已经尝试过按照以下方式使用重塑

H = H.reshape(Z, X, Y, 3, 3) 

但是,当我通过检索特定体素的hessian进行测试时,从重整形数组返回的值与原始数组完全不同。

我认为我可以以某种方式使用zip,但是我只能找到它来制作元组列表。

  • 奖金:如果有更快的方法可以完成此操作,请告诉我,我本质上需要为3D数据集中的每个体素计算hessian矩阵的三个特征值。计算hessian值的速度确实很快,但是找到单个2D图像切片的特征值大约需要20秒。是否有用于图像处理的GPU或张量流加速库?

1 个答案:

答案 0 :(得分:2)

我们可以使用列表理解来获得粗麻布-

[np.gradient(i) for i in np.gradient(imgs)]

仅需说明一下:np.gradient循环遍历(3 x 3)调用的两个输出级别,从而在外两个轴上产生H_all形的张量。我们需要将这两个作为最终输出中的最后两个轴。因此,我们将它们移到最后。

因此,x,y,z拥有所有的粗麻布,因此我们可以提取给定x = 100 y = 100 z = 63 H = H_all[z,y,x] 的特定粗麻布,就像这样-

<?php echo "<li><a href='edit.php?userId=${row['id']}'>Edit</a></li>"?>