是否可以将三维阵列转换为坐标系?

2024-05-20 17:33:45 发布

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

是否可以将3D阵列转换为坐标系?我的数组由0和1组成。如果该值为1,我希望采用xyz坐标。最后,我想将所有坐标输出到csv文件

import nibabel as nib

coord = []
img = nib.load('test.nii').get_fdata().astype(int)

test.nii阵列:

[[[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 1 ... 1 1 0]
  ...
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 1 1 1]
  [0 1 0 ... 0 0 0]]

 [[1 0 0 ... 0 0 0]
  [0 0 1 ... 0 0 0]
  [0 1 0 ... 0 0 0]
  ...
  [0 1 0 ... 0 0 0]
  [0 1 0 ... 0 0 0]
  [0 0 0 ... 1 0 0]]

 [[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 1 0]
  [0 0 0 ... 0 0 0]
  ...
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 1 0 ... 0 1 1]]

 ...

 [[0 0 0 ... 1 0 0]
  [0 0 1 ... 0 0 0]
  [0 0 1 ... 0 0 0]
  ...
  [0 0 0 ... 1 0 0]
  [0 0 0 ... 1 0 0]
  [0 0 0 ... 1 0 0]]

 [[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 1]
  ...
  [0 1 0 ... 0 0 0]
  [1 0 0 ... 0 0 0]
  [1 0 0 ... 0 0 0]]

 [[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  ...
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 1 0]
  [0 1 0 ... 0 0 0]]]

Tags: 文件csvtestimportimggetasload
2条回答

使用^{}可以获得满足条件的元素的行、列和深度索引。 试试这个:

row_idx, col_idx, depth_idx = np.where(img==1)

这可能不一定是最好的解决方案,但让我们保持简单(如果框架能为我们做到这一点,那就太好了,但是……嗯):

data = [[[0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0],
         [0, 0, 1, 1, 1, 0],
         [0, 0, 0, 0, 0, 0],
         [0, 0, 0, 1, 1, 1],
         [0, 1, 0, 0, 0, 0]],
        [[1, 0, 0, 0, 0, 0],
         [0, 0, 1, 0, 0, 0],
         [0, 1, 0, 0, 0, 0],
         [0, 1, 0, 0, 0, 0],
         [0, 1, 0, 0, 0, 0],
         [0, 0, 0, 1, 0, 0]]]

for x in range(len(data)):
    for y in range(len(data[x])):
        for z in range(len(data[x][y])):
            if data[x][y][z] == 1:
                print(f"{x} {y} {z}")

收益率:

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

相关问题 更多 >