Exemplo n.º 1
0
def distribuir_kc(dia, semeadura_, colheita_, ano_inicio, dia_inicio, periodo_kc, kc_vetorizado, path_img_referencia, path_out):
    
        threading.currentThread().terminada = False
        imagem_kc = RasterFile(file_full_path = path_img_referencia)
        imagem_kc.getLoadJustMetaData()
        imagem_kc.file_path = path_out

        n_linhas = len(semeadura_)
        n_colunas = len(semeadura_[0])
        
        delta_c = (colheita_ - semeadura_)#.astype(np.float32)
        tempo_em_campo = (dia+1 - semeadura_)#.astype(np.float32)
            
        i_FKc = np.zeros((n_linhas, n_colunas)).astype(np.float32)
                        
        for i in range(n_linhas) :
            mask = ((tempo_em_campo[i] > 0) & (tempo_em_campo[i] <= delta_c[i]))
            i_FKc[i][mask] = ((tempo_em_campo[i][mask]-1) * periodo_kc)/delta_c[i][mask]
            i_FKc[i][mask] = np.ceil(i_FKc[i][mask])
            i_FKc[i][mask] = [kc_vetorizado[index] for index in i_FKc[i][mask]]
            
        imagem_kc.file_name = str(datetime.datetime(ano_inicio, 1, 1) + datetime.timedelta(dia + dia_inicio - 1))[:10]
        imagem_kc.metadata.update(nodata=0)
        imagem_kc.metadata.update(dtype="float32")
        
        imagem_kc.saveRasterData(band_matrix = i_FKc)

        threading.currentThread().terminada = True
                
        return
Exemplo n.º 2
0
def distribuir_kc(dia, semeadura_, colheita_, ano_inicio, dia_inicio,
                  periodo_kc, kc_vetorizado, path_img_referencia, path_out):

    threading.currentThread().terminada = False
    imagem_kc = RasterFile(file_full_path=path_img_referencia)
    imagem_kc.getLoadJustMetaData()
    imagem_kc.file_path = path_out

    n_linhas = len(semeadura_)
    n_colunas = len(semeadura_[0])

    delta_c = (colheita_ - semeadura_)  #.astype(np.float32)
    tempo_em_campo = (dia + 1 - semeadura_)  #.astype(np.float32)

    i_FKc = np.zeros((n_linhas, n_colunas)).astype(np.float32)

    for i in range(n_linhas):
        mask = ((tempo_em_campo[i] > 0) & (tempo_em_campo[i] <= delta_c[i]))
        i_FKc[i][mask] = (
            (tempo_em_campo[i][mask] - 1) * periodo_kc) / delta_c[i][mask]
        i_FKc[i][mask] = np.ceil(i_FKc[i][mask])
        i_FKc[i][mask] = [kc_vetorizado[index] for index in i_FKc[i][mask]]

    imagem_kc.file_name = str(
        datetime.datetime(ano_inicio, 1, 1) +
        datetime.timedelta(dia + dia_inicio - 1))[:10]

    imagem_kc.metadata.update(nodata=0)
    imagem_kc.metadata.update(dtype="float32")
    imagem_kc.saveRasterData(band_matrix=i_FKc)
    threading.currentThread().terminada = True

    return
Exemplo n.º 3
0
    def __execOperation__(self):

        serie_imagem_in = self.paramentrosIN_carregados["In"].loadListByRoot()
        serie_imagem_out = self.paramentrosIN_carregados["Out_config"]

        imagem_in_factor = float(serie_imagem_in.mutiply_factor)
        imagem_out_factor = float(serie_imagem_out.mutiply_factor)

        n_imagens = len(serie_imagem_in)

        if n_imagens is 0:
            self.console(u"Erro: Nenhuma imagem encontrada na pasta especificada.")
            self.console(u"Cancelando função.")
            threading.currentThread().stop()
            return

        self.console(u"Construindo série temporal diária...")

        for i in range(n_imagens):

            self.progresso = (i / float(n_imagens)) * 100

            """Recupera a data correspondente a imagem atual do laço """
            data = serie_imagem_in.getDate_time(i)
            dia_mes = data.day

            """Calcula quantos dias tem no decend atual"""
            if dia_mes <= 10:
                duracao = 10
            elif dia_mes <= 20:
                duracao = 10
            else:
                duracao = int(calendar.monthrange(data.year, data.month)[1]) - 20

            if threading.currentThread().stopped():
                print "thread parada, retornando da função"
                return

            imagem_ = serie_imagem_in[i].loadRasterData()
            imagem_ *= imagem_in_factor

            if self.paramentrosIN_carregados["Operation"] == "dividir valores":
                imagem_ = imagem_ / float(duracao)
                imagem_ = numpy.round(imagem_, 4)
            elif self.paramentrosIN_carregados["Operation"] == "manter valores":
                pass

            imagem_ *= imagem_out_factor

            # imagem_ = self.compactar(imagem_)

            for ii in range(0, duracao):
                img = RasterFile()
                img.file_path = serie_imagem_out.root_path
                data_img = data + timedelta(ii)
                img.file_name = (
                    serie_imagem_out.prefixo + data_img.strftime(serie_imagem_out.date_mask) + serie_imagem_out.sufixo
                )
                img.data = imagem_
                img.file_ext = "tif"
                metadata = serie_imagem_in[i].metadata
                # metadata.update(nodata=0)
                img.saveRasterData(metadata=metadata)
                print metadata

        self.console(u"Série temporal diária concluída.")
