2016-12-08 4 views
0

Das Problem mit einer Reihe von Datensatz auftritt, aber wir festgestellt, vor allem mit Soft-tissue-Sarcoma in dem dicoms inITK/SimpleITK DICOM-Serie in falscher Reihenfolge/Scheibe Loaded Abstand falsch

STS_004/1.3.6.1.4.1.14519.5.2.1.5168.1900.124239320067253523699285035604/1.3.6.1.4.1.14519.5.2.1.5168.1900.952127023780097934747932279670 

Der Abstand als 30 gelesen anstelle von 2,9 und das 3D-Bild hat Gehirnscheiben zwischen zwei Lungenscheiben

+0

VTK markiert wurde, weil es ein ähnliches Problem zu sein schien [hier] (http://public.kitware.com/ pipermail/vtkusers/2008-Dezember/049808.html) – kmader

Antwort

1

Grundsätzlich, wenn Sie die dicoms mit SimpleITK.ReadImage oder VTK lesen, lädt das Tool die Dateien in der gleichen Reihenfolge Ihrer Liste (in der Regel alphabetisch). Die Zuordnung zwischen den Slices und den Dateien erfolgt nicht in alphabetischer Reihenfolge, sondern in zufälliger Reihenfolge. Dies führt dazu, dass der Slice Spacing (ein Tag, der in diesen Daten fehlt) falsch berechnet wird, da es sich um den Unterschied in der Position zwischen Datei 0 und 1 handelt. Es verursacht auch Gehirnschnitte zwischen zwei Lungenschnitten und anderen seltsamen Artefakten.

Die Lösung besteht darin, die Dateien mit der Funktion GetGDCMSeriesFileNames vorzusortieren.

# noinspection PyPep8Naming 
import SimpleITK as sitk 

def safe_sitk_read(img_list, *args, **kwargs): 
    dir_name = os.path.dirname(img_list[0]) 
    s_img_list = sitk.ImageSeriesReader().GetGDCMSeriesFileNames(dir_name) 
    return sitk.ReadImage(s_img_list, *args, **kwargs) 
+0

Ich glaube, GDCMImageIO macht das Richtige. Auch "GetOrigin" ist nicht "Slice Location" AFAIK. – malat

0

hier So ist das, was ich auf meiner Seite versucht:

$ gdcm2vtk --lower-left --ipp-sort STS_004/1.3.6.1.4.1.14519.5.2.1.5168.1900.124239320067253523699285035604/1.3.6.1.4.1.14519.5.2.1.5168.1900.952127023780097934747932279670 /tmp/kmader.mha 

Und dann habe ich die Ausgabedatei überprüfen:

$ head -13 /tmp/kmader.mha 
ObjectType = Image 
NDims = 3 
BinaryData = True 
BinaryDataByteOrderMSB = False 
CompressedData = False 
TransformMatrix = 1 0 0 0 1 0 0 0 1 
Offset = -250 -250 -5 
CenterOfRotation = 0 0 0 
ElementSpacing = 0.976562 0.976562 3.3 
DimSize = 512 512 311 
AnatomicalOrientation = ??? 
ElementType = MET_SHORT 
ElementDataFile = LOCAL 

der Tat, Sie haben Recht, GDCM berechnet die Z- Abstand als 3.3, während es in diesem Fall wirklich 3.27 sein sollte. Bitte melden Sie einen Bug upstream.


Feste in aktuellen Git Repository:

+0

Danke, ich nehme leider an, dass es noch sehr lange dauern könnte, bis die Python-Pakete die Updates auf GDCM widerspiegeln, so dass zwischenzeitlich kleine Hacks benötigt werden. – kmader

+0

@kmader 'GetOrigin' gibt einen Index im 3D-Raum zurück. Du scheinst die erste Koordinate zu nehmen. Dies funktioniert nicht, wenn Sie eine andere Richtung für den Erwerb verwenden. Auch "Slice Location" ist eine anbieterspezifische Reihenfolge, die optional ist (möglicherweise nicht mit dem 3D-Raum zusammenhängt). – malat

+0

Gibt es jetzt eine bessere Lösung mit SimpleITK in Python? Oder muss ich den letzten Master-Zweig manuell holen, gdcm2vtk kompilieren, auf der Liste ausführen und dann den MHA in? – kmader