예제 #1
0
    def __execOperation__(self):

        sys.stdout.write("Inicializando Parametros...")
        self.print_text(u"Inicializando Parametros...")

        prefix = self.paramentrosIN_carregados["prefixo"]
        sufix = self.paramentrosIN_carregados["sufixo"]

        mask = self.paramentrosIN_carregados["mask"]

        images_super = self.paramentrosIN_carregados["images"]
        avanco_semeadura = self.paramentrosIN_carregados["avanco_semeadura"]
        avanco_semeadura = avanco_semeadura
        avanco_colheita = self.paramentrosIN_carregados["avanco_colheita"]
        avanco_colheita = avanco_colheita

        intervalo_semeadura = self.paramentrosIN_carregados[
            "intervalo_semeadura"]
        intervalo_pico = self.paramentrosIN_carregados["intervalo_pico"]
        intervalo_colheita = self.paramentrosIN_carregados[
            "intervalo_colheita"]

        #barra_progresso = self.paramentrosIN_carregados["progress_bar"]

        intervalo_semeadura = intervalo_semeadura.split("-")
        intervalo_pico = intervalo_pico.split("-")
        intervalo_colheita = intervalo_colheita.split("-")

        images = images_super.loadListRasterData()

        if images == None:
            raise Exception(
                "A funcao necessita de uma serie de imagens para funcionar")

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

        nullValue = float(self.paramentrosIN_carregados["null_value"])
        if (images[0][0][0] == nullValue): print("null value igual")
        #else : print("diferente")

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

        imagem_semeadura = array(imagem_referencia).astype(dtype="int32")
        imagem_colheita = array(imagem_referencia).astype(dtype="int32")
        imagem_pico = array(imagem_referencia).astype(dtype="int32")

        sys.stdout.write("Gerando estimativas: ")
        self.print_text("Gerando estimativas.")
        progress(0.0)

        imagem_for_null_value = images[0]
        #nullValue = imagem_for_null_value[0][0]

        avanco_semeadura = timedelta(avanco_semeadura)
        avanco_colheita = timedelta(avanco_colheita)

        images_super[0].metadata.update(nodata=0)

        for i_linhas in range(0, n_linhas):
            #progress(i_linhas/float(n_linhas))
            self.setProgresso(i_linhas, n_linhas)
            for i_coluna in range(0, n_colunas):
                line = list()

                if threading.currentThread().stopped(): return

                if nullValue != imagem_for_null_value[i_linhas][i_coluna]:

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

                    cenaPico = self.findPeakHelper(line, int(
                        intervalo_pico[0]), int(intervalo_pico[1]))  # 3 - 23
                    data_txt_pico = images_super[cenaPico].file_name.replace(
                        prefix, "").replace(sufix, "")
                    data_pico = dt.strptime(data_txt_pico, mask)
                    ano_pico = data_pico.year
                    dia_juliano = data_pico.timetuple().tm_yday

                    imagem_pico[i_linhas][i_coluna] = ((ano_pico * 1000) +
                                                       dia_juliano)

                    cenaSemeadura = self.findLowPeakHelper(
                        line, int(intervalo_semeadura[0]),
                        int(intervalo_semeadura[1]))  # 6 - 23
                    cenaColheita = self.findLowPeakHelper(
                        line, int(intervalo_colheita[0]),
                        int(intervalo_colheita[1]))  # 11 - 34

                    data_txt_semeadura = images_super[
                        cenaSemeadura].file_name.replace(prefix, "").replace(
                            sufix, "")
                    data_semeadura = dt.strptime(data_txt_semeadura, mask)

                    data_txt_colheita = images_super[
                        cenaColheita].file_name.replace(prefix,
                                                        "").replace(sufix, "")
                    data_colheita = dt.strptime(data_txt_colheita, mask)

                    picoMenosSemeadura = data_pico - data_semeadura
                    ColheitaMenosPico = data_colheita - data_pico
                    data_semeadura += timedelta(
                        (picoMenosSemeadura.days * avanco_semeadura).days)
                    data_colheita += timedelta(
                        (ColheitaMenosPico.days * avanco_colheita).days)

                    dia_juliano_semeadura = data_semeadura.timetuple().tm_yday
                    imagem_semeadura[i_linhas][i_coluna] = (
                        (data_semeadura.year * 1000) + dia_juliano_semeadura)

                    dia_juliano_colheita = data_colheita.timetuple().tm_yday
                    imagem_colheita[i_linhas][i_coluna] = (
                        (data_colheita.year * 1000) + dia_juliano_colheita)

        saida = TableData()
        imagem_semeadura = RasterFile(data=imagem_semeadura)
        imagem_semeadura.metadata = images_super[0].metadata
        imagem_semeadura.data_name = "semeadura"

        imagem_colheita = RasterFile(data=imagem_colheita)
        imagem_colheita.metadata = images_super[0].metadata
        imagem_colheita.data_name = "colheita"

        imagem_pico = RasterFile(data=imagem_pico)
        imagem_pico.metadata = images_super[0].metadata
        imagem_pico.data_name = "cenaPico"

        saida["imagem_semeadura"] = imagem_semeadura
        saida["imagem_colheita"] = imagem_colheita
        saida["imagem_pico"] = imagem_pico

        return saida