Exemplo n.º 4
0
    def __execOperation__(self):

        self.print_text(u"Iniciando função")

        images_super = self.paramentrosIN_carregados["images"]
        self.console(u"Número de imagens para ler: " + str(len(images_super)))
        #nullValue = self.paramentrosIN_carregados["null_value"]
        statistics = self.paramentrosIN_carregados["statistics"]

        #self.print_text("Estatisticas a fazer: ", statistics)

        doMedia = "media" in statistics
        doCV = "cv" in statistics
        doSD = "sd" in statistics
        doSoma = "soma" in statistics
        doMin = "min" in statistics
        doMax = "max" in statistics
        doMediana = "mediana" in statistics
        doAmplitude = "amplitude" in statistics

        imagem_referencia = images_super[0].loadRasterData()
        n_linhas = len(imagem_referencia)
        n_colunas = len(imagem_referencia[0])

        for img in images_super:
            img = img.loadRasterData()
            if len(img) != n_linhas or len(img[0]) != n_colunas:
                raise IndexError(
                    "Erro - As imagens precisam ter o mesmo número de linhas e colunas"
                )

        imagem_referencia = np.zeros((n_linhas, n_colunas))

        if doMedia:
            imagem_media = array(imagem_referencia).astype(dtype="float32")
        if doCV: imagem_cv = array(imagem_referencia).astype(dtype="float32")
        if doSD: imagem_sd = array(imagem_referencia)  #.astype(dtype="int16")
        if doSoma:
            imagem_soma = array(imagem_referencia).astype(dtype="float32")
        if doMin: imagem_min = array(imagem_referencia).astype(dtype="float32")
        if doMax: imagem_max = array(imagem_referencia).astype(dtype="float32")
        if doMediana:
            imagem_mediana = array(imagem_referencia)  #.astype(dtype="int16")
        if doAmplitude:
            imagem_amplitude = array(imagem_referencia).astype(dtype="float32")

        self.print_text(u"Processando:")

        if doSoma:
            n_imagens = len(images_super)
            self.print_text(u"Somando Imagens:")
            progress(0.0)
            for i in range(n_imagens - 1):
                imagem_soma += images_super[i + 1].loadRasterData()
                self.setProgresso(i, n_imagens)

        #progress( 0.0)

        if doMedia or doCV or doSD or doMin or doMax or doMediana or doAmplitude:
            images = images_super.loadListRasterData()

            for i_linha in range(0, n_linhas):

                #status = i_linha+1/float(n_linhas)
                #progress(float(i_linha/float(n_linhas)))
                self.progresso = (float(i_linha / float(n_linhas))) * 100

                for i_coluna in range(0, n_colunas):
                    line = list()
                    if threading.currentThread().stopped(): return

                    for img in images:
                        line.append(img[i_linha][i_coluna])

                    mean = None
                    sd = None

                    if doCV:
                        mean = np.nanmean(line)
                        sd = np.nanstd(line)
                        divisor = mean * 100
                        if divisor != 0: cv = sd / mean * 100
                        else: cv = 0
                        imagem_cv[i_linha][i_coluna] = cv

                    if doMedia:
                        if mean == None:
                            mean = np.nanmean(line)  # calcula a média
                        imagem_media[i_linha][i_coluna] = mean

                    if doSD:
                        if sd == None:
                            sd = np.nanstd(line)  # calcula o desvio padrão
                        imagem_sd[i_linha][i_coluna] = sd

                    #if doSoma :
                    #soma = np.nansum(line)
                    #imagem_soma[i_linha][i_coluna] = soma

                    minimo = None
                    if doMin:
                        minimo = np.nanmin(line)
                        imagem_min[i_linha][i_coluna] = minimo

                    maximo = None
                    if doMax:
                        maximo = np.nanmax(line)
                        imagem_max[i_linha][i_coluna] = maximo

                    if doMediana:
                        mediana = np.nanmedian(line)
                        imagem_mediana[i_linha][i_coluna] = mediana

                    if doAmplitude:
                        if minimo == None: minimo = np.nanmin(line)
                        if maximo == None: maximo = np.nanmax(line)
                        amplitude = maximo - minimo
                        imagem_amplitude[i_linha][i_coluna] = amplitude

        self.print_text(u"Arrumando imagens de saida")

        saida = SerialFile()
        saida.metadata = self.paramentrosIN_carregados["images"][0].metadata

        if doMedia:
            imagem_media = RasterFile(data=imagem_media)
            imagem_media.metadata = saida.metadata
            imagem_media.file_name = "imagem_media"
            saida.append(imagem_media)
        if doCV:
            imagem_cv = RasterFile(data=imagem_cv)
            imagem_cv.metadata = saida.metadata
            imagem_cv.file_name = "imagem_coeficiente_variacao"
            saida.append(imagem_cv)
        if doSD:
            imagem_sd = RasterFile(data=imagem_sd)
            imagem_sd.metadata = saida.metadata
            imagem_sd.file_name = "imagem_desvio_padrao"
            saida.append(imagem_sd)
        if doSoma:
            imagem_soma = RasterFile(data=imagem_soma)
            imagem_soma.metadata = saida.metadata
            imagem_soma.file_name = "imagem_soma"
            saida.append(imagem_soma)
        if doMin:
            imagem_min = RasterFile(data=imagem_min)
            imagem_min.metadata = saida.metadata
            imagem_min.file_name = "imagem_minimo"
            saida.append(imagem_min)
        if doMax:
            imagem_max = RasterFile(data=imagem_max)
            imagem_max.metadata = saida.metadata
            imagem_max.file_name = "imagem_maximo"
            saida.append(imagem_max)
        if doMediana:
            imagem_mediana = RasterFile(data=imagem_mediana)
            imagem_mediana.metadata = saida.metadata
            imagem_mediana.file_name = "imagem_mediana"
            saida.append(imagem_mediana)
        if doAmplitude:
            imagem_amplitude = RasterFile(data=imagem_amplitude)
            imagem_amplitude.metadata = saida.metadata
            imagem_amplitude.file_name = "imagem_amplitude"
            saida.append(imagem_amplitude)

        self.print_text(
            u"imagens prontas para gravar, statistical stractor completo")

        return saida
