Пример #1
0
def generateSamples_classifMix(folderSample, workingDirectory, trainShape,
                               pathWd, featuresPath, samplesOptions,
                               annualCrop, AllClass, dataField, pathConf,
                               configPrevClassif):
    currentTile, bindingPy = trainShape.split("/")[-1].split("_")[0], Config(
        file(pathConf)).GlobChain.bindingPython
    targetResolution, validityThreshold = Config(
        file(pathConf)).chain.spatialResolution, Config(
            file(pathConf)).argTrain.validityThreshold
    previousClassifPath, projOut = Config(
        file(configPrevClassif)).chain.outputPath, Config(
            file(configPrevClassif)).GlobChain.proj
    projOut = int(projOut.split(":")[-1])
    stack = "/Final/" + fu.getFeatStackName(pathConf)
    userFeatPath = Config(file(pathConf)).chain.userFeatPath
    if userFeatPath == "None": userFeatPath = None

    featImg = featuresPath + "/" + currentTile + "/" + stack
    if bindingPy == "True":
        featImg = fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/",
                                    True, "ST_MASK")[0]

    nameNonAnnual = trainShape.split("/")[-1].replace(".shp", "_NonAnnu.shp")
    nonAnnualShape = workingDirectory + "/" + nameNonAnnual

    nameAnnual = trainShape.split("/")[-1].replace(".shp", "_Annu.shp")
    AnnualShape = workingDirectory + "/" + nameAnnual

    nonAnnualCropFind = filterShpByClass(dataField, nonAnnualShape, AllClass,
                                         trainShape)
    annualCropFind = filterShpByClass(dataField, AnnualShape, annualCrop,
                                      trainShape)

    gdalDriver = "SQLite"
    SampleSel_NA = workingDirectory + "/" + nameNonAnnual.replace(
        ".shp", "_SampleSel_NA.sqlite")
    stats_NA = workingDirectory + "/" + nameNonAnnual.replace(
        ".shp", "_STATS.xml")
    if nonAnnualCropFind:
        cmd = "otbcli_PolygonClassStatistics -in " + featImg + " -vec " + nonAnnualShape + " -field " + dataField + " -out " + stats_NA
        print cmd
        os.system(cmd)
        verifPolyStats(stats_NA)
        cmd = "otbcli_SampleSelection -in " + featImg + " -vec " + nonAnnualShape + " -field " + dataField + " -instats " + stats_NA + " -out " + SampleSel_NA + " " + samplesOptions
        print cmd
        os.system(cmd)
        allCoord = getPointsCoordInShape(SampleSel_NA, gdalDriver)

    else:
        allCoord = [0]

    nameAnnual = trainShape.split("/")[-1].replace(".shp", "_Annu.sqlite")
    annualShape = workingDirectory + "/" + nameAnnual
    validityRaster = fu.FileSearch_AND(previousClassifPath + "/final/TMP",
                                       True, currentTile, "Cloud.tif")[0]
    classificationRaster = fu.FileSearch_AND(
        previousClassifPath + "/final/TMP", True,
        currentTile + "_seed_0.tif")[0]
    maskFolder = previousClassifPath + "/classif/MASK"

    if annualCropFind:
        genAS.genAnnualShapePoints(allCoord, gdalDriver, workingDirectory,
                                   targetResolution, annualCrop, dataField,
                                   currentTile, validityThreshold,
                                   validityRaster, classificationRaster,
                                   maskFolder, trainShape, annualShape)

    MergeName = trainShape.split("/")[-1].replace(".shp", "_selectionMerge")
    sampleSelection = workingDirectory + "/" + MergeName + ".sqlite"

    if nonAnnualCropFind and annualCropFind:
        createSamplePoint(SampleSel_NA, annualShape, dataField,
                          sampleSelection, projOut)
    elif nonAnnualCropFind and not annualCropFind:
        shutil.copy(SampleSel_NA, sampleSelection)
    elif not nonAnnualCropFind and annualCropFind:
        shutil.copy(annualShape, sampleSelection)

    samples = workingDirectory + "/" + trainShape.split("/")[-1].replace(
        ".shp", "_Samples.sqlite")
    if bindingPy == "False":
        folderSample + "/" + trainShape.split("/")[-1].replace(
            ".shp", "_Samples.sqlite")
        if not os.path.exists(
                folderSample + "/" +
                trainShape.split("/")[-1].replace(".shp", "_Samples.sqlite")):
            cmd = "otbcli_SampleExtraction -in " + featImg + " -vec " + sampleSelection + " -field " + dataField + " -out " + samples
            print cmd
            os.system(cmd)
    else:
        AllRefl = sorted(
            fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/", True,
                              "REFL.tif"))
        AllMask = sorted(
            fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/", True,
                              "MASK.tif"))
        datesInterp = sorted(
            fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/", True,
                              "DatesInterp"))
        realDates = sorted(
            fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/", True,
                              "imagesDate"))

        print AllRefl
        print AllMask
        print datesInterp
        print realDates
        # gapFill + feat
        features = []
        concatSensors = otb.Registry.CreateApplication("ConcatenateImages")
        for refl, mask, datesInterp, realDates in zip(AllRefl, AllMask,
                                                      datesInterp, realDates):
            gapFill = otb.Registry.CreateApplication(
                "ImageTimeSeriesGapFilling")
            nbDate = fu.getNbDateInTile(realDates)
            nbReflBands = fu.getRasterNbands(refl)
            comp = int(nbReflBands) / int(nbDate)
            print datesInterp
            if not isinstance(comp, int):
                raise Exception("unvalid component by date (not integer) : " +
                                comp)
            gapFill.SetParameterString("in", refl)
            gapFill.SetParameterString("mask", mask)
            gapFill.SetParameterString("comp", str(comp))
            gapFill.SetParameterString("it", "linear")
            gapFill.SetParameterString("id", realDates)
            gapFill.SetParameterString("od", datesInterp)
            gapFill.Execute()
            concatSensors.AddImageToParameterInputImageList(
                "il", gapFill.GetParameterOutputImage("out"))
            features.append(gapFill)

            # sensors Concatenation + sampleExtraction
        sampleExtr = otb.Registry.CreateApplication("SampleExtraction")
        sampleExtr.SetParameterString("ram", "128")
        sampleExtr.SetParameterString("vec", sampleSelection)
        sampleExtr.SetParameterString("field", dataField)
        sampleExtr.SetParameterString("out", samples)
        # if len(AllRefl) > 1:
        #    concatSensors.Execute()
        #    sampleExtr.SetParameterInputImage("in",concatSensors.GetParameterOutputImage("out"))
        # else:
        #    sampleExtr.SetParameterInputImage("in",features[0].GetParameterOutputImage("out"))
        # sampleExtr.ExecuteAndWriteOutput()

        if len(AllRefl) > 1:
            concatSensors.Execute()
            allFeatures = concatSensors.GetParameterOutputImage("out")
        else:
            allFeatures = features[0].GetParameterOutputImage("out")

        if userFeatPath:
            print "Add user features"
            userFeat_arbo = Config(file(pathConf)).userFeat.arbo
            userFeat_pattern = (Config(
                file(pathConf)).userFeat.patterns).split(",")
            concatFeatures = otb.Registry.CreateApplication(
                "ConcatenateImages")
            userFeatures = fu.getUserFeatInTile(userFeatPath, currentTile,
                                                userFeat_arbo,
                                                userFeat_pattern)
            concatFeatures.SetParameterStringList("il", userFeatures)
            concatFeatures.Execute()

            concatAllFeatures = otb.Registry.CreateApplication(
                "ConcatenateImages")
            concatAllFeatures.AddImageToParameterInputImageList(
                "il", allFeatures)
            concatAllFeatures.AddImageToParameterInputImageList(
                "il", concatFeatures.GetParameterOutputImage("out"))
            concatAllFeatures.Execute()

            allFeatures = concatAllFeatures.GetParameterOutputImage("out")

        sampleExtr.SetParameterInputImage("in", allFeatures)
        sampleExtr.ExecuteAndWriteOutput()
    if pathWd:
        shutil.copy(
            samples, folderSample + "/" +
            trainShape.split("/")[-1].replace(".shp", "_Samples.sqlite"))
    os.remove(SampleSel_NA)
    os.remove(sampleSelection)
    os.remove(stats_NA)