예제 #2
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
예제 #3
0
파일: PPR.py 프로젝트: Paloschi/Gafanhoto
    def __execOperation__(self):
        
        serie_T = self.paramentrosIN_carregados["T"].loadListByRoot()
        serie_PPR = self.paramentrosIN_carregados["PPR"]
        self.Cc = self.paramentrosIN_carregados["Cc"]
        
        matriz = serie_T[0]
        matriz_ = matriz.loadRasterData()
        info = matriz.getRasterInformation()
        nullValue = info["NoData"]
        
        img_lat = self.img_lat_long(info, matriz_, nullValue)
        lat_rad = np.radians(img_lat)
        
        a = float(180)/np.pi
        
        ii=1
        
        for T in serie_T:
            
            if threading.currentThread().stopped()  : return 

            
            start = time.time()
            T_ = np.array(T.loadRasterData()).astype(dtype="float32")
            data_T = serie_T.getDate_time(file=T)
            dj = data_T.timetuple().tm_yday # Dia Juliano
            
            #print dj
            
            declinacao_solar = 23.45 * np.sin(np.radians((float(360)/float(365)) * (float(dj)-float(80))))
            declinacao_solar_r = np.radians(declinacao_solar)
            
            angulo_solar = np.arccos(np.radians(-np.tan(lat_rad) * np.tan(declinacao_solar_r))) * a

            "DR = Distancia relativa sol-terra"
            agulo_solar_r = np.radians(angulo_solar)
            if declinacao_solar != 0:
                DR = 1 + 0.0033 * np.cos(np.radians(360/(365*declinacao_solar)))
            else :
                DR = 1
            
            radiacao_topo_atmosfera = 37.6 * DR * ((np.pi/180) * angulo_solar * np.sin(declinacao_solar_r) * np.sin(lat_rad) + np.cos(declinacao_solar_r) * np.cos(lat_rad) * np.sin(agulo_solar_r))
            #radiacao_topo_atmosfera = radiacao_topo_atmosfera * 23.92344
            
            ctn = 0.583 + 0.014 * T_ + 0.0013 * (T_**2) - 0.000037 * (T_**3)
            ctc = -0.0425 + 0.035 * T_ + 0.00325 * (T_**2) - 0.0000925 * (T_**3)
            
            n_t = range(len(T_))
            
            for i in n_t: 
                
                index = [(T_[i]<16.5) & (T_[i]>37)]
                
                ctn[i][index] = -0.0425 + 0.035 * T_[i][index] + 0.00325 * (T_[i][index]**2) - 0.0000925 * (T_[i][index]**3)
                ctc[i][index] = -1.085 + 0.07 * T_[i][index] + 0.0065 * (T_[i][index]**2) - 0.000185 * (T_[i][index]**3)
                
            
            PPBn = (31.7+0.219*radiacao_topo_atmosfera) * ctn * 0.6
            
            PPBc = (107.2+0.219*radiacao_topo_atmosfera) * ctc * 0.6
            
            PPBp = PPBn + PPBc
            
            PPR_ = 0.265455 * self.Cc * PPBp

            PPR = RasterFile(file_path=serie_PPR.root_path, ext="tif")
            PPR = serie_PPR.setDate_time(data_T, file=PPR)       
            PPR.metadata = T.metadata
            PPR.data = PPR_
            PPR.saveRasterData()
            PPR.data = None
            serie_PPR.append(PPR)
            
            ii +=1
            end = time.time()
            
            self.console("tempo restante(m):" + str( np.round(((end - start)  * (len(serie_T)-ii)) /60, 2)))
            self.setProgresso(ii, len(serie_T))
            
        return serie_PPR