Exemplo n.º 5
0
                #imagem_convertida[i][ii] = delta_tempo
                
                #n = len(str(data_pixel))
                #ano_pixel = int(str(data_pixel)[0:4])
                #dia_pixel = int(str(data_pixel)[4:n])
                
                #imagem_convertida[i][ii] = (dia_pixel - dia_inicial) + (ano_pixel - ano_inicial * 365)
                
            #except :
                #pass      
        
        ano_pixel = int(str(data_pixel)[0:4])
        imagem_convertida[i] = imagem[i]
        
        progress(i/float(n_linhas-1))
    print "Conversão terminada, retornando imagem"
    
    return imagem_convertida
    
if __name__ == '__main__':               
    
    imagem = RasterFile(file_full_path="C:\\Gafanhoto WorkSpace\\DataTestes\\raster\\semeadura_soja_11-12.tif")
    imagem_ = imagem.loadRasterData()
    
    data_minima = Ds_DC_to_date(np.min(imagem_))
    
    imagem.data = converter(data_minima, imagem_)
    imagem.file_name = imagem.file_name + "convertida"
    imagem.saveRasterData()
    
    
Exemplo n.º 6
0
    def __execOperation__(self):
        
        global nullValue, imagem_media, imagem_sd, imagem_cv, imagem_soma, imagem_min, imagem_max
        global imagem_mediana, imagem_amplitude, images, n_linhas, n_colunas, threads_ready, n_threadings
        
        print("executando operação")
        
        images_super = self.paramentrosIN_carregados["images"]
        print("Numero de imagens para ler: " + str(len(images_super)))
        nullValue = np.double(images_super[0].getRasterInformation()["NoData"])
        statistics = self.paramentrosIN_carregados["statistics"]
        
        print("Estatisticas a fazer: ", statistics)
        
        do = dict()
        
        do["Media"] = "media" in statistics 
        do["CV"] = "cv" in statistics
        do["SD"] = "sd" in statistics
        do["Soma"] = "soma" in statistics
        do["Min"] = "min" in statistics
        do["Max"] = "max" in statistics
        do["Mediana"] = "mediana" in statistics
        do["Amplitude"] = "amplitude" in statistics
        
        images = images_super.loadListRasterData()
        
        print("Numero de imagens lidas: " + str(len(images)))
        
        n_linhas = len(images[0])
        n_colunas = len(images[0][0])
        
        for img in images:
            if len(img) != n_linhas or len(img[0]) != n_colunas:
                raise IndexError("Erro - As imagens precisam ter o mesmo número de linhas e colunas")
                   
        print("numero de colunas e linhas: " + str(n_linhas) + " : " + str(n_colunas))
        
        #imagem_referencia = [[0 for x in range(n_colunas)] for x in range(n_linhas)]  
        imagem_referencia = np.zeros((n_linhas, n_colunas))
        
        imagem_out = dict
        
        if do["Media"] : imagem_out["media"] = array(imagem_referencia)#.astype(dtype="int16")
        if do["CV"] : imagem_out["cv"] = array(imagem_referencia)#.astype(dtype="int16")
        if do["SD"] : imagem_out["sd"] = array(imagem_referencia)#.astype(dtype="int16")
        if do["Soma"] : imagem_out["soma"] = array(imagem_referencia)#.astype(dtype="int16")
        if do["Min"] : imagem_out["min"] = array(imagem_referencia)#.astype(dtype="int16")
        if do["Max"] : imagem_out["max"] = array(imagem_referencia)#.astype(dtype="int16")
        if do["Mediana"] : imagem_out["mediana"] = array(imagem_referencia)#.astype(dtype="int16")
        if do["Amplitude"] : imagem_out["amplitude"] = array(imagem_referencia)#.astype(dtype="int16")

        print("processando:") 
        
        numero_de_nucleos = GeneralTools.available_cpu_count()
        n_threadings = int(numero_de_nucleos-2)
        print ("Numero de threads", n_threadings)
        threads_ready = 0
        
        pool = Pool()
        #pool = multiprocessing.Pool(processes=n_threadings)

        for i in range(0, n_threadings):
            #t = threading.Thread(target=thread_process, args=(n_linhas/n_threadings*i, n_linhas/n_threadings*(i+1)))
            #t.start()
            linha_inicial = n_linhas/n_threadings*i
            linha_final = n_linhas/n_threadings*(i+1)
            p = Process(target= thread_process, args=(linha_inicial, linha_final))
            p.start()
            
            #pool.map(thread_process(n_linhas/n_threadings*i, n_linhas/n_threadings*(i+1)))
            #pool.close()
           
        
                    
        
        while (threads_ready < n_threadings):
            pass
       
        print("Arrumando imagens de saida")
        
        saida = SerialFile ()
        saida.metadata = self.paramentrosIN_carregados["images"][0].metadata
        
        if do["Media"]: 
            imagem_media = RasterFile(data = imagem_media)
            imagem_media.metadata = saida.metadata
            imagem_media.file_name = "imagem_media"
            saida.append(imagem_media) 
        if do["CV"]:
            imagem_cv = RasterFile(data = imagem_cv)
            imagem_cv.metadata = saida.metadata
            imagem_cv.file_name = "imagem_coeficiente_variacao"
            saida.append(imagem_cv)
        if do["SD"] : 
            imagem_sd = RasterFile(data = imagem_sd)
            imagem_sd.metadata = saida.metadata
            imagem_sd.file_name = "imagem_desvio_padrao"
            saida.append(imagem_sd)
        if do["Soma"] : 
            imagem_soma = RasterFile(data = imagem_soma)
            imagem_soma.metadata = saida.metadata
            imagem_soma.file_name = "imagem_soma"
            saida.append(imagem_soma)
        if do["Min"] : 
            imagem_min = RasterFile(data = imagem_min)
            imagem_min.metadata = saida.metadata
            imagem_min.file_name = "imagem_minimo"
            saida.append(imagem_min)
        if do["Max"] : 
            imagem_max = RasterFile(data = imagem_max)
            imagem_max.metadata = saida.metadata
            imagem_max.file_name = "imagem_maximo"
            saida.append(imagem_max)
        if do["Mediana"] : 
            imagem_mediana = RasterFile(data = imagem_mediana)
            imagem_mediana.metadata = saida.metadata
            imagem_mediana.file_name = "imagem_mediana"
            saida.append(imagem_mediana)
        if do["Amplitude"] : 
            imagem_amplitude = RasterFile(data = imagem_amplitude)
            imagem_amplitude.metadata = saida.metadata
            imagem_amplitude.file_name = "imagem_amplitude"
            saida.append(imagem_amplitude)
            
        print("imagens prontas para gravar, statistical stractor completo")

        return saida
