Как создать цикл в пользовательском интерактивном скрипте, который может добавлять любое количество тегов в серии изображений? - PullRequest
0 голосов
/ 03 мая 2019

Я хочу зациклить тэги dicom и серии изображений в моем скрипте в интерактивном режиме. Но я не могу создать цикл, который может спросить пользователя: Хотите изменить или добавить теги? если добавить то Сколько тегов вы хотите добавить? и если нет тогда какие теги вы хотите изменить? а затем попросить детали тегов, а затем добавить их в мою серию изображений ..

Я написал интерактивный сценарий пользователя, которым я поделюсь с вами, который может попросить пользователя добавить любые два тега в любую серию изображений (MRI, PET или CT).

tag1 = input("Enter the tag: ")
VR1 = input("Enter VR: ")
Value1 = input("Enter the value at VR: ")
tag2 = input("Enter the tag: ")
VR2 = input("Enter VR: ")
Value2 = input("Enter the value at VR: ")
for imagePath in image_path_list:
    image = dcmread(imagePath)   
    image.add_new(tag1, VR1, Value1)
    image.add_new(tag2, VR2, Value2)
    image.add_new(0x00180020, 'CS', 'GR')
    image.add_new(0x00180021, 'CS', 'SP\OSP')
    src_fname, ext = os.path.splitext(imagePath)
                                           '''

Я ожидаю, что мои теги и серии изображений будут проходить в интерактивном режиме.

1 Ответ

0 голосов
/ 04 мая 2019

Приведенный ниже код запросит количество тегов и значений для ввода.Это предполагает, что все теги находятся в словаре DICOM, и в этом случае вам не нужен VR;Pydicom будет искать его.Благодаря последнему коду в репозитории pydicom тегом также может быть ключевое слово DICOM, например, «PatientName», «PatientID».

В соответствии с обычным присвоением pydicom, код будет изменять элемент данных, если он уже существует;в противном случае он будет добавлен.

Все наборы данных изменяются одинаково.Если это не то, что вам нужно, вы можете сначала выполнить цикл по наборам данных и вводить теги и значения только для этого набора данных.

from pydicom import dcmread
from pydicom.tag import Tag
import glob

image_path_list = glob.glob(r"c:\temp\dicom\*.dcm")

datasets = [dcmread(filepath) for filepath in image_path_list]

print("\n\nEnter tag=value, one per line. When done, enter blank and datasets will be written)")
while True:
    pair = input("Enter in form tag=value...:")
    if pair == "":
        break

    if "=" not in pair:
        print("Entry must contain an = sign")
        print()
        continue

    # Parse line, stripping away extra spaces        
    tag, value = [x.strip() for x in pair.split("=")]

    try:
        tag = Tag(tag)
    except:
        print("Tag not in a valid format")
        print()
        continue

    for ds in datasets:
        ds[tag].value = value

# Write all the modifications:
for ds in datasets:
    ds.save_as(ds.filename)

Пример использования:

Enter in form tag=value...:0x100010=Lastname^Firstname
Enter in form tag=value...:0x100020=id123
Enter in form tag=value...:SliceLocation=23.5
Enter in form tag=value...:
...