【问题标题】:Problem with assigning 2d array as a one slice of 3d array将 2d 数组分配为 3d 数组的一个切片的问题
【发布时间】:2022-01-27 04:36:16
【问题描述】:

我尝试将一系列 DICOM 文件加载到 3d 数组中。我这样做很糟糕,因为我遇到了这样的错误(不流利地使用 Python): ValueError: 无法将输入数组从形状 (512,512) 广播到形状 (512,117)。

我不明白为什么,因为我将形状指定为 (512,512,117)

import os
from pathlib import Path
import numpy
from pydicom import dcmread
#from pydicom.data import get_testdata_file

# fetch the path to the test data
path = 'C:/Users/tykab/Downloads/DICOM/MH DICOM + images/MH example DICOM/IMediaExport/DICOM/PAT_0000/STD_0000/SER_0003/OBJ_0001/IM_0001.dcm'
ds = dcmread(path)
root_dir = Path(ds.filename).resolve().parent
print(f'Root directory: {root_dir}\n')



files = []

for file in os.listdir(root_dir):
    files.append(file)
print(files)

data = []
s = (512,512,117)
pixel_data = numpy.zeros(s)
print (pixel_data)
for i in files:
    path_file = f'C:/Users/tykab/Downloads/DICOM/MH DICOM + images/MH example DICOM/IMediaExport/DICOM/PAT_0000/STD_0000/SER_0003/OBJ_0001/{files[0]}'
    data.append(dcmread(path_file))


for i in range(117):
    pixel_data[:][:][i] = data[i].pixel_array[:][:]

print(pixel_data)

【问题讨论】:

  • [:] 没有任何用处。使用pixel_data[:,:,i]
  • 您可能想要使用 117,512,512 数组并将 512x12 数组分配给第一个维度。比如:x = np.ndarray([117,512,512]) 然后 x[i] = pixel_array

标签: python numpy image-processing pydicom medical-imaging


【解决方案1】:

尝试将尺寸更改为 117x512x512 并分配给第一个尺寸,例如:

import os
from pathlib import Path
import numpy
from pydicom import dcmread
#from pydicom.data import get_testdata_file

# fetch the path to the test data
path = 'C:/Users/tykab/Downloads/DICOM/MH DICOM + images/MH example DICOM/IMediaExport/DICOM/PAT_0000/STD_0000/SER_0003/OBJ_0001/IM_0001.dcm'
ds = dcmread(path)
root_dir = Path(ds.filename).resolve().parent
print(f'Root directory: {root_dir}\n')



files = []

for file in os.listdir(root_dir):
    files.append(file)
print(files)

data = []
s = (117,512,512)
pixel_data = numpy.zeros(s)
print (pixel_data)
for i in files:
    path_file = f'C:/Users/tykab/Downloads/DICOM/MH DICOM + images/MH example DICOM/IMediaExport/DICOM/PAT_0000/STD_0000/SER_0003/OBJ_0001/{files[0]}'
    data.append(dcmread(path_file))


for i in range(117):
    pixel_data[i] = data[i].pixel_array

print(pixel_data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2016-03-17
    • 2021-10-28
    相关资源
    最近更新 更多