Exemplo n.º 7
0
from Modelo.beans import RasterFile
root = "D:\\1 - Mestrado (segundo semestre)\\Dissertacao\\Estudo de caso\\Cubos\\"
path = root + "Cubo_Ya_invertido.tif"
import numpy as np

raster = RasterFile(file_full_path = path)
data_raster = raster.loadRasterData(True)



nodata = raster.metadata["nodata"]

metadata = raster.metadata
metadata["count"] = 1

print raster.metadata

soma = imagem_kc_ = np.zeros((len(data_raster[1]), len(data_raster[1][0]))).astype(dtype="float32")

for band in data_raster:
    soma += band

saida = RasterFile(file_full_path= path)
saida.file_name = "ya_invertido_soma"
saida.metadata = raster.metadata
saida.data = soma

saida.saveRasterData()
    
Exemplo n.º 8
0
    def __execOperation__(self):
        
        serie_imagem_in = self.paramentrosIN_carregados["In"].loadListByRoot()
        serie_imagem_out = self.paramentrosIN_carregados["Out_config"]
        
        #imagem_in_factor = float(serie_imagem_in.mutiply_factor)
        #imagem_out_factor = float(serie_imagem_out.mutiply_factor)
        
        
        n_imagens = len(serie_imagem_in)
        
        if n_imagens is 0 :
            self.console(u"Erro: Nenhuma imagem encontrada na pasta especificada.") 
            self.console(u"Cancelando função.") 
            threading.currentThread().stop()
            return
        
        self.console(u"Construindo série temporal diária...")
        
        for i in range(n_imagens):
            
            self.setProgresso(i, n_imagens)
            
            '''Recupera a data correspondente a imagem atual do laço '''
            try:
                data = serie_imagem_in.getDate_time(i)
                dia_mes = data.day

                '''Calcula quantos dias tem no decend atual'''
                if dia_mes <= 10: duracao = 10
                elif dia_mes <= 20: duracao = 10
                else : duracao =  int(calendar.monthrange(data.year, data.month)[1]) - 20
                
                if threading.currentThread().stopped()  :
                    print "thread parada, retornando da função"
                    return 
               
                imagem_ = serie_imagem_in[i].loadRasterData()
                imagem_ = numpy.ma.masked_array(imagem_, mask=(imagem_ == serie_imagem_in[i].metadata["nodata"]))
    
                if self.paramentrosIN_carregados["Operation"] == "dividir valores": 
                    imagem_ = (imagem_ / float(duracao))
                    imagem_[numpy.isinf(imagem_)] = 0
                elif self.paramentrosIN_carregados["Operation"] == "manter valores": 
                    pass
                     
                for ii in range (0, duracao):
                    img = RasterFile()
                    img.file_path = serie_imagem_out.root_path   
                    data_img = data + timedelta(ii)
                    img.file_name = serie_imagem_out.prefixo + data_img.strftime(serie_imagem_out.date_mask) + serie_imagem_out.sufixo
                    img.data = imagem_
                    img.file_ext = "tif"
                    metadata = serie_imagem_in[i].metadata
                    img.metadata = metadata
                    img.metadata.update(dtype = img.data.dtype)
                    img.saveRasterData(metadata=metadata)
            except:
                self.console(u"Erro na imagem: " + serie_imagem_in[i].file_name)             
            
   
        self.console(u"Série temporal diária concluída.")

        
