【发布时间】:2018-11-15 06:37:11
【问题描述】:
我要做的是获取一个表示 3D 图像数据的 numpy 数组,并计算每个体素的粗麻布矩阵。我的输入是一个形状矩阵 (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]]]
但这很麻烦,我不能轻松地对数据进行切片。
我尝试过如下使用 reshape
H = H.reshape(Z, X, Y, 3, 3)
但是当我通过检索特定体素的粗麻布来测试时,从重新整形的数组返回的值与原始数组完全不同。
我想我可以以某种方式使用 zip,但我只能找到用于制作元组列表的方法。
- 奖励:如果有更快的方法来完成此任务,请告诉我,我基本上需要为 3D 数据集中的每个体素计算 hessian 矩阵的三个特征值。计算粗麻布值非常快,但找到单个 2D 图像切片的特征值大约需要 20 秒。是否有任何用于图像处理的 GPU 或张量流加速库?
【问题讨论】:
-
[无耻插件] 你应该尝试使用PyDIP。在那里你可以做
H = dip.Hessian(img); D,V = dip.EigenDecomposition(H),返回一个带有特征值的对角矩阵图像D和一个带有特征向量的矩阵图像V。在这些图像中,H[x,y,z]返回索引(x,y,z)处像素的 Hessian 矩阵。
标签: python numpy image-processing hessian-matrix