lange Laufzeiten bei PIL (Imaging) + Speicherprobleme
Verfasst: Donnerstag 23. Juni 2011, 19:52
Hallo,
ich benutzt die PIL für wissenschaftliche Datenverarbeitung. Dabei stehe ich momentan vor zwei wesentlichen Problemen, die mir das Arbeiten ein wenig erschweren:
1. Die Laufzeiten sind extrem lange:
Das Script soll innerhalb eines Stacks mit i.d.R. 1000 einzeln Bildern weiße Pixel (255) aufspüren. (Zur Vereinfachung habe ich die mathematisch folgenden Operationen durch "show()" ersetzt) - Das dauert aber extrem lange…
Gegenüber Java habe ich schon den Vorteil gemerkt, dass python sehr sparsam für den Arbeitsspeicher ist und nicht gleich der komplette Stack geladen wird, sondern teilweise nur 3 MB bei Daten die z.T. 400 MB pro Stack ausmachen.
Es wäre vielleicht für die Laufzeit hilfreich den gesamten Stack mit einem mal in den Speicher zu laden - wie würde das gehen?
Gibt es sonst Hinweise, wie ich mich schneller durch einen Stack bewegen kann, als oben angegeben?
2.Das zweite Problem ist folgendes.
Das, was im obigen Code durch das "show()" ersetzt wurde, enthält teilweise
nun habe ich das Problem, dass diese speziell markierten Pixel (100) nicht gespeichert werden, sobald ich über "bild.seek(m)" zum nächsten Bild wechsle. Das ist ärgerlich - Gibt es eine Möglichkeit die Änderung eines Bildes innerhalb des Stacks an der selben Stelle zu speichern, wo auch vorher das Bild war?
Vielen Dank bereits im Vorhinein.
Viele Grüße
Axon
ich benutzt die PIL für wissenschaftliche Datenverarbeitung. Dabei stehe ich momentan vor zwei wesentlichen Problemen, die mir das Arbeiten ein wenig erschweren:
1. Die Laufzeiten sind extrem lange:
Code: Alles auswählen
import Image
img=Image.open(newfile)
try:
for m in range(0,1100):
print m # nur um zu sehen, dass das Programm noch arbeitet
img.seek(m) # blättern innerhalb des Stacks
for i in range(1,img.size[0]): # "Scanen" der einzelnen Bilder
for j in range(1,img.size[1]):
if img.getpixel((i,j)) == 255: # falls ein weisser (255) Pixel gefunden wird, dann...
img.show()
except EOFError:
print m,"Ende der Sequenz \n"
Gegenüber Java habe ich schon den Vorteil gemerkt, dass python sehr sparsam für den Arbeitsspeicher ist und nicht gleich der komplette Stack geladen wird, sondern teilweise nur 3 MB bei Daten die z.T. 400 MB pro Stack ausmachen.
Es wäre vielleicht für die Laufzeit hilfreich den gesamten Stack mit einem mal in den Speicher zu laden - wie würde das gehen?
Gibt es sonst Hinweise, wie ich mich schneller durch einen Stack bewegen kann, als oben angegeben?
2.Das zweite Problem ist folgendes.
Das, was im obigen Code durch das "show()" ersetzt wurde, enthält teilweise
Code: Alles auswählen
img.putpixel((x,y),100)Vielen Dank bereits im Vorhinein.
Viele Grüße
Axon