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