예제 #4
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
    def __execOperation__(self):
        
        prefix = self.paramentrosIN_carregados["prefixo"]
        sufix = self.paramentrosIN_carregados["sufixo"]
        
        mask =  self.paramentrosIN_carregados["mask"]
        
        images_super = self.paramentrosIN_carregados["images"]
        avanco_semeadura = self.paramentrosIN_carregados["avanco_semeadura"]
        avanco_semeadura = avanco_semeadura
        avanco_colheita = self.paramentrosIN_carregados["avanco_colheita"]
        avanco_colheita = avanco_colheita
        
        intervalo_semeadura = self.paramentrosIN_carregados["intervalo_semeadura"]
        intervalo_pico = self.paramentrosIN_carregados["intervalo_pico"]
        intervalo_colheita = self.paramentrosIN_carregados["intervalo_colheita"]
        
        #barra_progresso = self.paramentrosIN_carregados["progress_bar"]
        
        intervalo_semeadura = intervalo_semeadura.split("-")
        intervalo_pico = intervalo_pico.split("-")
        intervalo_colheita = intervalo_colheita.split("-")
        
        images = images_super.loadListRasterData()
        
        if images==None:
            raise Exception("A funcao necessita de uma serie de imagens para funcionar")
        
        n_images = len(images)
        n_linhas = len(images[0])
        n_colunas = len(images[0][0])
        
        
        #nullValue = float(self.paramentrosIN_carregados["null_value"])
        

        #if(images[0][0][0] == nullValue) : print("null value igual") 
        #else : print("diferente")
        
        sys.stdout.write( "Criando imagens de referencia: ")
        self.print_text(u"Criando imagens de referência.")
        imagem_referencia = np.zeros((n_linhas, n_colunas))
        
        imagem_semeadura = array(imagem_referencia).astype(dtype="int32")
        imagem_colheita = array(imagem_referencia).astype(dtype="int32")
        imagem_pico = array(imagem_referencia).astype(dtype="int32")

        
        sys.stdout.write( "Gerando estimativas: ")
        self.print_text("Gerando estimativas.")
        progress(0.0)
        
        imagem_for_null_value = images[0]
        nullValue = imagem_for_null_value[0][0]
        #print(nullValue)
        
        avanco_semeadura = timedelta(avanco_semeadura)
        avanco_colheita = timedelta(avanco_colheita)
        
        images_super[0].metadata.update(nodata=0)
        #print images_super[0].metadata
        
        for i_linhas in range(0, n_linhas):
            progress(i_linhas/float(n_linhas))
            self.progresso = (i_linhas/float(n_linhas)) * 100
            for i_coluna in range(0, n_colunas):
                line = list()
                
                
                if threading.currentThread().stopped()  : return 
                    
                if nullValue != imagem_for_null_value[i_linhas][i_coluna] :
                            
                    for img in images:
                        line.append(img[i_linhas][i_coluna])
                    
                    cenaPico = self.findPeakHelper(line, int(intervalo_pico[0]), int(intervalo_pico[1])) # 3 - 23
                    data_txt_pico = images_super[cenaPico].file_name.replace(prefix, "").replace(sufix, "") 
                    data_pico = dt.strptime(data_txt_pico, mask)
                    ano_pico = data_pico.year
                    dia_juliano = data_pico.timetuple().tm_yday     
                    
                    imagem_pico[i_linhas][i_coluna] = ((ano_pico * 1000) + dia_juliano)
                      
                    cenaSemeadura = self.findLowPeakHelper(line, int(intervalo_semeadura[0]), int(intervalo_semeadura[1])) # 6 - 23
                    cenaColheita = self.findLowPeakHelper(line, int(intervalo_colheita[0]), int(intervalo_colheita[1])) # 11 - 34
                    
                    data_txt_semeadura = images_super[cenaSemeadura].file_name.replace(prefix, "").replace(sufix, "") 
                    data_semeadura = dt.strptime(data_txt_semeadura, mask)
                                   
                    data_txt_colheita = images_super[cenaColheita].file_name.replace(prefix, "").replace(sufix, "") 
                    data_colheita = dt.strptime(data_txt_colheita, mask)
                    
                    picoMenosSemeadura = data_pico - data_semeadura
                    ColheitaMenosPico = data_colheita - data_pico
                    data_semeadura += timedelta((picoMenosSemeadura.days * avanco_semeadura).days)
                    data_colheita += timedelta((ColheitaMenosPico.days * avanco_colheita).days)
                    
                    dia_juliano_semeadura = data_semeadura.timetuple().tm_yday 
                    imagem_semeadura[i_linhas][i_coluna] = ((data_semeadura.year * 1000) + dia_juliano_semeadura)
            
                    dia_juliano_colheita = data_colheita.timetuple().tm_yday 
                    imagem_colheita[i_linhas][i_coluna] = ((data_colheita.year * 1000) + dia_juliano_colheita)
                    
        saida = TableData()
        imagem_semeadura = RasterFile(data=imagem_semeadura)
        imagem_semeadura.metadata = images_super[0].metadata
        imagem_semeadura.data_name = "semeadura"
        
        imagem_colheita = RasterFile(data=imagem_colheita)
        imagem_colheita.metadata = images_super[0].metadata
        imagem_colheita.data_name = "colheita"
        
        imagem_pico = RasterFile(data=imagem_pico)
        imagem_pico.metadata = images_super[0].metadata
        imagem_pico.data_name = "cenaPico"
        
        saida["imagem_semeadura"] = imagem_semeadura
        saida["imagem_colheita"] = imagem_colheita
        saida["imagem_pico"] = imagem_pico
        
        return saida