Пример #2
0
def generateSamples_cropMix(folderSample, workingDirectory, trainShape, pathWd,
                            featuresPath, samplesOptions, prevFeatures,
                            annualCrop, AllClass, dataField, pathConf):
    currentTile = trainShape.split("/")[-1].split("_")[0]
    bindingPy = Config(file(pathConf)).GlobChain.bindingPython
    samplesClassifMix = Config(file(pathConf)).argTrain.samplesClassifMix

    userFeatPath = Config(file(pathConf)).chain.userFeatPath
    if userFeatPath == "None": userFeatPath = None

    stack = "/Final/" + fu.getFeatStackName(pathConf)
    NA_img = featuresPath + "/" + currentTile + "/" + stack
    A_img = prevFeatures + "/" + currentTile + "/" + stack
    if bindingPy == "True":
        NA_img = fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/",
                                   True, "ST_MASK")[0]
        A_img = fu.FileSearch_AND(prevFeatures + "/" + currentTile + "/tmp/",
                                  True, "ST_MASK")[0]
    # Step 1 : filter trainShape in order to keep non-annual class
    nameNonAnnual = trainShape.split("/")[-1].replace(".shp", "_NonAnnu.shp")
    nonAnnualShape = workingDirectory + "/" + nameNonAnnual
    filterShpByClass(dataField, nonAnnualShape, AllClass, trainShape)

    # Step 2 : filter trainShape in order to keep annual class
    nameAnnual = trainShape.split("/")[-1].replace(".shp", "_Annu.shp")
    annualShape = workingDirectory + "/" + nameAnnual
    annualCropFind = filterShpByClass(dataField, annualShape, annualCrop,
                                      trainShape)

    # Step 3 : nonAnnual stats
    stats_NA = workingDirectory + "/" + nameNonAnnual.replace(
        ".shp", "_STATS.xml")
    cmd = "otbcli_PolygonClassStatistics -in " + NA_img + " -vec " + nonAnnualShape + " -field " + dataField + " -out " + stats_NA
    print cmd
    os.system(cmd)

    verifPolyStats(stats_NA)

    # Step 4 : Annual stats
    stats_A = workingDirectory + "/" + nameAnnual.replace(".shp", "_STATS.xml")
    cmd = "otbcli_PolygonClassStatistics -in " + A_img + " -vec " + annualShape + " -field " + dataField + " -out " + stats_A
    if annualCropFind:
        print cmd
        os.system(cmd)
        verifPolyStats(stats_A)

    # Step 5 : Sample Selection NonAnnual
    SampleSel_NA = workingDirectory + "/" + nameNonAnnual.replace(
        ".shp", "_SampleSel_NA.sqlite")
    cmd = "otbcli_SampleSelection -in " + NA_img + " -vec " + nonAnnualShape + " -field " + dataField + " -instats " + stats_NA + " -out " + SampleSel_NA + " " + samplesOptions
    print cmd
    os.system(cmd)

    # Step 6 : Sample Selection Annual
    SampleSel_A = workingDirectory + "/" + nameAnnual.replace(
        ".shp", "_SampleSel_A.sqlite")
    cmd = "otbcli_SampleSelection -in " + A_img + " -vec " + annualShape + " -field " + dataField + " -instats " + stats_A + " -out " + SampleSel_A + " " + samplesOptions
    if annualCropFind:
        print cmd
        os.system(cmd)
    SampleExtr_NA = workingDirectory + "/" + nameNonAnnual.replace(
        ".shp", "_SampleExtr_NA.sqlite")
    SampleExtr_A = workingDirectory + "/" + nameAnnual.replace(
        ".shp", "_SampleExtr_A.sqlite")
    if bindingPy == "False":
        # Step 7 : Sample extraction NonAnnual
        cmd = "otbcli_SampleExtraction -in " + NA_img + " -vec " + SampleSel_NA + " -field " + dataField + " -out " + SampleExtr_NA
        print cmd
        os.system(cmd)

        # Step 8 : Sample extraction Annual
        cmd = "otbcli_SampleExtraction -in " + A_img + " -vec " + SampleSel_A + " -field " + dataField + " -out " + SampleExtr_A
        if annualCropFind:
            print cmd
            os.system(cmd)
    else:
        # Step 7 : Sample extraction NonAnnual
        concatSensors = otb.Registry.CreateApplication("ConcatenateImages")
        AllRefl = sorted(
            fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/", True,
                              "REFL.tif"))
        AllMask = sorted(
            fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/", True,
                              "MASK.tif"))
        datesInterp = sorted(
            fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/", True,
                              "DatesInterp"))
        realDates = sorted(
            fu.FileSearch_AND(featuresPath + "/" + currentTile + "/tmp/", True,
                              "imagesDate"))
        features = []
        for refl, mask, datesInterp, realDates in zip(AllRefl, AllMask,
                                                      datesInterp, realDates):
            gapFill = otb.Registry.CreateApplication(
                "ImageTimeSeriesGapFilling")
            nbDate = fu.getNbDateInTile(realDates)
            nbReflBands = fu.getRasterNbands(refl)
            comp = int(nbReflBands) / int(nbDate)
            if not isinstance(comp, int):
                raise Exception("unvalid component by date (not integer) : " +
                                comp)
            gapFill.SetParameterString("in", refl)
            gapFill.SetParameterString("mask", mask)
            gapFill.SetParameterString("comp", str(comp))
            gapFill.SetParameterString("it", "linear")
            gapFill.SetParameterString("id", realDates)
            gapFill.SetParameterString("od", datesInterp)
            # gapFill.SetParameterString("ram","1024")
            gapFill.Execute()
            concatSensors.AddImageToParameterInputImageList(
                "il", gapFill.GetParameterOutputImage("out"))
            features.append(gapFill)

        sampleExtr = otb.Registry.CreateApplication("SampleExtraction")
        sampleExtr.SetParameterString("ram", "128")
        sampleExtr.SetParameterString("vec", SampleSel_NA)
        sampleExtr.SetParameterString("field", dataField)
        sampleExtr.SetParameterString("out", SampleExtr_NA)
        # if len(AllRefl) > 1:
        #    concatSensors.Execute()
        #    sampleExtr.SetParameterInputImage("in",concatSensors.GetParameterOutputImage("out"))
        # else:
        #    sampleExtr.SetParameterInputImage("in",features[0].GetParameterOutputImage("out"))
        # sampleExtr.ExecuteAndWriteOutput()
        if len(AllRefl) > 1:
            concatSensors.Execute()
            allFeatures = concatSensors.GetParameterOutputImage("out")
        else:
            allFeatures = features[0].GetParameterOutputImage("out")

        if userFeatPath:
            print "Add user features"
            userFeat_arbo = Config(file(pathConf)).userFeat.arbo
            userFeat_pattern = (Config(
                file(pathConf)).userFeat.patterns).split(",")
            concatFeatures = otb.Registry.CreateApplication(
                "ConcatenateImages")
            userFeatures = fu.getUserFeatInTile(userFeatPath, currentTile,
                                                userFeat_arbo,
                                                userFeat_pattern)
            concatFeatures.SetParameterStringList("il", userFeatures)
            concatFeatures.Execute()

            concatAllFeatures = otb.Registry.CreateApplication(
                "ConcatenateImages")
            concatAllFeatures.AddImageToParameterInputImageList(
                "il", allFeatures)
            concatAllFeatures.AddImageToParameterInputImageList(
                "il", concatFeatures.GetParameterOutputImage("out"))
            concatAllFeatures.Execute()

            allFeatures = concatAllFeatures.GetParameterOutputImage("out")

        sampleExtr.SetParameterInputImage("in", allFeatures)
        sampleExtr.ExecuteAndWriteOutput()

        # Step 8 : Sample extraction Annual
        concatSensors = otb.Registry.CreateApplication("ConcatenateImages")
        AllRefl = sorted(
            fu.FileSearch_AND(prevFeatures + "/" + currentTile + "/tmp/", True,
                              "REFL.tif"))
        AllMask = sorted(
            fu.FileSearch_AND(prevFeatures + "/" + currentTile + "/tmp/", True,
                              "MASK.tif"))
        datesInterp = sorted(
            fu.FileSearch_AND(prevFeatures + "/" + currentTile + "/tmp/", True,
                              "DatesInterp"))
        realDates = sorted(
            fu.FileSearch_AND(prevFeatures + "/" + currentTile + "/tmp/", True,
                              "imagesDate"))
        features = []
        for refl, mask, datesInterp, realDates in zip(AllRefl, AllMask,
                                                      datesInterp, realDates):
            gapFill = otb.Registry.CreateApplication(
                "ImageTimeSeriesGapFilling")
            nbDate = fu.getNbDateInTile(realDates)
            nbReflBands = fu.getRasterNbands(refl)
            comp = int(nbReflBands) / int(nbDate)
            if not isinstance(comp, int):
                raise Exception("unvalid component by date (not integer) : " +
                                comp)
            gapFill.SetParameterString("in", refl)
            gapFill.SetParameterString("mask", mask)
            gapFill.SetParameterString("comp", str(comp))
            gapFill.SetParameterString("it", "linear")
            gapFill.SetParameterString("id", realDates)
            gapFill.SetParameterString("od", datesInterp)
            # gapFill.SetParameterString("ram","1024")
            gapFill.Execute()
            concatSensors.AddImageToParameterInputImageList(
                "il", gapFill.GetParameterOutputImage("out"))
            features.append(gapFill)

        sampleExtr = otb.Registry.CreateApplication("SampleExtraction")
        sampleExtr.SetParameterString("ram", "128")
        sampleExtr.SetParameterString("vec", SampleSel_A)
        sampleExtr.SetParameterString("field", dataField)
        sampleExtr.SetParameterString("out", SampleExtr_A)

        if len(AllRefl) > 1:
            concatSensors.Execute()
            allFeatures = concatSensors.GetParameterOutputImage("out")
        else:
            allFeatures = features[0].GetParameterOutputImage("out")

        if userFeatPath:
            print "Add user features"
            userFeat_arbo = Config(file(pathConf)).userFeat.arbo
            userFeat_pattern = (Config(
                file(pathConf)).userFeat.patterns).split(",")
            concatFeatures = otb.Registry.CreateApplication(
                "ConcatenateImages")
            userFeatures = fu.getUserFeatInTile(userFeatPath, currentTile,
                                                userFeat_arbo,
                                                userFeat_pattern)
            concatFeatures.SetParameterStringList("il", userFeatures)
            concatFeatures.Execute()

            concatAllFeatures = otb.Registry.CreateApplication(
                "ConcatenateImages")
            concatAllFeatures.AddImageToParameterInputImageList(
                "il", allFeatures)
            concatAllFeatures.AddImageToParameterInputImageList(
                "il", concatFeatures.GetParameterOutputImage("out"))
            concatAllFeatures.Execute()

            allFeatures = concatAllFeatures.GetParameterOutputImage("out")

        sampleExtr.SetParameterInputImage("in", allFeatures)
        if annualCropFind: sampleExtr.ExecuteAndWriteOutput()

    # Step 9 : Merge
    MergeName = trainShape.split("/")[-1].replace(".shp", "_Samples")
    listToMerge = [SampleExtr_NA]
    if annualCropFind:
        # listToMerge = [SampleExtr_A,SampleExtr_NA]
        listToMerge = [SampleExtr_NA, SampleExtr_A]
    fu.mergeSQLite(MergeName, workingDirectory, listToMerge)
    samples = workingDirectory + "/" + trainShape.split("/")[-1].replace(
        ".shp", "_Samples.sqlite")

    os.remove(stats_NA)
    os.remove(SampleSel_NA)
    os.remove(SampleExtr_NA)
    fu.removeShape(nonAnnualShape.replace(".shp", ""),
                   [".prj", ".shp", ".dbf", ".shx"])

    if annualCropFind:
        os.remove(stats_A)
        os.remove(SampleSel_A)
        os.remove(SampleExtr_A)
        fu.removeShape(annualShape.replace(".shp", ""),
                       [".prj", ".shp", ".dbf", ".shx"])

    if pathWd:
        shutil.copy(
            samples, folderSample + "/" +
            trainShape.split("/")[-1].replace(".shp", "_Samples.sqlite"))
