Binaeres file einlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Another_Python_User
User
Beiträge: 1
Registriert: Dienstag 14. Oktober 2008, 20:18

Dienstag 14. Oktober 2008, 20:29

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 14. Oktober 2008, 21:34

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?
BlackJack

Dienstag 14. Oktober 2008, 21:34

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)
farid
User
Beiträge: 95
Registriert: Mittwoch 8. Oktober 2008, 15:37

Donnerstag 16. Oktober 2008, 17:49

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

;)
Antworten