예제 #6
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()
    
예제 #7
0
파일: PPR.py 프로젝트: Paloschi/CyMP
    def __execOperation__(self):

        self.console(u"Iniciando parametros.")

        serie_T = self.paramentrosIN_carregados["T"].loadListByRoot()
        serie_PPR = self.paramentrosIN_carregados["PPR"]
        self.Cc = self.paramentrosIN_carregados["Cc"]

        matriz = serie_T[0]
        matriz_ = matriz.loadRasterData()
        info = matriz.getRasterInformation()
        nullValue = info["NoData"]

        img_lat = self.img_lat_long(info, matriz_, nullValue)
        lat_rad = np.radians(img_lat)

        a = float(180) / np.pi

        ii = 1

        n_imagens = len(serie_T)
        self.console(u"Número de imagens de encontradas: " + str(n_imagens))
        self.console(u"Processando...")

        for T in serie_T:

            if threading.currentThread().stopped(): return

            #start = time.time()
            T_ = np.array(T.loadRasterData()).astype(dtype="float32")
            data_T = serie_T.getDate_time(file=T)
            dj = data_T.timetuple().tm_yday  # Dia Juliano

            #print dj

            declinacao_solar = 23.45 * np.sin(
                np.radians(
                    (float(360) / float(365)) * (float(dj) - float(80))))
            declinacao_solar_r = np.radians(declinacao_solar)

            angulo_solar = np.arccos(
                np.radians(-np.tan(lat_rad) * np.tan(declinacao_solar_r))) * a

            "DR = Distancia relativa sol-terra"
            agulo_solar_r = np.radians(angulo_solar)
            if declinacao_solar != 0:
                DR = 1 + 0.0033 * np.cos(
                    np.radians(360 / (365 * declinacao_solar)))
            else:
                DR = 1

            radiacao_topo_atmosfera = 37.6 * DR * (
                (np.pi / 180) * angulo_solar * np.sin(declinacao_solar_r) *
                np.sin(lat_rad) + np.cos(declinacao_solar_r) *
                np.cos(lat_rad) * np.sin(agulo_solar_r))
            #radiacao_topo_atmosfera = radiacao_topo_atmosfera * 23.92344

            ctn = 0.583 + 0.014 * T_ + 0.0013 * (T_**2) - 0.000037 * (T_**3)
            ctc = -0.0425 + 0.035 * T_ + 0.00325 * (T_**2) - 0.0000925 * (T_**
                                                                          3)

            n_t = range(len(T_))

            for i in n_t:

                index = [(T_[i] < 16.5) & (T_[i] > 37)]

                ctn[i][index] = -0.0425 + 0.035 * T_[i][index] + 0.00325 * (
                    T_[i][index]**2) - 0.0000925 * (T_[i][index]**3)
                ctc[i][index] = -1.085 + 0.07 * T_[i][index] + 0.0065 * (
                    T_[i][index]**2) - 0.000185 * (T_[i][index]**3)

            PPBn = (31.7 + 0.219 * radiacao_topo_atmosfera) * ctn * 0.6

            PPBc = (107.2 + 0.219 * radiacao_topo_atmosfera) * ctc * 0.6

            PPBp = PPBn + PPBc

            PPR_ = 0.265455 * self.Cc * PPBp

            PPR = RasterFile(file_path=serie_PPR.root_path, ext="tif")
            PPR = serie_PPR.setDate_time(data_T, file=PPR)
            PPR.metadata = T.metadata
            #print (PPR.metadata)

            PPR_[PPR_ == float('Inf')] = PPR.metadata["nodata"]
            #ks_[i][taw_[i] == float('NaN')] = -1

            PPR.data = PPR_
            PPR.metadata.update(dtype=PPR.data.dtype)
            PPR.saveRasterData()
            PPR.data = None
            serie_PPR.append(PPR)

            ii += 1
            #end = time.time()

            #self.console("tempo restante(m):" + str( np.round(((end - start)  * (len(serie_T)-ii)) /60, 2)))
            self.setProgresso(ii, len(serie_T))

        return serie_PPR
예제 #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.")

        
예제 #9
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
예제 #10
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