Пример #3
0
def generateSamples_simple(folderSample, workingDirectory, trainShape, pathWd,
                           featuresPath, samplesOptions, pathConf, dataField):
    bindingPython = Config(file(pathConf)).GlobChain.bindingPython
    dataField = Config(file(pathConf)).chain.dataField
    outputPath = Config(file(pathConf)).chain.outputPath
    userFeatPath = Config(file(pathConf)).chain.userFeatPath
    if userFeatPath == "None": userFeatPath = None

    tmpFolder = outputPath + "/TMPFOLDER"
    if not os.path.exists(tmpFolder): os.mkdir(tmpFolder)
    # Sensors
    S2 = Sensors.Sentinel_2("", Opath(tmpFolder), pathConf, "")
    L8 = Sensors.Landsat8("", Opath(tmpFolder), pathConf, "")
    L5 = Sensors.Landsat5("", Opath(tmpFolder), pathConf, "")
    # shutil.rmtree(tmpFolder, ignore_errors=True)
    SensorsList = [S2, L8, L5]
    stats = workingDirectory + "/" + trainShape.split("/")[-1].replace(
        ".shp", "_stats.xml")
    tile = trainShape.split("/")[-1].split("_")[0]
    stack = fu.getFeatStackName(pathConf)
    feat = featuresPath + "/" + tile + "/Final/" + stack
    if bindingPython == "True":
        feat = fu.FileSearch_AND(featuresPath + "/" + tile + "/tmp/", True,
                                 "ST_MASK")[0]

    os.environ["ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS"] = "1"
    cmd = "otbcli_PolygonClassStatistics -in " + feat + " -vec " + trainShape + " -out " + stats + " -field " + dataField
    print cmd
    os.system(cmd)
    verifPolyStats(stats)
    sampleSelection = workingDirectory + "/" + trainShape.split(
        "/")[-1].replace(".shp", "_SampleSel.sqlite")
    cmd = "otbcli_SampleSelection -out " + sampleSelection + " " + samplesOptions + " -field " + dataField + " -in " + feat + " -vec " + trainShape + " -instats " + stats
    print cmd
    os.system(cmd)

    # if pathWd:shutil.copy(sampleSelection,folderSample)

    os.environ["ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS"] = "5"

    samples = workingDirectory + "/" + trainShape.split("/")[-1].replace(
        ".shp", "_Samples.sqlite")

    if bindingPython == "True":
        sampleExtr = otb.Registry.CreateApplication("SampleExtraction")
        sampleExtr.SetParameterString("vec", sampleSelection)
        sampleExtr.SetParameterString("field", dataField)
        sampleExtr.SetParameterString("out", samples)

        AllRefl = sorted(
            fu.FileSearch_AND(featuresPath + "/" + tile + "/tmp/", True,
                              "REFL.tif"))
        AllMask = sorted(
            fu.FileSearch_AND(featuresPath + "/" + tile + "/tmp/", True,
                              "MASK.tif"))
        datesInterp = sorted(
            fu.FileSearch_AND(featuresPath + "/" + tile + "/tmp/", True,
                              "DatesInterp"))
        realDates = sorted(
            fu.FileSearch_AND(featuresPath + "/" + tile + "/tmp/", True,
                              "imagesDate"))

        print AllRefl
        print AllMask
        print datesInterp
        print realDates
        # gapFill + feat
        features = []
        concatSensors = otb.Registry.CreateApplication("ConcatenateImages")
        for refl, mask, datesInterp, realDates in zip(AllRefl, AllMask,
                                                      datesInterp, realDates):
            gapFill = otb.Registry.CreateApplication(
                "ImageTimeSeriesGapFilling")
            nbDate = fu.getNbDateInTile(realDates)
            nbReflBands = fu.getRasterNbands(refl)
            comp = int(nbReflBands) / int(nbDate)
            print datesInterp
            if not isinstance(comp, int):
                raise Exception("unvalid component by date (not integer) : " +
                                comp)
            gapFill.SetParameterString("in", refl)
            gapFill.SetParameterString("mask", mask)
            gapFill.SetParameterString("comp", str(comp))
            gapFill.SetParameterString("it", "linear")
            gapFill.SetParameterString("id", realDates)
            gapFill.SetParameterString("od", datesInterp)
            gapFill.Execute()

            # gapFill.SetParameterString("out","/ptmp/vincenta/tmp/TestGapFill.tif")
            # gapFill.ExecuteAndWriteOutput()
            # pause = raw_input("Pause1")

            # featExtr = otb.Registry.CreateApplication("iota2FeatureExtraction")
            # featExtr.SetParameterInputImage("in",gapFill.GetParameterOutputImage("out"))
            # featExtr.SetParameterString("comp",str(comp))
            # for currentSensor in SensorsList:
            #    if currentSensor.name in refl:
            #		red = str(currentSensor.bands["BANDS"]["red"])
            #		nir = str(currentSensor.bands["BANDS"]["NIR"])
            #		swir = str(currentSensor.bands["BANDS"]["SWIR"])
            # featExtr.SetParameterString("red",red)
            # featExtr.SetParameterString("nir",nir)
            # featExtr.SetParameterString("swir",swir)
            # featExtr.SetParameterString("ram","256")
            # featExtr.Execute()
            # features.append(featExtr)
            concatSensors.AddImageToParameterInputImageList(
                "il", gapFill.GetParameterOutputImage("out"))
            features.append(gapFill)

            # sensors Concatenation + sampleExtraction
        sampleExtr = otb.Registry.CreateApplication("SampleExtraction")
        sampleExtr.SetParameterString("ram", "1024")
        sampleExtr.SetParameterString("vec", sampleSelection)
        sampleExtr.SetParameterString("field", dataField)
        sampleExtr.SetParameterString("out", samples)

        if len(AllRefl) > 1:
            concatSensors.Execute()
            allFeatures = concatSensors.GetParameterOutputImage("out")
        else:
            allFeatures = features[0].GetParameterOutputImage("out")

        if userFeatPath:
            print "Add user features"
            userFeat_arbo = Config(file(pathConf)).userFeat.arbo
            userFeat_pattern = (Config(
                file(pathConf)).userFeat.patterns).split(",")
            concatFeatures = otb.Registry.CreateApplication(
                "ConcatenateImages")
            userFeatures = fu.getUserFeatInTile(userFeatPath, tile,
                                                userFeat_arbo,
                                                userFeat_pattern)
            concatFeatures.SetParameterStringList("il", userFeatures)
            concatFeatures.Execute()

            concatAllFeatures = otb.Registry.CreateApplication(
                "ConcatenateImages")
            concatAllFeatures.AddImageToParameterInputImageList(
                "il", allFeatures)
            concatAllFeatures.AddImageToParameterInputImageList(
                "il", concatFeatures.GetParameterOutputImage("out"))
            concatAllFeatures.Execute()

            allFeatures = concatAllFeatures.GetParameterOutputImage("out")

        sampleExtr.SetParameterInputImage("in", allFeatures)
        sampleExtr.ExecuteAndWriteOutput()

    # cmd = "otbcli_SampleExtraction -field "+dataField+" -out "+samples+" -vec "+sampleSelection+" -in /ptmp/vincenta/tmp/TestGapFill.tif"
    # print cmd
    # pause = raw_input("Pause")
    # os.system(cmd)
    else:
        cmd = "otbcli_SampleExtraction -field " + dataField + " -out " + samples + " -vec " + sampleSelection + " -in " + feat
        print cmd
        os.system(cmd)
    if pathWd:
        shutil.copy(
            samples, folderSample + "/" +
            trainShape.split("/")[-1].replace(".shp", "_Samples.sqlite"))
    os.remove(sampleSelection)
    os.remove(stats)
