Mmmm, nicht so vollständig eine Antwort, wie ich es mir vorstellen konnte, aber ich habe ein paar Gedanken zu teilen. Vielleicht werden sie ein paar weitere Gedanken von mir oder anderen Leuten auslösen ...
Erstens Ihre Bilder TIFF-Tag 262 („Photometric Interpretation“), die Sie stören mehrere Werkzeuge fehlen könnten sonst verwenden. Welches Programm hat die Bilder generiert - weil sie nicht streng konform sind? Können Sie das Programm, mit dem die Bilder erstellt wurden, korrigieren/verbessern?
ich die "Photometric Interpretation" Tag "min-is-black" mit gesetzt verwaltet:
tiffset -s 262 0 YourImage.tif
Sobald das gesetzt ist, habe ich es geschafft vips
zu verwenden (von here) - das ist extrem schnell und Speicher-effizient, um Ihre Datei in JPEG zu konvertieren. Es hat Ruby und Python Bindungen, wenn Sie diese Sprachen bevorzugen.
Also, die Befehlszeile im Terminal Ihre Datei zu JPEG konvertieren ist:
vips im_vips2jpeg YourFile.tif result.jpg
ich davon überzeugt bin, nicht, dass, obwohl richtig funktioniert, vielleicht John @ user894763 (der Autor von vips
) einen Blick darauf werfen würde .
Ein anderer Gedanke, vips
ist, dass Sie der folgende Befehl eine rohe RGB-Datei von 3 Schwimmern pro Pixel sparen, die Sie direkt in Ihr eigenes Programm ohne Dekodierung überhaupt lesen können:
vips rawsave YourFile.tif image.raw
-rw-r--r-- 1 mark staff 3145728 20 Jun 16:59 image.raw
Sie werden bemerken, dass die Dateigröße (3145728) entspricht:
512 pixels * 512 pixels * 3 RGB values * 4 bytes of float each
Ich habe auch ImageMagick Ihr Bild zu JPEG konvertieren, mit
convert YourImage.tif result.jpg
und bekam dieses Ergebnis:
Ein weiterer Gedanke, der mir einfiel war, dass man konnte Bevor Sie Ihr eigenes TIFF-Extraktionsprogramm ausführen, sollten Sie den Puffercache vorwärmen, indem Sie cat
für jede Ihrer Dateien ausführen, damit sie vom NFS-Server abgerufen werden:
cat *.tif > /dev/null
oder führen Sie möglicherweise parallele Streams aus, um die Latenz zu reduzieren.
Ein weiterer Gedanke war, dass Sie die Dateien in einem RAM-backed-Dateisystem-Prefetch könnten, so dass Sie Ihre Dateien mit minimaler Latenzzeit gelesen werden. Bei 186KB pro Datei, könnten Sie 5000 in einem 1 GB RAM-Disk für eine viel schnellere Verarbeitung erhalten:
mkdir /tmp/RAM
sudo mount -t temps -o size=1G temps /tmp/RAM
Sie auch Zwischendateien setzen könnte, die ich vorschlagen, in meine Gedanken oben in das RAM-Dateisystem.
20ms für Bild I/O klingt nicht verrückt. Welche Größe haben die Bilder? Irgendwelche Komprimierung in den TIFFs? – Peter
@Peter Ich muss eine Tonne von ihnen konvertieren, so dass es viel wird:/512 von 512, und nein. –
OK, das klingt ein bisschen langsam im Vergleich zu Festplatten-I/O, aber nicht viel ... Ihre 1MB-Datei auf einem 100MB/s-Festplattensystem würde 10ms nur in Raw Disk lesen. Zuerst benchmarken Sie den Dateizugriff (lesen Sie einfach die gesamte Datei in einen Puffer, achten Sie darauf, dass der Betriebssystem-Cache Ihre Messungen durcheinander bringt), und sehen Sie, welchen Overhead die Bibliothek hinzufügt. – Peter