繁体   English   中英

如何使用多个子目录中的系列的灰度图像创建4维ndarray

[英]How to create a 4 dimentional ndarray with the gray scale images of the series in the multiple subdirectories

在目录(A)中,存在4个子目录(a,b,c,d),每个子目录包含5个灰度MRI图像。 我可以通过以下代码在子目录(a)中创建3维ndarray。

path = "./A/a"
list = []
for root, dirs, files in os.walk(path):  
    for name in files:  
        list.append(os.path.join(root, name))  
list.sort() 
refds = pydicom.dcmread(list[0])
constpixeldims = (int(refds.Rows), int(refds.Columns), len(list))  
arraydicom = numpy.zeros(constpixeldims,dtype=refds.pixel_array.dtype)
for namedcm in list:
    ds = pydicom.dcmread(namedcm)  
    arraydicom[:,:,list.index(namedcm)] = ds.pixel_array

但是,我想创建一个包含所有4个子目录的4个维数ndarray。 通过4维ndarray,我想对MRI图像进行神经网络分析。

[另一个问题]通过以下代码,我可以创建一个3维数组。

for namedcm in dcmlist[0]:
ds = pydicom.dcmread(namedcm)  
arraydcm[:,:,dcmlist[0].index(namedcm)] = ds.pixel_array  

是否可以通过将dcmlist的数字从0更改为3来创建4维数组?

您可以执行以下操作:

import glob
import cv2
import numpy as np
import os


DIR = './A'

images = []
for sub_dir in os.listdir(DIR):
     print(sub_dir)
     images.append([cv2.imread(img) for img in glob.glob(DIR+os.sep+sub_dir+os.sep+'*')])


print(np.array(images).shape)   

您将获得以下形状(如果所有图像均为160x160):(4,5,160,160)。

如果出于某种原因想要形状(4,160,160,5),可以使用numpy.rollaxis

images = np.rollaxis(np.array(images),1,4)
#images.shape -> (4,160,160,5)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM