Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 修改大量DICOM(.dcm)文件。_Python_Nested Lists_Dicom_Cv2 - Fatal编程技术网

Python 修改大量DICOM(.dcm)文件。

Python 修改大量DICOM(.dcm)文件。,python,nested-lists,dicom,cv2,Python,Nested Lists,Dicom,Cv2,这也许是一个简单的问题,但我没有取得进展,希望得到帮助 我有一张422号的单子。在索引0中,有135个指向.dcm映像的文件路径。例如,索引1中的“~/images/0001.dcm”和“~/images/0135.dcm”有112个图像路径,索引2有110个路径,等等 所有图像的大小均为512 x 512。我希望将它们的大小重新调整为64 x 64 这是我第一次同时处理图像和.dcm数据,所以我很不确定如何调整大小。如果您愿意,我也不确定如何访问和修改“内部”列表中的文件 像这样的事情是不是太

这也许是一个简单的问题,但我没有取得进展,希望得到帮助

我有一张422号的单子。在索引0中,有135个指向.dcm映像的文件路径。例如,索引1中的“~/images/0001.dcm”和“~/images/0135.dcm”有112个图像路径,索引2有110个路径,等等

所有图像的大小均为512 x 512。我希望将它们的大小重新调整为64 x 64

这是我第一次同时处理图像和.dcm数据,所以我很不确定如何调整大小。如果您愿意,我也不确定如何访问和修改“内部”列表中的文件

像这样的事情是不是太离谱了

IMG_PX_SIZE = 64 
result = []
for i in test_list:
    result_inner_list = []        
    for image in i:
    # resize all images at index position i and store in list
        new_img = cv2.resize(np.array(image.pixel_array (IMG_PX_SIZE,IMG_PX_SIZE))
        result_inner_list.append(new_img)
    # Once all images at index point i are modified, append them these to a master list.
    result.append(result_inner_list)

您似乎在为两个问题而挣扎:

  • 访问文件路径
  • 调整大小
为了让您获胜,最好将这两项任务分开,下面是示例代码

IMG_PX_SIZE = 64 

def resize(image):
    # your resize code here similar to:        
    # return v2.resize(np.array(image.pixel_array(IMG_PX_SIZE,IMG_PX_SIZE))
    pass

def read(path):
    # your file read operation here
    pass


big_list = [['~/images/0001.dcm','~/images/0135.dcm'],
            ['~/images/0002.dcm','~/images/0136.dcm']]

resized_images = [[resize(read(path)) for path in paths] for paths in big_list]

之后你想做什么?如果你像这样调整大小,你应该验证一些dicom字段,图像位置,像素间距等。。。我想最好的方法是在软件中重新打开dicom序列,如itk snap或slicer 3d等。。。并检查图像是否重叠。我不确定是否理解索引组织。为什么不能使用dicom标签对不同的序列进行排序?@p.deman感谢您的回复-数据是从医疗数据托管网站下载的。这是我第一次使用.dcm文件,所以我对格式的技术细节有点不确定。基本上,我有一个422大小的列表,代表422名患者。对于这些患者中的每一位,从他们的3d扫描到他们各自的.dcm文件都有大约90-140条路径。我正在培训一名CNN,希望将图像的大小从512 x 512调整到64 x 64。本质上,我有一个列表,每个索引中都有另一个DCM路径列表,我希望迭代打开并调整其大小。所有患者的所有文件都在同一文件夹中,或者每个患者都有子文件夹?如果所有文件都在同一个文件夹中,我建议先运行一次,以便根据标记正确分割序列。如果Dicom是匿名的,您可以使用标记:Series实例UID和研究ID。然后,您将为每个序列生成一个文件路径列表。要调整大小,如果重新保存为dicom文件,请不要忘记修改相应的dicom标记。例如行、列、像素间距,可能是图像位置,我认为cv2无法做到这一点。您可以始终使用您提到的“索引”,但这不是使用dicom时的“正确方式”。我们使用标签。@p.deman我不知道这一点。最终,将其保留为512X512格式并没有什么害处,但对我来说,这似乎相当大,例如,一名患者的大小可能为512 x 512 x 135(即,3d图像的135个切片)。对我来说,这对于训练神经网络来说似乎是相当大的。很好的发现。这正是我的两个问题。我现在就试试这段代码,看看能不能让它正常工作。谢谢,谢谢你的回答。我有一个关于你的代码的问题。在函数
def read(path):
中,具体用途是什么?对于大列表中的路径,
对于路径中的路径]对于大列表中的路径,
这段代码的
[[resize(read(path))对于路径中的路径]对于大列表中的路径]
是否没有访问所需的元素?如果您正确理解任务,您就有一个fielnames列表,它是类似于“~/images/0001.dcm”的字符串。您必须将fiel inself读入像素数组,这就是
read()
函数的目的。如上所述,您应该能够首先为一个fielname获得所需的结果,例如
resize(read(“~/images/0001.dcm”)
,检查它是否按预期工作,甚至可以使用一些
assert
语句,然后转向如何使此工作操作在列表(或列表列表)中的所有路径上工作的任务。对不起,听起来很抱歉,谢谢。这很有道理。不幸的是,我在尝试缩小这些图像的大小时仍然收到错误。属性或类型错误取决于我尝试调整大小的方式。我不熟悉.dcm,但它的行为似乎与标准.jpeg有所不同