簡體   English   中英

如何在python中將圖像寫為dicom?

[英]How to write an image as dicom in python?

我正在嘗試以python格式保存一組dicom格式的圖像。 我將僅提取PixelData字段,因此我嘗試使用最少的代碼/標簽來做到這一點。 我正在使用pydicom讀取文件:

ds = dicom.read_file(currentDir + file)
Image = ds.pixel_array 

不幸的是,似乎沒有函數dicom.write_file(filename,header = MakeOneUp)。 您能否建議最簡單的方法將numpy數組寫為dicom圖像,而不依賴於讀取dicoms /復制標題。 我正在嘗試使用以下示例:

from dicom.dataset import Dataset, FileDataset

file_meta = Dataset()
file_meta.MediaStorageSOPClassUID = '1.2.840.10008.5.1.4.1.1.2'
file_meta.MediaStorageSOPInstanceUID = "1.2.3"
file_meta.ImplementationClassUID = "1.2.3.4"

ds = FileDataset(FullPath, {}, file_meta=file_meta, preamble=b"\0" * 128)

ds.PatientName = "Test^Name"
ds.PatientID = "00-000-000"

# Set the transfer syntax
ds.is_little_endian = True
ds.is_implicit_VR = True

# Set creation date/time
dt = datetime.datetime.now()
ds.ContentDate = dt.strftime('%Y%m%d')
timeStr = dt.strftime('%H%M%S.%f')  # long format with micro seconds
ds.ContentTime = timeStr

但是,當我看到圖像時,它分解為:

ds.PixelData = Image[:,:,l]
# Alternatively 
# ds.pixel_array = np.ascontiguousarray(Image[:,:,l]), but this isn't a standard field?
ds.save_as(FullPath)

失敗並顯示錯誤:如果我嘗試執行此操作

np.ascontiguousarray(Image[:,:,l])

這不會將dicom.read_file還原為人類可讀的數組。

謝謝

PS:被要求進行錯誤回溯。

ds.PixelData = np.ascontiguousarray(Image[:,:,l]) 
ds.save_as(FullPath)

結果是:

Traceback (most recent call last):
  File "/home/m047659/Programs/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-078b166fa765>", line 1, in <module>
    ds.save_as(FullPath)
  File "/home/m047659/Programs/anaconda3/lib/python3.6/site-packages/dicom/dataset.py", line 491, in save_as
    dicom.write_file(filename, self, write_like_original)
  File "/home/m047659/Programs/anaconda3/lib/python3.6/site-packages/dicom/filewriter.py", line 356, in write_file
    write_dataset(fp, dataset)
  File "/home/m047659/Programs/anaconda3/lib/python3.6/site-packages/dicom/filewriter.py", line 200, in write_dataset
    write_data_element(fp, dataset[tag], dataset_encoding)
  File "/home/m047659/Programs/anaconda3/lib/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/home/m047659/Programs/anaconda3/lib/python3.6/site-packages/dicom/tagtools.py", line 21, in tag_in_exception
    raise type(e)(err)
ValueError: Invalid tag (7fe0, 0010): ndarray is not C-contiguous

您需要為PixelData分配一個Image的字節字符串表示形式。 圖像是一個numpy數組,需要掩蓋為一個字節字符串。

ds.PixelData = Image.tobytes()

您還需要設置其他與圖像相關的屬性,例如行,列,PixelRepresentation等,以便正確填充pixel_array。 參見http://dicom.nema.org/medical/dicom/2014c/output/chtml/part03/sect_C.7.6.3.html#sect_C.7.6.3.1.3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM