Potrei postare il piccolo programma che gira solo con immagini piu' piccole e si blocca con matrici grandi, in modo che possiate vedere direttamente. Ovviamente utilizzo numpy e per la verità la definizione di matrici anche di grandi dimensioni non genera problemi il blocco avviene quando si richiama gdal e le altre.
questo è il programmino: ----------------------------------------------------------------------------------------------------------------------------------------------------- import skimage.graph as graph from skimage import filter from skimage.morphology import watershed, is_local_maximum from scipy import ndimage import os, numpy, sys, time,math,csv from osgeo import gdal, ogr from osgeo.gdalconst import * from math import * from gdalconst import * startTime = time.time() os.chdir(r'c:\Users\lorenzo\lidar2') gdal.AllRegister() # open the image inDs1 = gdal.Open('conv_utm2m.tif',GA_ReadOnly) print 'legge immagine di convergenza' # get image size rows = inDs1.RasterYSize cols = inDs1.RasterXSize bands = inDs1.RasterCount transform = inDs1.GetGeoTransform() driver = gdal.GetDriverByName('GTiff') outDs1 = driver.Create('conv_massimo.tif', cols, rows, 1, GDT_Int32) outDs2 = driver.Create('conv_chiome.tif', cols, rows, 1, GDT_Int32) print 'righe', rows, 'colonne', cols, 'bande', bands driver1 = inDs1.GetDriver() convergenza = numpy.ones((rows,cols),numpy.float) massimi =numpy.zeros((rows,cols),numpy.int) chiome = numpy.zeros((rows,cols),numpy.float) inBand1 = inDs1.GetRasterBand(1) print 'leggo convergenza' convergenza = inBand1.ReadAsArray(0,0,cols,rows).astype(numpy.float) print ' fatto ..' print ' ----- calcolo con algoritmo watershed -------' print ' cerco il massimo locale sulla convergenza' massimi = is_local_maximum(convergenza) print ' numero in modo progressimo i massimi' markers = ndimage.label(massimi)[0] print ' allago le pozze i bacini........' chiome = watershed(-convergenza, markers) print 'lette tutte le righe' outBand1 = outDs1.GetRasterBand(1) outBand2 = outDs2.GetRasterBand(1) # write the data outBand1.WriteArray(massimi, 0, 0) outBand1.FlushCache() stats1 = outBand1.GetStatistics(0, 1) outBand2.WriteArray(chiome, 0, 0) outBand2.FlushCache() stats2 = outBand2.GetStatistics(0, 1) outDs1.SetGeoTransform(transform) outDs2.SetGeoTransform(transform) outDs1 = None outDs2 = None inDs1 = None print 'script took', time.time() - startTime, 'seconds to run' ----- Messaggio originale ----- Da: "Fabrizio Mancini" <mr.f...@gmail.com> A: "Discussioni generali sul linguaggio Python" <python@lists.python.it> Inviato: Mercoledì, 6 giugno 2012 14:15:04 Oggetto: Re: [Python] gestione della memoria scusa forse per l'ovvietà, ma hai già provato a dare uno sguardo a numpy? http://numpy.scipy.org/ Ciao Fabrizio _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python