Exemplo n.º 9
0
        #ano_pixel = int(str(data_pixel)[0:4])
        #dia_pixel = int(str(data_pixel)[4:n])

        #imagem_convertida[i][ii] = (dia_pixel - dia_inicial) + (ano_pixel - ano_inicial * 365)

        #except :
        #pass

        ano_pixel = int(str(data_pixel)[0:4])
        imagem_convertida[i] = imagem[i]

        progress(i / float(n_linhas - 1))
    print "Conversão terminada, retornando imagem"

    return imagem_convertida


if __name__ == '__main__':

    imagem = RasterFile(
        file_full_path=
        "C:\\Gafanhoto WorkSpace\\DataTestes\\raster\\semeadura_soja_11-12.tif"
    )
    imagem_ = imagem.loadRasterData()

    data_minima = Ds_DC_to_date(np.min(imagem_))

    imagem.data = converter(data_minima, imagem_)
    imagem.file_name = imagem.file_name + "convertida"
    imagem.saveRasterData()
Exemplo n.º 10
0
def distribuir_kc(data_minima, data_maxima, semeadura_, colheita_, periodo_kc,
                  kc_vetorizado, path_img_referencia, i, path_out):

    import ctypes
    import ConfigParser
    config = ConfigParser.RawConfigParser()
    config.read('workspace.properties')

    company = config.get('Version', 'company')
    product = config.get('Version', 'product')
    subproduct = config.get('Version', 'subproduct')
    version = config.get('Version', 'Version')

    myappid = (company + "." + product + "." + subproduct + "." + version)
    ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)

    threading.currentThread().terminada = False
    imagem_kc = RasterFile(file_full_path=path_img_referencia)
    imagem_kc.loadRasterData()
    imagem_kc.file_path = path_out

    #print imagem_kc.metadata

    n_linhas = len(semeadura_)
    n_colunas = len(colheita_[0])

    delta_total = (data_maxima - data_minima).days + 1

    for i_dia in range(0, delta_total):

        imagem_kc_ = np.zeros((n_linhas, n_colunas))
        imagem_kc_ = array(imagem_kc_).astype(dtype="uint8")

        dia = data_minima + timedelta(i_dia)

        imagem_kc.data = array(semeadura_)
        imagem_kc.file_name = str(dia.date())

        #if delta_total > 1 :

        #progresso = (i_dia/float(delta_total))*100

        for i_linha in range(0, n_linhas):

            progress(i_linha / float(n_linhas - 1))

            for i_coluna in range(0, n_colunas):

                try:
                    Ds = Ds_DC_to_date(semeadura_[i_linha][i_coluna])
                    Dc = Ds_DC_to_date(colheita_[i_linha][i_coluna])
                    delta_c = (Dc - Ds).days + 1

                    if (dia >= Ds and dia <= Dc):
                        k = dia - Ds
                        i_FKc = int((k * periodo_kc).days / delta_c)
                        Kc = kc_vetorizado[i_FKc]
                        imagem_kc_[i_linha][i_coluna] = Kc
                except:
                    pass

        imagem_kc.metadata.update(nodata=0)
        imagem_kc.saveRasterData(band_matrix=imagem_kc_)
    print "retornando do processo", i
    #threading.currentThread().stopped = True
    threading.currentThread().terminada = True
    return None