Пример #4
0
    list_Sensor.append(Sentinel2)

imRef = list_Sensor[0].imRef
sensorRef = list_Sensor[0].name

StackName = fu.getFeatStackName(args.config)
Stack = args.opath + "/Final/" + StackName

allTiles = (Config(file(args.config)).chain.listTile).split()
userFeatPath = Config(file(args.config)).chain.userFeatPath
if userFeatPath == "None": userFeatPath = None
if userFeatPath:
    userFeat_arbo = Config(file(args.config)).userFeat.arbo
    userFeat_pattern = (Config(file(args.config)).userFeat.patterns).split(",")
    tile = fu.findCurrentTileInString(Stack, allTiles)
    allUserFeatures = " ".join(fu.getUserFeatInTile(userFeatPath, tile, userFeat_arbo, userFeat_pattern))
if not os.path.exists(Stack):
    # Step 1 Creation des masques de bords
    Step = 1
    if log.dico[Step]:
        for sensor in list_Sensor:
            liste = sensor.getImages(opath)  # Inutile appelle dans CreateBorderMask et dans le constructeur
            sensor.CreateBorderMask(opath, imRef, nbLook)
    Step = log.update(Step)

    # Step 2 :Creation de l'emprise commune
    # print "Avant masque commum", Step, log.dico[Step]
    if log.dico[Step]:
        DP.CreateCommonZone(opath.opathT, list_Sensor)
    Step = log.update(Step)
    # print 'Masque empr',Step
