将DICOM图像和轮廓转换为numpy数组

nxowjjhe  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(109)

我一直在使用dicom-contour包将DICOM图像和轮廓转换为numpy数组。当我调用cfile 2 pixels函数返回给定轮廓文件的img_image和contour_image对列表时,我得到了这个错误:FileNotFound
[错误2]没有这样的文件或目录:'/content/drive/MyDrive/MRIplusGd-with-Contour/1.2.840.113619.2.388.10502719.2140823.14003.1697945075.89.dcm'
轮廓是RTSS文件格式,而我目录中的MRI图像命名为“IMG00000000.dcm”。但是,该函数查找具有不同命名约定的图像。我如何解决这个问题?
https://github.com/KeremTurgutlu/dicom-contour/blob/master/tutorial.ipynb

from dicom_contour.contour import \*
def get_contour_file(path):
    """
    Get contour file from a given path by searching for ROIContourSequence
    inside dicom data structure.
    """
    # handle `/` missing
    if path[-1] != '/': path += '/'
    # get .dcm contour file
    fpaths = [path + f for f in os.listdir(path) if '.dcm' in f]
    n = 0
    for fpath in fpaths:
        f = dicom.read_file(fpath)
        if 'ROIContourSequence' in dir(f):
            contour_file = fpath.split('/')[-1]
            n += 1
    if n > 1: warnings.warn("There are multiple files, returning the last one!")
    return contour_file

个字符

gopyfrb3

gopyfrb31#

您使用的dicom_contour库似乎希望图像文件根据contour数据集中的ReferencedSOPInstanceUID命名。相关行从此处开始,如下所示:

img_ID = contour_dataset.ContourImageSequence[0].ReferencedSOPInstanceUID
img = dicom.read_file(path + img_ID + '.dcm')

字符串
你必须自己修改这个库,让它以不同的方式工作。我建议你这样做(未经测试):

from pathlib import Path
from pydicom import dcmread

img_path = "your/path/to/images"
image_datasets = [dcmread(filename) for filename in Path(img_path).glob("*.dcm")]
iUID_to_filename = {ds.SOPInstanceUID: ds.filename for ds in image_datasets if 'PixelData' in ds}


然后将库中的第二行更改为:

img = dcmread(Path(path) / iUID_to_filename[img_id])


注意这里我使用的是dcmread而不是read_fileread_file已经过时了。你还需要在其他库中使用import Pathfrom pydicom import dcmread
当然,还有其他方法可以做到这一点。例如,在上面的代码中,图像文件已经被读入,因此您可以更改dicom_contour函数的参数,直接传入image_datasets,而不是再次阅读它们。

相关问题