Exemplo n.º 11
0
    def __execOperation__(self):

        global nullValue, imagem_media, imagem_sd, imagem_cv, imagem_soma, imagem_min, imagem_max
        global imagem_mediana, imagem_amplitude, images, n_linhas, n_colunas, threads_ready, n_threadings

        print("executando operação")

        images_super = self.paramentrosIN_carregados["images"]
        print("Numero de imagens para ler: " + str(len(images_super)))
        nullValue = np.double(images_super[0].getRasterInformation()["NoData"])
        statistics = self.paramentrosIN_carregados["statistics"]

        print("Estatisticas a fazer: ", statistics)

        do = dict()

        do["Media"] = "media" in statistics
        do["CV"] = "cv" in statistics
        do["SD"] = "sd" in statistics
        do["Soma"] = "soma" in statistics
        do["Min"] = "min" in statistics
        do["Max"] = "max" in statistics
        do["Mediana"] = "mediana" in statistics
        do["Amplitude"] = "amplitude" in statistics

        images = images_super.loadListRasterData()

        print("Numero de imagens lidas: " + str(len(images)))

        n_linhas = len(images[0])
        n_colunas = len(images[0][0])

        for img in images:
            if len(img) != n_linhas or len(img[0]) != n_colunas:
                raise IndexError(
                    "Erro - As imagens precisam ter o mesmo número de linhas e colunas"
                )

        print("numero de colunas e linhas: " + str(n_linhas) + " : " +
              str(n_colunas))

        #imagem_referencia = [[0 for x in range(n_colunas)] for x in range(n_linhas)]
        imagem_referencia = np.zeros((n_linhas, n_colunas))

        imagem_out = dict

        if do["Media"]:
            imagem_out["media"] = array(
                imagem_referencia)  #.astype(dtype="int16")
        if do["CV"]:
            imagem_out["cv"] = array(
                imagem_referencia)  #.astype(dtype="int16")
        if do["SD"]:
            imagem_out["sd"] = array(
                imagem_referencia)  #.astype(dtype="int16")
        if do["Soma"]:
            imagem_out["soma"] = array(
                imagem_referencia)  #.astype(dtype="int16")
        if do["Min"]:
            imagem_out["min"] = array(
                imagem_referencia)  #.astype(dtype="int16")
        if do["Max"]:
            imagem_out["max"] = array(
                imagem_referencia)  #.astype(dtype="int16")
        if do["Mediana"]:
            imagem_out["mediana"] = array(
                imagem_referencia)  #.astype(dtype="int16")
        if do["Amplitude"]:
            imagem_out["amplitude"] = array(
                imagem_referencia)  #.astype(dtype="int16")

        print("processando:")

        numero_de_nucleos = GeneralTools.available_cpu_count()
        n_threadings = int(numero_de_nucleos - 2)
        print("Numero de threads", n_threadings)
        threads_ready = 0

        pool = Pool()
        #pool = multiprocessing.Pool(processes=n_threadings)

        for i in range(0, n_threadings):
            #t = threading.Thread(target=thread_process, args=(n_linhas/n_threadings*i, n_linhas/n_threadings*(i+1)))
            #t.start()
            linha_inicial = n_linhas / n_threadings * i
            linha_final = n_linhas / n_threadings * (i + 1)
            p = Process(target=thread_process,
                        args=(linha_inicial, linha_final))
            p.start()

            #pool.map(thread_process(n_linhas/n_threadings*i, n_linhas/n_threadings*(i+1)))
            #pool.close()

        while (threads_ready < n_threadings):
            pass

        print("Arrumando imagens de saida")

        saida = SerialFile()
        saida.metadata = self.paramentrosIN_carregados["images"][0].metadata

        if do["Media"]:
            imagem_media = RasterFile(data=imagem_media)
            imagem_media.metadata = saida.metadata
            imagem_media.file_name = "imagem_media"
            saida.append(imagem_media)
        if do["CV"]:
            imagem_cv = RasterFile(data=imagem_cv)
            imagem_cv.metadata = saida.metadata
            imagem_cv.file_name = "imagem_coeficiente_variacao"
            saida.append(imagem_cv)
        if do["SD"]:
            imagem_sd = RasterFile(data=imagem_sd)
            imagem_sd.metadata = saida.metadata
            imagem_sd.file_name = "imagem_desvio_padrao"
            saida.append(imagem_sd)
        if do["Soma"]:
            imagem_soma = RasterFile(data=imagem_soma)
            imagem_soma.metadata = saida.metadata
            imagem_soma.file_name = "imagem_soma"
            saida.append(imagem_soma)
        if do["Min"]:
            imagem_min = RasterFile(data=imagem_min)
            imagem_min.metadata = saida.metadata
            imagem_min.file_name = "imagem_minimo"
            saida.append(imagem_min)
        if do["Max"]:
            imagem_max = RasterFile(data=imagem_max)
            imagem_max.metadata = saida.metadata
            imagem_max.file_name = "imagem_maximo"
            saida.append(imagem_max)
        if do["Mediana"]:
            imagem_mediana = RasterFile(data=imagem_mediana)
            imagem_mediana.metadata = saida.metadata
            imagem_mediana.file_name = "imagem_mediana"
            saida.append(imagem_mediana)
        if do["Amplitude"]:
            imagem_amplitude = RasterFile(data=imagem_amplitude)
            imagem_amplitude.metadata = saida.metadata
            imagem_amplitude.file_name = "imagem_amplitude"
            saida.append(imagem_amplitude)

        print("imagens prontas para gravar, statistical stractor completo")

        return saida
