Seite 1 von 1

Binaeres file einlesen

Verfasst: Dienstag 14. Oktober 2008, 20:29
von Another_Python_User
To All!

Ich kriege die Kriese beim Einlesen eines binären files. Folgendes ist zum file zu sagen:

Der Datansatz liegt in dem einfachen dat-Format vor. Die Dateien bestehen aus einem 6 Byte Header gefolgt von den eigentlichen Daten. Die ersten zwei Byte des Headers geben an wie groß das Volumen in x-Richtung ist, die folgenden zwei Byte geben an wie groß es in y-Richtung ist und die nächsten zwei Byte geben die Größe der z-Dimension an.
Die eigentlichen Daten sind als 16 Bit pro Datenwert gespeichert wobei nur 12 Bit in Verwendung sind.

Es handelt sich um ct daten. Wie kann ich den header zurest einlesen und an Hand der Größen arrays generieren, die ich dann mit den nachfolgenden Werten auffüllen?

Ich habe mehrere gescheiterte Vesuche mit array und struct hinter mir. Entweder bin ich zu blöd, oder irgendetwas anderes haut nicht hin.
Wie gehe ich bei einem oben beschrieben Format grundsätzlich vor?

Bitte um Unterstützung. DANKE

Verfasst: Dienstag 14. Oktober 2008, 21:34
von Hyperion
Also ohne Code können wir dazu nicht viel sagen. Poste doch mal Deinen bisherigen Ansatz.

Was einem zuerst immer dazu einfällt: Hast Du die Datei auch im Binärmodus geöffnet?

Verfasst: Dienstag 14. Oktober 2008, 21:34
von BlackJack
Dafür würde ich `numpy` verwenden (ungetestet):

Code: Alles auswählen

from __future__ import division, with_statement
import struct
import numpy

def main():
    with open('test.dat', 'rb') as data_file:
        width, height, depth = struct.unpack('HHH', data_file.read(6))
        values = numpy.fromfile(data_file, numpy.uint16)
        values.reshape(width, height)

Re: Binaeres file einlesen

Verfasst: Donnerstag 16. Oktober 2008, 17:49
von farid
Another_Python_User hat geschrieben:Es handelt sich um ct daten.
Wie BlackJack sagt: numpy benutzen. Ist geradezu ideal dafuer.

Vielleicht moechtest Du auch diese Daten spaeter visualisieren:

http://matplotlib.sourceforge.net/api/pyplot_api.html

;)