Пример #5
0
    Sentinel2.setDatesVoulues(datesVoulues)

    list_Sensor.append(Sentinel2)

imRef = list_Sensor[0].imRef
sensorRef = list_Sensor[0].name

StackName = fu.getFeatStackName(args.config)
Stack = args.wOut + "/Final/" + StackName

if userFeatPath:
    userFeat_arbo = Config(file(args.config)).userFeat.arbo
    userFeat_pattern = (Config(file(args.config)).userFeat.patterns).split(",")
    tile = fu.findCurrentTileInString(Stack, allTiles)
    allUserFeatures = " ".join(
        fu.getUserFeatInTile(userFeatPath, tile, userFeat_arbo,
                             userFeat_pattern))
if not os.path.exists(Stack):

    # Step 1 Creation des masques de bords
    Step = 1
    if log.dico[Step]:
        for sensor in list_Sensor:
            liste = sensor.getImages(
                opath
            )  # Inutile appelle dans CreateBorderMask et dans le constructeur
            sensor.CreateBorderMask(opath, imRef, nbLook)
        DP.CreateCommonZone(opath.opathT, list_Sensor)

        for sensor in list_Sensor:
            if not sensor.work_res == sensor.native_res:
                print "Change sensor's datas resolution"
Пример #6
0
def launchClassification(tempFolderSerie, Classifmask, model, stats,
                         outputClassif, confmap, pathWd, pathConf, pixType):
    outputClassif = outputClassif.replace(".tif", "_TMP.tif")
    confmap = confmap.replace(".tif", "_TMP.tif")
    os.environ["ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS"] = "5"
    featuresPath = Config(file(pathConf)).chain.featuresPath
    outputPath = Config(file(pathConf)).chain.outputPath
    tile = outputClassif.split("/")[-1].split("_")[1]
    userFeatPath = Config(file(pathConf)).chain.userFeatPath
    if userFeatPath == "None": userFeatPath = None
    AllRefl = sorted(
        fu.FileSearch_AND(featuresPath + "/" + tile + "/tmp/", True,
                          "REFL.tif"))
    AllMask = sorted(
        fu.FileSearch_AND(featuresPath + "/" + tile + "/tmp/", True,
                          "MASK.tif"))
    datesInterp = sorted(
        fu.FileSearch_AND(featuresPath + "/" + tile + "/tmp/", True,
                          "DatesInterp"))
    realDates = sorted(
        fu.FileSearch_AND(featuresPath + "/" + tile + "/tmp/", True,
                          "imagesDate"))

    tmpFolder = outputPath + "/TMPFOLDER_" + tile
    if not os.path.exists(tmpFolder):
        os.mkdir(tmpFolder)
        # Sensors
    S2 = Sensors.Sentinel_2("", Opath(tmpFolder), pathConf, "")
    L8 = Sensors.Landsat8("", Opath(tmpFolder), pathConf, "")
    L5 = Sensors.Landsat5("", Opath(tmpFolder), pathConf, "")
    # shutil.rmtree(tmpFolder, ignore_errors=True)

    SensorsList = [S2, L8, L5]
    # gapFill + feat
    features = []
    concatSensors = otb.Registry.CreateApplication("ConcatenateImages")
    for refl, mask, datesInterp, realDates in zip(AllRefl, AllMask,
                                                  datesInterp, realDates):
        gapFill = otb.Registry.CreateApplication("ImageTimeSeriesGapFilling")
        nbDate = fu.getNbDateInTile(realDates)
        nbReflBands = fu.getRasterNbands(refl)
        comp = int(nbReflBands) / int(nbDate)
        if not isinstance(comp, int):
            raise Exception("unvalid component by date (not integer) : " +
                            comp)
        gapFill.SetParameterString("in", refl)
        gapFill.SetParameterString("mask", mask)
        gapFill.SetParameterString("comp", str(comp))
        gapFill.SetParameterString("it", "linear")
        gapFill.SetParameterString("id", realDates)
        gapFill.SetParameterString("od", datesInterp)
        # gapFill.SetParameterString("ram","1024")
        gapFill.Execute()

        # featExtr = otb.Registry.CreateApplication("iota2FeatureExtraction")
        # featExtr.SetParameterInputImage("in",gapFill.GetParameterOutputImage("out"))
        # featExtr.SetParameterString("comp",str(comp))
        # for currentSensor in SensorsList:
        #    if currentSensor.name in refl:
        #	    red = str(currentSensor.bands["BANDS"]["red"])
        #	    nir = str(currentSensor.bands["BANDS"]["NIR"])
        #	    swir = str(currentSensor.bands["BANDS"]["SWIR"])
        # featExtr.SetParameterString("red",red)
        # featExtr.SetParameterString("nir",nir)
        # featExtr.SetParameterString("swir",swir)
        # featExtr.Execute()

        # features.append(featExtr)
        concatSensors.AddImageToParameterInputImageList(
            "il", gapFill.GetParameterOutputImage("out"))
        features.append(gapFill)

    classifier = otb.Registry.CreateApplication("ImageClassifier")
    classifier.SetParameterString("mask", Classifmask)
    if stats: classifier.SetParameterString("imstat", stats)
    classifier.SetParameterString("out", outputClassif)
    classifier.SetParameterString("model", model)
    classifier.SetParameterString("confmap", confmap)
    classifier.SetParameterString("ram", "512")
    print "AllRefl"
    print AllRefl
    # if len(AllRefl) >1:
    #	concatSensors.Execute()
    #	classifier.SetParameterInputImage("in",concatSensors.GetParameterOutputImage("out"))
    # else:
    #	classifier.SetParameterInputImage("in",features[0].GetParameterOutputImage("out"))
    # classifier.ExecuteAndWriteOutput()
    if len(AllRefl) > 1:
        concatSensors.Execute()
        allFeatures = concatSensors.GetParameterOutputImage("out")
    else:
        allFeatures = features[0].GetParameterOutputImage("out")

    if userFeatPath:
        print "Add user features"
        userFeat_arbo = Config(file(pathConf)).userFeat.arbo
        userFeat_pattern = (Config(
            file(pathConf)).userFeat.patterns).split(",")
        concatFeatures = otb.Registry.CreateApplication("ConcatenateImages")
        userFeatures = fu.getUserFeatInTile(userFeatPath, tile, userFeat_arbo,
                                            userFeat_pattern)
        concatFeatures.SetParameterStringList("il", userFeatures)
        concatFeatures.Execute()

        concatAllFeatures = otb.Registry.CreateApplication("ConcatenateImages")
        concatAllFeatures.AddImageToParameterInputImageList("il", allFeatures)
        concatAllFeatures.AddImageToParameterInputImageList(
            "il", concatFeatures.GetParameterOutputImage("out"))
        concatAllFeatures.Execute()

        allFeatures = concatAllFeatures.GetParameterOutputImage("out")

    classifier.SetParameterInputImage("in", allFeatures)
    classifier.ExecuteAndWriteOutput()

    expr = "im2b1>=1?im1b1:0"
    cmd = 'otbcli_BandMath -il ' + outputClassif + ' ' + Classifmask + ' -out ' + outputClassif.replace(
        "_TMP.tif", ".tif") + ' -exp "' + expr + '"'
    print cmd
    os.system(cmd)

    cmd = 'otbcli_BandMath -il ' + confmap + ' ' + Classifmask + ' -out ' + confmap.replace(
        "_TMP.tif", ".tif") + ' -exp "' + expr + '"'
    print cmd
    os.system(cmd)

    if pathWd:
        shutil.copy(outputClassif.replace("_TMP.tif", ".tif"),
                    outputPath + "/classif")
    if pathWd:
        shutil.copy(confmap.replace("_TMP.tif", ".tif"),
                    outputPath + "/classif")
    os.remove(outputClassif)
    os.remove(confmap)