Exemplo n.º 12
0
    def __execOperation__(self):
        
        self.print_text(u"Iniciando função")


        images_super = self.paramentrosIN_carregados["images"]
        self.console(u"Número de imagens para ler: " + str(len(images_super)))
        nullValue = self.paramentrosIN_carregados["null_value"]
        statistics = self.paramentrosIN_carregados["statistics"]
        
        #self.print_text("Estatisticas a fazer: ", statistics)
        
        doMedia = "media" in statistics 
        doCV = "cv" in statistics
        doSD = "sd" in statistics
        doSoma = "soma" in statistics
        doMin = "min" in statistics
        doMax = "max" in statistics
        doMediana = "mediana" in statistics
        doAmplitude = "amplitude" in statistics
        
        images = images_super.loadListRasterData()
        
        #self.print_text("Numero de imagens lidas: " + str(len(images)))
        
        n_linhas = len(images[0])
        n_colunas = len(images[0][0])
        
        for img in images:
            if len(img) != n_linhas or len(img[0]) != n_colunas:
                raise IndexError("Erro - As imagens precisam ter o mesmo número de linhas e colunas")
                
                
        #self.print_text("numero de colunas e linhas: " + str(n_linhas) + " : " + str(n_colunas))
        
        #imagem_referencia = [[0 for x in range(n_colunas)] for x in range(n_linhas)]  
        imagem_referencia = np.zeros((n_linhas, n_colunas))
        
        if doMedia : imagem_media = array(imagem_referencia).astype(dtype="float32")
        if doCV : imagem_cv = array(imagem_referencia).astype(dtype="float32")
        if doSD : imagem_sd = array(imagem_referencia)#.astype(dtype="int16")
        if doSoma : imagem_soma = array(imagem_referencia).astype(dtype="float32")
        if doMin : imagem_min = array(imagem_referencia).astype(dtype="float32")
        if doMax : imagem_max = array(imagem_referencia).astype(dtype="float32")
        if doMediana : imagem_mediana = array(imagem_referencia)#.astype(dtype="int16")
        if doAmplitude : imagem_amplitude = array(imagem_referencia).astype(dtype="float32")
        
        

        self.print_text(u"Processando:")
        
        
        #progress( 0.0)
        
        for i_linha in range(0, n_linhas):
            
            #status = i_linha+1/float(n_linhas)
            #progress(float(i_linha/float(n_linhas)))
            self.progresso = (float(i_linha/float(n_linhas)))*100

            for i_coluna in range(0, n_colunas):
                    line = list()
                    
                
                    if threading.currentThread().stopped() : return 

                #if nullValue != None and float(nullValue) == images[1][i_linha][i_coluna] :
                    #pass
                
                #else:              
                    for img in images:
                        line.append(img[i_linha][i_coluna])
                    
                    mean = None
                    sd = None
                    
                    if doCV : 

                        mean = np.nanmean(line)
                        sd = np.nanstd(line) 
                        
                        divisor = mean * 100
                        if divisor != 0 : cv = sd / mean * 100 
                        else : cv = 0
                        
                        imagem_cv[i_linha][i_coluna] = cv
        
                        
                    
                    if doMedia : 
                        if mean == None : mean = np.nanmean(line) # calcula a média
                        imagem_media[i_linha][i_coluna] = mean
                    
                    
                    if doSD : 
                        if sd == None : sd = np.nanstd(line)  # calcula o desvio padrão
                        imagem_sd[i_linha][i_coluna] = sd
                        
                    if doSoma : 
                        soma = np.nansum(line)
                        imagem_soma[i_linha][i_coluna] = soma
                    
                    minimo = None 
                    if doMin : 
                        minimo = np.nanmin(line)
                        imagem_min[i_linha][i_coluna] = minimo
                    
                    maximo = None
                    if doMax : 
                        maximo = np.nanmax(line)
                        imagem_max[i_linha][i_coluna] = maximo
                    
                    if doMediana :
                        mediana = np.nanmedian(line)
                        imagem_mediana[i_linha][i_coluna] = mediana
                    
                    if doAmplitude :
                        if minimo == None : minimo = np.nanmin(line)
                        if maximo == None : maximo = np.nanmax(line)
                        amplitude = maximo - minimo
                        imagem_amplitude[i_linha][i_coluna] = amplitude
        
        self.print_text(u"Arrumando imagens de saida")
        
        saida = SerialFile ()
        saida.metadata = self.paramentrosIN_carregados["images"][0].metadata
        
        if doMedia: 
            imagem_media = RasterFile(data = imagem_media)
            imagem_media.metadata = saida.metadata
            imagem_media.file_name = "imagem_media"
            saida.append(imagem_media) 
        if doCV:
            imagem_cv = RasterFile(data = imagem_cv)
            imagem_cv.metadata = saida.metadata
            imagem_cv.file_name = "imagem_coeficiente_variacao"
            saida.append(imagem_cv)
        if doSD : 
            imagem_sd = RasterFile(data = imagem_sd)
            imagem_sd.metadata = saida.metadata
            imagem_sd.file_name = "imagem_desvio_padrao"
            saida.append(imagem_sd)
        if doSoma : 
            imagem_soma = RasterFile(data = imagem_soma)
            imagem_soma.metadata = saida.metadata
            imagem_soma.file_name = "imagem_soma"
            saida.append(imagem_soma)
        if doMin : 
            imagem_min = RasterFile(data = imagem_min)
            imagem_min.metadata = saida.metadata
            imagem_min.file_name = "imagem_minimo"
            saida.append(imagem_min)
        if doMax : 
            imagem_max = RasterFile(data = imagem_max)
            imagem_max.metadata = saida.metadata
            imagem_max.file_name = "imagem_maximo"
            saida.append(imagem_max)
        if doMediana : 
            imagem_mediana = RasterFile(data = imagem_mediana)
            imagem_mediana.metadata = saida.metadata
            imagem_mediana.file_name = "imagem_mediana"
            saida.append(imagem_mediana)
        if doAmplitude : 
            imagem_amplitude = RasterFile(data = imagem_amplitude)
            imagem_amplitude.metadata = saida.metadata
            imagem_amplitude.file_name = "imagem_amplitude"
            saida.append(imagem_amplitude)
            
        self.print_text(u"imagens prontas para gravar, statistical stractor completo")

        return saida