WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

mehrere *.bin-Dateien in bestimmter Reihenfolge einlesen

 

koala02
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2009, 13:32     Titel: mehrere *.bin-Dateien in bestimmter Reihenfolge einlesen
  Antworten mit Zitat      
Hallo!
Beschäftige mich erst seit kurzem mit Matlab und habe folgendes Problem. Habe einen riesen Datensatz an *.bin-Dateien (Name: nt_yyyymmdd_n07_v01_s.bin). Dabei handelt es sich um Satellitendaten auf Tagesbasis, wobei die ersten 10 Jahre meines Datensatzes nur alle 2 Tage zur Verfügung stehen. Jetzt möchte ich gerne alle Dateien in der Reihenfolge ihres Datums einlesen. Zusätzlich möchte ich dann noch eine Landmaske (name.msk) hinzufügen.

Eine einzelne Datei habe ich versucht über folgende Routine einzulesen:
Code:
fname='nt_19790101_n07_v01_s.bin';
fid=fopen(fname);
head=fread(fid,300,'ubit8'); clear head;
a=fread(fid,[316 332],'ubit8');
% 8bit auf 0-100% skalieren
map=a'./2.55;
fclose(fid);


Das scheint wohl zu klappen, zumindest kommt keine Fehlermeldung. Habe jetzt überlegt, das Skript in eine for-Schleife einzubinden, um alle Dateien auf einmal einzulesen. Habe es bisher ungefähr so probiert, wobei ich aber nicht genau weiß, wie ich die for-Schleife ausführen soll:
Code:
path = 'C:\...*.bin';
liste = dir(path)
files = {liste.name}
for k=1:numel(files)
     ...
end

Bin ich mit meinem Skript überhaupt auf dem richtigen Weg?
Und wie kann ich dann noch die Landmaske hinzufügen? Wobei hier das Problem besteht, dass die Landmaske mit dem Pixelwert 2 versehen ist und auf NaN gesetzt werden muss.
Wäre supi wenn mir jemand helfen könnte.
Private Nachricht senden Benutzer-Profile anzeigen


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 30.09.2009, 19:42     Titel:
  Antworten mit Zitat      
Hallo,

was Du mit der Landmaske meinst, weiß ich nicht. Aber ansonsten sieht das soweit vernünftig aus. In die for Schleife muss eigentlich nur noch der Code von darüber kopiert werden, wobei anstelle fname einfach files{i} verwendet werden muss...

Ciao,
Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
koala02
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2009, 20:51     Titel:
  Antworten mit Zitat      
Danke für deine schnelle Antwort. Leider komm ich aber nicht weiter. Habs jetzt wie folgt versucht:

Code:
path = 'C:\pathname...';
liste = dir(path)
files = {liste.name}
for k=1:numel(files)
    files{i}
    fid=fopen(files);
    head=fread(fid,300,'ubit8'); clear head;
    a=fread(fid,[316 332],'ubit8');
    map=a'./2.55;
    fclose(fid);
end


Matlab bringt mir aber dann an der Stelle "files{i}" folgende Fehlermeldung:
Code:
??? Subscript indices must either be real positive integers or logicals.

Error in ==> readSIC_3 at 5
    files{i}


Hab echt keinen Plan...
Mit der Landmaske hab ich folgendes gemeint. Ich möchte mit den Satellitendaten die Meeresoberfläche untersuchen, dazu muss ich die Landoberfläche ausmaskieren, damit es nicht zu Fehlklassifikationen kommt. Ich habe eine Landmaske, in der alle "Land-Pixel" mit DN=2 versehen sind. Da diese DN aber auch auf der Meeresoberfläche vorkommen, muss ich alle DN der Landmaske auf NaN setzen, um sie von der Klassifikation auszuschließen. Soweit mein Gedanke. Wobei ich mich gerade frage, was mir die Gedanken bringen, wenn ich die Daten nicht mal eingelesen bekomme.... Twisted Evil
Hat jemand noch ne Idee?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 30.09.2009, 21:53     Titel:
  Antworten mit Zitat      
Hallo,
du musst einfach die Fehlermeldung aufmerksamer lesen.
Matlab, sagt dass Index i keinen Wert hat.
Da du FOR-Schleifen-Kopf k als Laufindex definiert hast, ersetze einfach i durch k.

Code:

% das wort path ist reserviert
% sollst was anderen Namen wählen
path2bins = 'C:\pathname...';

% da du .bin-Dateien nur einlesen möchtest
% wurde ich das auch raten zu tun
% sonst gibt dir auch directory mit

liste = dir(fullfile(path2bins,'*.bin'))
files = {liste.name}

for k=1:numel(files)
% du must an fopen schon kompletten Pfad zu fiel übergeben
    path2binfile = fullfile(path2bins ,files{k})
    fid=fopen(path2binfile);
% prüfen ob file korrekt geöffnet wurde    
    if fid~=-1
     head=fread(fid,300,'ubit8'); clear head;
     a=fread(fid,[316 332],'ubit8');
     map=a'./2.55;
     fclose(fid);
    end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.