74373


画像の重ね合わせについてどなたかご教授お願い致します。

[code]

    import pydicom
    import matplotlib.pyplot as plt
    
    image1 = pydicom.dcmread('C0.dcm') #Startshotは3枚以上画像が必要です
    image2 = pydicom.dcmread('C45.dcm')
    image3 = pydicom.dcmread('C135.dcm')
    
    image_sum = image1.pixel_array + image2.pixel_array + image3.pixel_array
    img = plt.imshow(image_sum)
    img.set_cmap('gray')
    plt.axis('off')
    plt.margins(0,0)
    plt.gca().xaxis.set_major_locator(plt.NullLocator())
    plt.gca().yaxis.set_major_locator(plt.NullLocator())
    plt.savefig("Starshot.tiff", bbox_inches = 'tight', pad_inches = 0)
    
[/code]

というコードで画像の重ね合わせができるものに対して、フォルダを選択すれば同じように重ね合わせができるようにしたいと思っています。そこで、

[code]

    import pydicom
    import matplotlib.pyplot as plt
    
    images = pydicom.dcmread(r"C:\Users\tanim\OneDrive\デスクトップ\Star") 
    image_sum = images.pixel_array
    img = plt.imshow(image_sum)
    
    img.set_cmap('gray')
    plt.axis('off')
    plt.margins(0,0)
    plt.gca().xaxis.set_major_locator(plt.NullLocator())
    plt.gca().yaxis.set_major_locator(plt.NullLocator())
    plt.savefig("Starshot.tiff", bbox_inches = 'tight', pad_inches = 0)
    
[/code]

と変更してみたのですが、

[code]

      File "C:\Users\tanim\untitled11.py", line 11, in <module>
        images = pydicom.dcmread(r"C:\Users\tanim\OneDrive\デスクトップ\Star")
    
      File "C:\Users\tanim\anaconda\lib\site-packages\pydicom\filereader.py", line 861, in dcmread
        fp = open(fp, 'rb')
    
    PermissionError: [Errno 13] Permission denied: 'C:\\Users\\tanim\\OneDrive\\デスクトップ\\Star'
    
[/code]

とエラーが発生し、うまくいきません。  
修正すべき点はございますでしょうか。

よろしくお願いいたします。


CC BY-SA 4.0
2021-03-02T14:47:46.237
74370
2021-03-03T10:16:15.907
2021-03-03T10:16:15.907
3060
41571
question
python
画像の重ね合わせでフォルダ指定で複数ファイルを読み込めるようにしたい


`os.listdir()` でフォルダ内の DICOM 画像ファイルのパスを取得、`pydicom.dcmread()` で 1
ファイルづつ読み込んで、`sum()` で `pixel_array` を重ね合わせます。

[code]

    import os
    import pydicom
    import matplotlib.pyplot as plt
    
    dicom_dir = r"C:\Users\tanim\OneDrive\デスクトップ\Star"
    image_sum = sum([
      pydicom.dcmread(os.path.join(dicom_dir, f)).pixel_array
      for f in os.listdir(dicom_dir)
      if os.path.isfile(os.path.join(dicom_dir, f)) and f.endswith('.dcm')
    ])
    
    img = plt.imshow(image_sum)
    img.set_cmap('gray')
    plt.axis('off')
    plt.margins(0,0)
    plt.gca().xaxis.set_major_locator(plt.NullLocator())
    plt.gca().yaxis.set_major_locator(plt.NullLocator())
    plt.savefig("Starshot.tiff", bbox_inches = 'tight', pad_inches = 0)
    
[/code]


CC BY-SA 4.0
2021-03-02T15:59:38.950
74373
2021-03-02T16:10:05.300
2021-03-02T16:10:05.300
74370
answer