2016-05-19 13 views
0

Ich muss Tausende von TIF-Dateien (3500x3500 in der Größe) in einer Schleife lesen.Wie kann ich einen Unterabschnitt von TIF-Dateien für einen schnelleren Import lesen?

Und das ist der größte Engpass. Ich arbeite nur an einem kleinen Ausschnitt des Bildes, für das ich den Zeilenumfang habe.

Gibt es trotzdem einen Teilbereich des Bildes zu importieren, um den Importprozess wesentlich zu verbessern? Irgendwelche anderen Vorschläge?

Dies ist der Import Abschnitt des Codes:

for m = 1:length(pFileNames) 
    if ~exist(precipFileNames{m}, 'file') 
     continue; 
    end 
    pConus = imread(pFileNames{m}); 
end 

P. S. Ich habe versucht, PixelRegions zu verwenden. Aber ich habe Matlab 2014 und ich bekomme diese Fehlermeldung:

Undefined function or variable 'PixelRegion'. 
+0

Hat meine Antwort Ihr Problem geklärt? Wenn ja, dann überlege dir bitte, ob du es als Antwort akzeptierst - indem du auf das grüne Häkchen neben der Stimmenzahl klickst. Wenn nicht, sag bitte, was nicht funktioniert hat, damit ich oder jemand anderes dir weiter helfen kann. Vielen Dank. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

Antwort

3

Erwägen Sie die Verwendung vips auf der Kommandozeile den Bereich, den Sie von jedem Bild mit einem Befehl extrahieren möchten wie:

vips extract_area INPUT.TIF OUTPUT.TIF left top width height 

Dann kombinieren dass mit GNU Parallel 4 oder 8 zu einem Zeitpunkt zu tun, so etwas wie diese:

parallel vips extract_area {} sub_{} left top width height ::: *.tif 

I sug gest machen Sie ein Backup, bevor Sie experimentieren ...

Benchmark-Timing

I 1000 TIF-Bilder von Zufallsdaten erstellt, die alle auf 3,500x3500 Pixel Größe und lief dann die GNU Parallel + vips Befehl oben, um einen Bereich von 100x100 Pixeln von jedem der 1000 TIFs zu extrahieren.

Auf einem vernünftigen Spec iMac wurden die 1.000 Sub-Bilder extrahiert und in 11 Sekunden auf die Festplatte geschrieben.

+0

Danke. Werde dieses hier versuchen ... – maximusdooku