Wie Bilddatei fenstern?

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
physc
User
Beiträge: 3
Registriert: Mittwoch 30. März 2022, 14:39

Hallo zusammen.
Ich habe eine medizinische Dicom-Bilddatei (Röntgenbild) aus der ich die reinen Bildinformationen (ein 2D-Array mit Grauwerten) extrahiert habe.
Das funktioniert auch alles ganz gut, mit matplotlib kann ich mir das Bild auch anschauen. Das passt.

Jetzt muss ich das aktuelle Bild aber fenstern, es soll also nur ein bestimmter Wertebereich "übrig bleiben" (falls das kein Begriff ist: https://de.wikipedia.org/wiki/Fensterun ... mographie).

Konkret möchte ich alle Grauwerte unter 15637 und alle über 16909 abknipsen und den Rest auf einen Wertebereich von 0 bis 1272 umlegen.

Ich habe quick 'n dirty etwas selbst gebaut (siehe unten), einfach um zu testen ob mir das Ergebnis weiterhilft. Das funktioniert so, das Ergebnis hilft mir, aber das alles ist natürlich sehr träge.
Kennt jemand einen schnelleren Weg Bilddaten zu fenstern? Ohne große Probleme kann ich numpy, matplotlib, cv2, imutils, math und pydicom nutzen. Ein weiteres Paket kann ich zur größten Not auch installieren, aber das wäre aufwendig (Krankenhaus...).

Code: Alles auswählen

#dicom ist ein 2D-Array mit Grauwerten 
h = dicom.shape[0]
b = dicom.shape[1]


for i in range (0,h):
    for j in range (0,b):
        if dicom[i,j] < 15637:
            dicom[i,j] = 0
        if dicom[i,j] > 16909:
            dicom[i,j] = 1272
        if dicom[i,j] >=15637 and dicom[i,j] <=16909:
            dicom[i,j] = (1272-(16909 - dicom[i,j]))
Vielen Dank für eure Ideen Jungens und Mädels
__deets__
User
Beiträge: 11926
Registriert: Mittwoch 14. Oktober 2015, 14:29

numpy arrays kannst du doch einfach global von subtrahieren.

Code: Alles auswählen

dicom -= 15637
Sirius3
User
Beiträge: 15984
Registriert: Sonntag 21. Oktober 2012, 17:20

Für Numpy-Arrays gibt es clip:

Code: Alles auswählen

dicom = (dicom - 15637).clip(0, 1272)
Antworten