2016-12-12 4 views
0

Ich versuche derzeit, eine private DICOM-Tag, die Probleme mit einer Strahlentherapie Behandlung verursacht, mit Pydicom in Python zu bearbeiten. Etwas von einem Python-Neuling hier, also ertragen Sie mit mir.Ich versuche, private dicom-Tag zu bearbeiten

Die Dicom-Datei importiert korrekt in Python; Ich habe einen Teil der Produktion im ersten Bild von den Befehlen

ds = dicomio.read_file("xy.dcm") 
print(ds) 

Dies gibt die folgenden Daten angehängt: pydicom output

Der Tag markiert ist diejenige, die ich bearbeiten muß.

Beim Versuch, so etwas wie

ds[0x10,0x10].value 

Dies gibt die korrekte Ausgabe:

'SABR Spine' 

jedoch etwas entlang der Linien von

ds[3249,1000] 

oder

ds[3249,1000].value 
versuchen

gibt die folgende Ausgabe:

> Traceback (most recent call last): 
    File "<pyshell#64>", line 1, in <module> 
    ds[3249,1000].value 
    File "C:\Users\...\dataset.py", line 317, in __getitem__ 
    data_elem = dict.__getitem__(self, tag) 
KeyError: (0cb1, 03e8) 

Wenn ich den Zugriff versuchen [3249,1010] über die gleiche Methode, es gibt eine KeyError von (0cb1, 03f2).

Ich habe versucht, den Tag der _dicom_dict.py-Datei hinzufügen, wie im zweiten Bild hervorgehoben:

end of _dicom_dict.py

ich das richtig gemacht? Ich bin nicht einmal sicher, ob ich die Tags richtig bin Zugriff - mit

ds[300a,0070]

gibt mir ‚Syntax: ungültige Syntax‘ als die Ausgabe, zum Beispiel, auch wenn dies in der Datei als Fraktion vorhanden ist Gruppensequenz. Ich wurde auch darauf aufmerksam gemacht, dass [3249,1000] irgendwie mit [3249,1010] verbunden ist, und anscheinend, da sie proprietäre Tags sind, können sie nicht in Matlab bearbeitet werden, jedoch wurde vorgeschlagen, dass sie aus irgendeinem Grund in Python bearbeitet werden könnten .

Vielen Dank

Antwort

1

Es ist wie Ihr dicomio Lookup sieht wandelt alle Eingaben in hexadezimal.

Sie könnten versuchen:

ds[0x3249,0x1000] 

Diese jede gezwungene Umwandlung in hexadezimalen verhindern sollte.

Sie können sie scheinbar direkt als Strings zugreifen:

ds['3249', '1000'] 

jedoch Ihr Problem ist, dass Sie ein Datenelement zuzugreifen versuchen, die tief verschachtelten mehrere Schichten ist.Basierend auf dem Ausgang an der Spitze, würde ich versuchen, vorschlagen:

first_list_item = ds['300a', '0070'][0] 

for item in first_list_item['300c', '0004']: 
    print(item['3249','1000']) 

Im Wesentlichen kann ein Datenelement von dem obersten Ebene Dataset Objekt entweder eine Liste oder ein anderes Dataset-Objekt sein. Macht das Parsen der Daten ein wenig schwieriger, aber wahrscheinlich unvermeidbar.

Weitere Informationen finden Sie unter this.

+0

Verwenden von 'ds [0x3249,0x1000]' gibt die gleiche Fehlermeldung wie zuvor, aber mit 'KeyError: (3249,1000)'. Also ich denke du hast Recht mit dem hexadezimalen Ding. Bedeutet das, dass ich irgendwie meinen _dicom_dict.py Eintrag ändern muss? – Piethon

+0

Was ist mit 'ds [0x32491000]'? –

+0

Dies gibt dasselbe zurück: 'KeyError: (3249,1000)'. – Piethon

0

Wie Andrew Guy in seinem letzten Kommentar bemerkt, müssen Sie das erste Sequenzelement für 300a, 0070 bekommen. Holen Sie dann das zweite Sequenzelement aus der Sequenz 300c, 0004 in diesem Element. In , dass Sequenzelement, sollten Sie in der Lage sein, das Attribut 3249,1000 zu erhalten.

Verwandte Themen