Exemplo n.º 1
0
def recompose_image(layer, working_directory):
    bands = layer.bands
    image_in = layer.get_source()
    num_band_pir = bands['pir']
    num_band_red = bands['red']
    num_band_green = bands['green']
    band_pir = gdal_translate_get_one_band(image_in, num_band_pir,
                                           working_directory)
    band_red = gdal_translate_get_one_band(image_in, num_band_red,
                                           working_directory)
    band_green = gdal_translate_get_one_band(image_in, num_band_green,
                                             working_directory)

    logger.debug("pir" + band_pir)
    logger.debug("red" + band_red)
    logger.debug("green" + band_green)

    output_filename = os.path.join(
        working_directory,
        os.path.splitext(os.path.basename(image_in))[0] + "pir_red_green" +
        os.path.splitext(os.path.basename(image_in))[1])
    logger.debug("recomposed image" + output_filename)
    if not os.path.isfile(output_filename):
        OTBApplications.concatenateImages_cli([band_pir, band_red, band_green],
                                              output_filename, "uint16")
    return output_filename
Exemplo n.º 2
0
 def run(self):
     logger.debug("run, processing name" + str(self.processing_name))
     logger.debug("self.arg" + str(self.arg))
     output_filename = ""
     if "NDVI" in self.processing_name:
         output_filename = terre_image_processing.ndvi(self.layer, self.working_directory, self.iface)
     if "NDTI" in self.processing_name:
         output_filename = terre_image_processing.ndti(self.layer, self.working_directory, self.iface)
     if "Indice de brillance" in self.processing_name:
         output_filename = terre_image_processing.brightness(self.layer, self.working_directory, self.iface)
     if "Angle Spectral" in self.processing_name:
         self.rubberband = QgsRubberBand(self.canvas, QGis.Point)
         self.rubberband.setWidth(10)
         self.rubberband.setColor(QColor(Qt.yellow))
         if not self.arg:
             from spectral_angle import SpectralAngle
             self.angle_tool = SpectralAngle(self.iface, self.working_directory, self.layer, self.mirrormap_tool, self.rubberband)
             logger.debug("self.angle_tool" + str(self.angle_tool))
             QObject.connect(self.angle_tool, SIGNAL("anglesComputed(PyQt_PyObject)"), self.display)
             self.angle_tool.get_point_for_angles(self.layer)
             # spectral_angles(self.layer, self.working_directory, self.iface)
         else:
             output_filename = self.arg
     if "KMEANS" in self.processing_name:
         if self.arg:
             output_filename = terre_image_processing.kmeans(self.layer, self.working_directory, self.iface, self.arg)
         else:
             output_filename = terre_image_processing.kmeans(self.layer, self.working_directory, self.iface)
     if "Seuillage" in self.processing_name and self.arg:
         logger.debug("this is thrshold")
         output_filename = terre_image_processing.threshold(self.layer, self.working_directory, self.arg)
     if output_filename:
         OTBApplications.compute_overviews(output_filename)
         logger.debug(output_filename)
         self.display(output_filename)
Exemplo n.º 3
0
def contrastForRasters(the_raster_layer, min_layer, max_layer, band = None):
    """
    Applies a contrast between min and max. If given min and max are 0, then calculates the min and max from gdal.
    """
    # type of layer : raster, vector, other
    type_of_layer = the_raster_layer.type()

    # take the layer renderer to get the min and max
    layer_renderer = the_raster_layer.renderer()  # for qgis > 1.9
    data_provider = the_raster_layer.data_provider()

    # the layer has to be a raster layer
    if type_of_layer == 1:
        if the_raster_layer.rasterType() == 0 and layer_renderer:
            # gray band
            # layer_renderer <qgis.core.QgsSingleBandGrayRenderer object at 0x514caf0>
            layerCE = layer_renderer.contrastEnhancement()
            # take the contrast enhancement of the layer threw the renderer
            if layerCE:
                layerCE.setContrastEnhancementAlgorithm(3)  # qgis 1.9
                layerCE.setMinimumValue(min_layer)
                layerCE.setMaximumValue(max_layer)
        elif the_raster_layer.rasterType() == 2 and layer_renderer:
            if min_layer == 0 and max_layer == 0:
                if band:
                    min1, max1 = get_min_max_via_qgis(the_raster_layer, band[0])
                    min2, max2 = get_min_max_via_qgis(the_raster_layer, band[1])
                    min3, max3 = get_min_max_via_qgis(the_raster_layer, band[2])

# #                     min1, max1, _, _ = terre_image_utils.computeStatistics(the_raster_layer.source(),0, band[0])
# #                     min2, max2, _, _ = terre_image_utils.computeStatistics(the_raster_layer.source(),0, band[1])
# #                     min3, max3, _, _ = terre_image_utils.computeStatistics(the_raster_layer.source(),0, band[2])
# #                     #print min1, max1, min2, max2, min3, max3
                else:
                    min1, max1, _, _ = OTBApplications.computeStatistics(the_raster_layer.source(), 0, 1)
                    min2, max2, _, _ = OTBApplications.computeStatistics(the_raster_layer.source(), 0, 2)
                    min3, max3, _, _ = OTBApplications.computeStatistics(the_raster_layer.source(), 0, 3)

                red_enhancement = QgsContrastEnhancement(data_provider.dataType(0))
                green_enhancement = QgsContrastEnhancement(data_provider.dataType(1))
                blue_enhancement = QgsContrastEnhancement(data_provider.dataType(2))
                # set stretch to min max
                red_enhancement.setMinimumValue(min1)
                red_enhancement.setMaximumValue(max1)
                green_enhancement.setMinimumValue(min2)
                green_enhancement.setMaximumValue(max2)
                blue_enhancement.setMinimumValue(min3)
                blue_enhancement.setMaximumValue(max3)
                red_enhancement.setContrastEnhancementAlgorithm(3)
                green_enhancement.setContrastEnhancementAlgorithm(3)
                blue_enhancement.setContrastEnhancementAlgorithm(3)
                layer_renderer.setRedContrastEnhancement(red_enhancement)  # , QgsRaster.ContrastEnhancementCumulativeCut  )
                layer_renderer.setGreenContrastEnhancement(green_enhancement)  # , QgsRaster.ContrastEnhancementCumulativeCut  )
                layer_renderer.setBlueContrastEnhancement(blue_enhancement)  # , QgsRaster.ContrastEnhancementCumulativeCut  )
        the_raster_layer.triggerRepaint()
Exemplo n.º 4
0
def angles(layer, working_directory, x, y):
    ident = layer.get_qgis_layer().dataProvider().identify(
        QgsPoint(x, y), QgsRaster.IdentifyFormatValue)
    logger.debug(ident)
    if ident is not None:
        attr = ident.results()
        logger.debug(attr)
        if len(attr) == layer.get_qgis_layer().bandCount():
            image_in = layer.get_qgis_layer().source()
            output_filename = os.path.join(
                working_directory,
                os.path.basename(os.path.splitext(image_in)[0]) + "_angles" +
                str(x).replace(".", "dot") + "_" + str(y).replace(".", "dot") +
                os.path.splitext(image_in)[1])

            if not os.path.isfile(output_filename):
                num = []
                denom = []
                fact = []
                # acos((im1b1*1269+im1b2*1060+im1b3*974+im1b4*1576)/
                # (sqrt((1269*1269+1060*1060+974*974+1576*1576)*
                # (im1b1*im1b1+im1b2*im1b2+im1b3*im1b3+im1b4*im1b4))))
                for index in range(1, layer.get_qgis_layer().bandCount() + 1):
                    current_band = "im1b{}".format(index)
                    band_value = attr[index]
                    num.append(current_band + "*" + str(band_value))
                    denom.append(str(band_value) + "*" + str(band_value))
                    fact.append(current_band + "*" + current_band)

                #compute denom for testing != 0
                mult_denom = "({})*({})".format("+".join(denom),
                                                "+".join(fact))
                #raw formula
                formula = "acos(({})/(sqrt({})))".format(
                    "+".join(num), mult_denom)
                #add threshold
                formule_ = '"({}>0.0001?1/{}:0)"'.format(formula, formula)
                #add test on denom
                formula_with_test_denom_diff_0 = "({}!=0?{}:0)".format(
                    mult_denom, formule_)

                logger.debug("num {}".format(num))
                logger.debug("denom {}".format(denom))
                logger.debug("fact {}".format(fact))
                logger.debug(
                    "formula {}".format(formula_with_test_denom_diff_0))

                OTBApplications.bandmath_cli([image_in],
                                             formula_with_test_denom_diff_0,
                                             output_filename)
                # rlayer = manage_QGIS.addRasterLayerToQGIS( output_filename, os.path.basename(os.path.splitext(image_in)[0]) + "_angles" + str(x) + "_" + str(y), iface )
                # manage_QGIS.histogram_stretching( rlayer, iface.mapCanvas())
            return output_filename
Exemplo n.º 5
0
def angles(layer, working_directory, x, y):
    ident = layer.get_qgis_layer().dataProvider().identify(
        QgsPoint(x, y), QgsRaster.IdentifyFormatValue)
    logger.debug(ident)
    if ident is not None:
        attr = ident.results()
        logger.debug(attr)
        if len(attr) == layer.get_qgis_layer().bandCount():
            image_in = layer.get_qgis_layer().source()
            output_filename = os.path.join(
                working_directory,
                os.path.basename(os.path.splitext(image_in)[0]) + "_angles" +
                str(x).replace(".", "dot") + "_" + str(y).replace(".", "dot") +
                os.path.splitext(image_in)[1])

            if not os.path.isfile(output_filename):
                num = []
                denom = []
                fact = []
                # acos((im1b1*1269+im1b2*1060+im1b3*974+im1b4*1576)/
                # (sqrt((1269*1269+1060*1060+974*974+1576*1576)*
                # (im1b1*im1b1+im1b2*im1b2+im1b3*im1b3+im1b4*im1b4))))
                for index in range(1, layer.get_qgis_layer().bandCount() + 1):
                    current_band = "im1b" + str(index)
                    band_value = attr[index]
                    num.append(current_band + "*" + str(band_value))
                    denom.append(str(band_value) + "*" + str(band_value))
                    fact.append(current_band + "*" + current_band)

                formula = "if(((" + "+".join(fact) + ") != 0),"

                formula += "acos("
                formula += "(" + "+".join(num) + ")/"
                formula += "(sqrt("
                formula += "(" + "+".join(denom) + ")*"
                formula += "(" + "+".join(fact) + ")"
                formula += "))"
                formula += "), 0)"

                formule_ = "\"if( " + formula + ">0.0001, 1/" + formula + ", 0)\""

                logger.debug("num" + str(num))
                logger.debug("denom" + str(denom))
                logger.debug("fact" + str(fact))
                logger.debug("formula" + str(formula))

                OTBApplications.bandmath_cli([image_in], formule_,
                                             output_filename)
                # rlayer = manage_QGIS.addRasterLayerToQGIS( output_filename, os.path.basename(os.path.splitext(image_in)[0]) + "_angles" + str(x) + "_" + str(y), iface )
                # manage_QGIS.histogram_stretching( rlayer, iface.mapCanvas())
            return output_filename
Exemplo n.º 6
0
def export_kmz(filenames, working_directory):
    """
    """
    internal_working_directory = os.path.join(working_directory, "Internal")
    if not os.path.exists(internal_working_directory):
        os.makedirs(internal_working_directory)

    kmzs = []
    for image in filenames:
        size = get_image_size_with_gdal(image)
        warning_size = 0
        # by default, tile size of kmz export is 512
        # if the image size is smaller than 512, the application does not work properly
        if size[0] < 512 or size[1] < 512:
            warning_size = size[0] if (size[0] < size[1]) else size[1]
        kmz_tmp = OTBApplications.otbcli_export_kmz(
            image, internal_working_directory, warning_size)
        kmzs.append(kmz_tmp)

    # attention rustine
    # kmzs = glob.glob( os.path.join(internal_working_directory, "*.kmz"))
    kmz_to_return = []
    for kmz in kmzs:
        new_path = os.path.join(working_directory, os.path.basename(kmz))
        shutil.copy(kmz, new_path)
        kmz_to_return.append(new_path)

    return kmz_to_return
Exemplo n.º 7
0
def export_kmz(filenames, working_directory):
    """
    """
    internal_working_directory = os.path.join(working_directory, "Internal")
    if not os.path.exists(internal_working_directory):
        os.makedirs(internal_working_directory)

    kmzs = []
    for image in filenames:
        size = get_image_size_with_gdal(image)
        warning_size = 0
        # by default, tile size of kmz export is 512
        # if the image size is smaller than 512, the application does not work properly
        if size[0] < 512 or size[1] < 512:
            warning_size = size[0] if (size[0]<size[1]) else size[1]
        kmz_tmp = OTBApplications.otbcli_export_kmz(image, internal_working_directory, warning_size)
        kmzs.append(kmz_tmp)

    # attention rustine
    # kmzs = glob.glob( os.path.join(internal_working_directory, "*.kmz"))
    kmz_to_return = []
    for kmz in kmzs:
        new_path = os.path.join(working_directory, os.path.basename(kmz))
        shutil.copy(kmz, new_path)
        kmz_to_return.append(new_path)

    return kmz_to_return
Exemplo n.º 8
0
 def run(self):
     logger.debug("run, processing name" + str(self.processing_name))
     logger.debug("self.arg" + str(self.arg))
     output_filename = ""
     if "NDVI" in self.processing_name:
         output_filename = terre_image_processing.ndvi(
             self.layer, self.working_directory, self.iface)
     if "NDTI" in self.processing_name:
         output_filename = terre_image_processing.ndti(
             self.layer, self.working_directory, self.iface)
     if "Indice de brillance" in self.processing_name:
         output_filename = terre_image_processing.brightness(
             self.layer, self.working_directory, self.iface)
     if "Angle Spectral" in self.processing_name:
         self.rubberband = QgsRubberBand(self.canvas, QGis.Point)
         self.rubberband.setWidth(10)
         self.rubberband.setColor(QColor(Qt.yellow))
         if not self.arg:
             from spectral_angle import SpectralAngle
             self.angle_tool = SpectralAngle(self.iface,
                                             self.working_directory,
                                             self.layer,
                                             self.mirrormap_tool,
                                             self.rubberband)
             logger.debug("self.angle_tool" + str(self.angle_tool))
             QObject.connect(self.angle_tool,
                             SIGNAL("anglesComputed(PyQt_PyObject)"),
                             self.display)
             self.angle_tool.get_point_for_angles(self.layer)
             # spectral_angles(self.layer, self.working_directory, self.iface)
         else:
             output_filename = self.arg
     if "KMEANS" in self.processing_name:
         if self.arg:
             output_filename = terre_image_processing.kmeans(
                 self.layer, self.working_directory, self.iface, self.arg)
         else:
             output_filename = terre_image_processing.kmeans(
                 self.layer, self.working_directory, self.iface)
     if "Seuillage" in self.processing_name and self.arg:
         logger.debug("this is thrshold")
         output_filename = terre_image_processing.threshold(
             self.layer, self.working_directory, self.arg)
     if output_filename:
         OTBApplications.compute_overviews(output_filename)
         logger.debug(output_filename)
         self.display(output_filename)
Exemplo n.º 9
0
def angles(layer, working_directory, x, y):
    ident = layer.get_qgis_layer().dataProvider().identify(QgsPoint(x, y), QgsRaster.IdentifyFormatValue)
    logger.debug(ident)
    if ident is not None:
        attr = ident.results()
        logger.debug(attr)
        if len(attr) == layer.get_qgis_layer().bandCount():
            image_in = layer.get_qgis_layer().source()
            output_filename = os.path.join(working_directory, os.path.basename(os.path.splitext(image_in)[0]) + "_angles" + str(x).replace(".", "dot") + "_" + str(y).replace(".", "dot") + os.path.splitext(image_in)[1])

            if not os.path.isfile(output_filename):
                num = []
                denom = []
                fact = []
                # acos((im1b1*1269+im1b2*1060+im1b3*974+im1b4*1576)/
                # (sqrt((1269*1269+1060*1060+974*974+1576*1576)*
                # (im1b1*im1b1+im1b2*im1b2+im1b3*im1b3+im1b4*im1b4))))
                for index in range(1, layer.get_qgis_layer().bandCount() + 1):
                    current_band = "im1b" + str(index)
                    band_value = attr[index]
                    num.append(current_band + "*" + str(band_value))
                    denom.append(str(band_value) + "*" + str(band_value))
                    fact.append(current_band + "*" + current_band)

                formula = "if(((" + "+".join(fact) + ") != 0),"

                formula += "acos("
                formula += "(" + "+".join(num) + ")/"
                formula += "(sqrt("
                formula += "(" + "+".join(denom) + ")*"
                formula += "(" + "+".join(fact) + ")"
                formula += "))"
                formula += "), 0)"

                formule_ = "\"if( " + formula + ">0.0001, 1/" + formula + ", 0)\""

                logger.debug("num" + str(num))
                logger.debug("denom" + str(denom))
                logger.debug("fact" + str(fact))
                logger.debug("formula" + str(formula))

                OTBApplications.bandmath_cli([image_in], formule_, output_filename)
                # rlayer = manage_QGIS.addRasterLayerToQGIS( output_filename, os.path.basename(os.path.splitext(image_in)[0]) + "_angles" + str(x) + "_" + str(y), iface )
                # manage_QGIS.histogram_stretching( rlayer, iface.mapCanvas())
            return output_filename
Exemplo n.º 10
0
def angles(layer, working_directory, x, y):
    ident = layer.get_qgis_layer().dataProvider().identify(QgsPoint(x, y), QgsRaster.IdentifyFormatValue)
    logger.debug(ident)
    if ident is not None:
        attr = ident.results()
        logger.debug(attr)
        if len(attr) == layer.get_qgis_layer().bandCount():
            image_in = layer.get_qgis_layer().source()
            output_filename = os.path.join(working_directory, os.path.basename(os.path.splitext(image_in)[0]) + "_angles" + str(x).replace(".", "dot") + "_" + str(y).replace(".", "dot") + os.path.splitext(image_in)[1])

            if not os.path.isfile(output_filename):
                num = []
                denom = []
                fact = []
                # acos((im1b1*1269+im1b2*1060+im1b3*974+im1b4*1576)/
                # (sqrt((1269*1269+1060*1060+974*974+1576*1576)*
                # (im1b1*im1b1+im1b2*im1b2+im1b3*im1b3+im1b4*im1b4))))
                for index in range(1, layer.get_qgis_layer().bandCount() + 1):
                    current_band = "im1b{}".format(index)
                    band_value = attr[index]
                    num.append(current_band + "*" + str(band_value))
                    denom.append(str(band_value) + "*" + str(band_value))
                    fact.append(current_band + "*" + current_band)

                #compute denom for testing != 0
                mult_denom = "({})*({})".format("+".join(denom),
                                                "+".join(fact))
                #raw formula
                formula = "acos(({})/(sqrt({})))".format("+".join(num),
                                                        mult_denom)
                #add threshold
                formule_ = '"({}>0.0001?1/{}:0)"'.format(formula, formula)
                #add test on denom
                formula_with_test_denom_diff_0 = "({}!=0?{}:0)".format(mult_denom, formule_)

                logger.debug("num {}".format(num))
                logger.debug("denom {}".format(denom))
                logger.debug("fact {}".format(fact))
                logger.debug("formula {}".format(formula_with_test_denom_diff_0))

                OTBApplications.bandmath_cli([image_in], formula_with_test_denom_diff_0, output_filename)
                # rlayer = manage_QGIS.addRasterLayerToQGIS( output_filename, os.path.basename(os.path.splitext(image_in)[0]) + "_angles" + str(x) + "_" + str(y), iface )
                # manage_QGIS.histogram_stretching( rlayer, iface.mapCanvas())
            return output_filename
Exemplo n.º 11
0
def recompose_image(layer, working_directory):
    bands = layer.bands
    image_in = layer.get_source()
    num_band_pir = bands['pir']
    num_band_red = bands['red']
    num_band_green = bands['green']
    band_pir = gdal_translate_get_one_band(image_in, num_band_pir, working_directory)
    band_red = gdal_translate_get_one_band(image_in, num_band_red, working_directory)
    band_green = gdal_translate_get_one_band(image_in, num_band_green, working_directory)

    logger.debug("pir" + band_pir)
    logger.debug("red" + band_red)
    logger.debug("green" + band_green)

    output_filename = os.path.join(working_directory, os.path.splitext(os.path.basename(image_in))[0] + "pir_red_green" + os.path.splitext(os.path.basename(image_in))[1])
    logger.debug("recomposed image" + output_filename)
    if not os.path.isfile(output_filename):
        OTBApplications.concatenateImages_cli([band_pir, band_red, band_green], output_filename, "uint16")
    return output_filename
Exemplo n.º 12
0
def kmeans(layer, working_directory, nb_class=None):
    """
    WARNING: nb_valid_pixels à calculer ?
    """
    internal_working_directory = os.path.join(working_directory, "Internal")
    if not os.path.exists(internal_working_directory):
        os.makedirs(internal_working_directory)

    logger.debug("enntree dans le kmeans")
    bands = []
    if nb_class is None:
        testqt, ok = QInputDialog.getInt(None, "Kmeans", "Nombre de classes", 5)
        if ok:
            nb_class = testqt
    # mask = OTBApplications.bandmath([layer.get_source()], "if(im1b1>0,1,0)", working_directory, "mask")
    output = OTBApplications.kmeans_cli(layer.get_source(), nb_class, internal_working_directory)
    image_ref = recompose_image(layer, internal_working_directory)
    # if not os.path.isfile(output_colored):
    output_colored = OTBApplications.color_mapping_cli_ref_image(output, image_ref, working_directory)
    return output_colored
Exemplo n.º 13
0
def ndti(layer, working_directory):
    # SQRT(R+0.5)
    # NDTI= (R-G)/(R+G)
    if not layer:
        logger.debug("Aucune layer selectionnée")
    else:
        if layer.red:
            image_in = layer.source_file
            logger.debug("image_in" + image_in)
            output_filename = os.path.join(working_directory, os.path.basename(os.path.splitext(image_in)[0]) + "_ndti" + os.path.splitext(image_in)[1])
            logger.debug(output_filename)
            if not os.path.isfile(output_filename):
                layer_red = "im1b" + str(layer.red)
                layer_green = "im1b" + str(layer.green)
                # expression = "\"sqrt(" + layer_red + "+0.5)\""
                expression = "\"if((" + layer_red + "+" + layer_green + ")!=0,(" + layer_red + "-" + layer_green + ")/(" + layer_red + "+" + layer_green + "),0)\""
                logger.debug(expression)
                logger.debug("image_in" + image_in)
                OTBApplications.bandmath_cli([image_in], expression, output_filename)
            return output_filename
Exemplo n.º 14
0
def brightness(layer, working_directory):
    # IB = sqrt(RxR+PIRxPIR)
    if not layer:
        logger.debug("Aucune layer selectionnée")
    else:
        if layer.pir and layer.red:
            image_in = layer.source_file
            logger.debug("image_in" + image_in)
            logger.debug(working_directory)
            output_filename = os.path.join(working_directory,
                                           os.path.basename(os.path.splitext(image_in)[0]) + "_brillance" + os.path.splitext(image_in)[1])
            logger.debug(output_filename)
            if not os.path.isfile(output_filename):
                layer_pir = "im1b" + str(layer.pir)
                layer_red = "im1b" + str(layer.red)
                expression = "\"sqrt(" + layer_red + "*" + layer_red + "*" + layer_pir + "*" + layer_pir + ")\""
                logger.debug(expression)
                logger.debug("image_in" + image_in)
                OTBApplications.bandmath_cli([image_in], expression, output_filename)
            return output_filename
Exemplo n.º 15
0
def ndvi(layer, working_directory):
    # NDVI= (PIR-R)/(PIR+R)
    if not layer:
        logger.debug("Aucune layer selectionnée")
    else:
        if layer.pir and layer.red:
            image_in = layer.source_file
            logger.debug("image_in: " + image_in)
            logger.debug(working_directory)
            output_filename = os.path.join(working_directory,
                                           os.path.basename(os.path.splitext(image_in)[0]) + "_ndvi" + os.path.splitext(image_in)[1])
            logger.debug(output_filename)
            if not os.path.isfile(output_filename):
                layer_pir = "im1b" + str(layer.pir)
                layer_red = "im1b" + str(layer.red)
                expression = "\"if((" + layer_pir + "+" + layer_red + ")!=0,(" + layer_pir + "-" + layer_red + ")/(" + layer_pir + "+" + layer_red + "),0)\""
                logger.debug(expression)
                logger.debug("image_in" + image_in)
                OTBApplications.bandmath_cli([image_in], expression, output_filename)
            return output_filename
    return ""
Exemplo n.º 16
0
def threshold(layer, working_directory, forms):
    logger.debug("threshold {}".format(forms))
    image_in = layer.get_source()
    temp = []
    i = 1

    if len(forms) == 1:
        output_filename = os.path.join(
            working_directory,
            os.path.basename(os.path.splitext(image_in)[0]) + "_threshold" +
            os.path.splitext(image_in)[1])
        OTBApplications.bandmath_cli([image_in], forms[0], output_filename)
    else:
        for formula in forms:
            output_filename = os.path.join(
                working_directory,
                os.path.basename(os.path.splitext(image_in)[0]) +
                "_threshold" + str(i) + os.path.splitext(image_in)[1])
            OTBApplications.bandmath_cli([image_in], formula, output_filename)
            i += 1
            temp.append(output_filename)
        output_filename = os.path.join(
            working_directory,
            os.path.basename(os.path.splitext(image_in)[0]) + "_threshold" +
            os.path.splitext(image_in)[1])

        OTBApplications.concatenateImages_cli(temp, output_filename)

    return output_filename
Exemplo n.º 17
0
def kmeans(layer, working_directory, nb_class=None):
    """
    WARNING: nb_valid_pixels à calculer ?
    """
    internal_working_directory = os.path.join(working_directory, "Internal")
    if not os.path.exists(internal_working_directory):
        os.makedirs(internal_working_directory)

    logger.debug("enntree dans le kmeans")
    bands = []
    if nb_class is None:
        testqt, ok = QInputDialog.getInt(None, "Kmeans", "Nombre de classes",
                                         5)
        if ok:
            nb_class = testqt
    # mask = OTBApplications.bandmath([layer.get_source()], "if(im1b1>0,1,0)", working_directory, "mask")
    output = OTBApplications.kmeans_cli(layer.get_source(), nb_class,
                                        internal_working_directory)
    image_ref = recompose_image(layer, internal_working_directory)
    # if not os.path.isfile(output_colored):
    output_colored = OTBApplications.color_mapping_cli_ref_image(
        output, image_ref, working_directory)
    return output_colored
Exemplo n.º 18
0
def brightness(layer, working_directory):
    # IB = sqrt(RxR+PIRxPIR)
    if not layer:
        logger.debug("Aucune layer selectionnée")
    else:
        if layer.pir and layer.red:
            image_in = layer.source_file
            logger.debug("image_in" + image_in)
            logger.debug(working_directory)
            output_filename = os.path.join(
                working_directory,
                os.path.basename(os.path.splitext(image_in)[0]) +
                "_brillance" + os.path.splitext(image_in)[1])
            logger.debug(output_filename)
            if not os.path.isfile(output_filename):
                layer_pir = "im1b{}".format(layer.pir)
                layer_red = "im1b{}".format(layer.red)
                expression = "\"sqrt(" + layer_red + "*" + layer_red + "+" + layer_pir + "*" + layer_pir + ")\""
                logger.debug(expression)
                logger.debug("image_in" + image_in)
                OTBApplications.bandmath_cli([image_in], expression,
                                             output_filename)
            return output_filename
Exemplo n.º 19
0
def ndti(layer, working_directory):
    # SQRT(R+0.5)
    # NDTI= (R-G)/(R+G)
    if not layer:
        logger.debug("Aucune layer selectionnée")
    else:
        if layer.red:
            image_in = layer.source_file
            logger.debug("image_in" + image_in)
            output_filename = os.path.join(
                working_directory,
                os.path.basename(os.path.splitext(image_in)[0]) + "_ndti" +
                os.path.splitext(image_in)[1])
            logger.debug(output_filename)
            if not os.path.isfile(output_filename):
                layer_red = "im1b{}".format(layer.red)
                layer_green = "im1b{}".format(layer.green)
                # expression = "\"sqrt(" + layer_red + "+0.5)\""
                expression = "\"((" + layer_red + "+" + layer_green + ")!=0?(" + layer_red + "-" + layer_green + ")/(" + layer_red + "+" + layer_green + "):0)\""
                logger.debug(expression)
                logger.debug("image_in" + image_in)
                OTBApplications.bandmath_cli([image_in], expression,
                                             output_filename)
            return output_filename
Exemplo n.º 20
0
def ndvi(layer, working_directory):
    # NDVI= (PIR-R)/(PIR+R)
    if not layer:
        logger.debug("Aucune layer selectionnée")
    else:
        if layer.pir and layer.red:
            image_in = layer.source_file
            logger.debug("image_in: " + image_in)
            logger.debug(working_directory)
            output_filename = os.path.join(
                working_directory,
                os.path.basename(os.path.splitext(image_in)[0]) + "_ndvi" +
                os.path.splitext(image_in)[1])
            logger.debug(output_filename)
            if not os.path.isfile(output_filename):
                layer_pir = "im1b{}".format(layer.pir)
                layer_red = "im1b{}".format(layer.red)
                expression = "\"((" + layer_pir + "+" + layer_red + ")!=0?(" + layer_pir + "-" + layer_red + ")/(" + layer_pir + "+" + layer_red + "):0)\""
                logger.debug(expression)
                logger.debug("image_in" + image_in)
                OTBApplications.bandmath_cli([image_in], expression,
                                             output_filename)
            return output_filename
    return ""
Exemplo n.º 21
0
def export_kmz(filenames, working_directory):
    """
    """
    internal_working_directory = os.path.join(working_directory, "Internal")
    if not os.path.exists(internal_working_directory):
        os.makedirs(internal_working_directory)

    kmzs = []
    for image in filenames:
        kmz_tmp = OTBApplications.otbcli_export_kmz(image, internal_working_directory)
        kmzs.append(kmz_tmp)

    # attention rustine
    # kmzs = glob.glob( os.path.join(internal_working_directory, "*.kmz"))
    kmz_to_return = []
    for kmz in kmzs:
        new_path = os.path.join(working_directory, os.path.basename(kmz))
        shutil.copy(kmz, new_path)
        kmz_to_return.append(new_path)

    return kmz_to_return
Exemplo n.º 22
0
def get_sensor_id(image):
    """
    Returns the sensor of the given image if found by ReadImageInfo
    Args:
        image:

    Returns:

    """
    result_sensor = OTBApplications.read_image_info_cli(image)
    if result_sensor:
        # type(result_sensor) = PyQt4.QtCore.QByteArray
        for line in str(result_sensor).splitlines():
            if "sensor" in line:
                # sensor_line = result_sensor[0]
                sensor = re.search('sensor: ([a-zA-Z \d]+)$', line)

                if sensor:
                    # group 1 parce qu'on a demande qqchose de particulier a la regexpr a cause des ()
                    sensor = sensor.group(1)
                return sensor
Exemplo n.º 23
0
def get_sensor_id(image):
    """
    Returns the sensor of the given image if found by ReadImageInfo
    Args:
        image:

    Returns:

    """
    result_sensor = OTBApplications.read_image_info_cli(image)
    if result_sensor:
        # type(result_sensor) = PyQt4.QtCore.QByteArray
        for line in str(result_sensor).splitlines():
            if "sensor" in line:
                # sensor_line = result_sensor[0]
                sensor = re.search('sensor: ([a-zA-Z \d]+)$', line)

                if sensor:
                    # group 1 parce qu'on a demande qqchose de particulier a la regexpr a cause des ()
                    sensor = sensor.group(1)
                return sensor
Exemplo n.º 24
0
def export_kmz(filenames, working_directory):
    """
    """
    internal_working_directory = os.path.join(working_directory, "Internal")
    if not os.path.exists(internal_working_directory):
        os.makedirs(internal_working_directory)

    kmzs = []
    for image in filenames:
        kmz_tmp = OTBApplications.otbcli_export_kmz(
            image, internal_working_directory)
        kmzs.append(kmz_tmp)

    # attention rustine
    # kmzs = glob.glob( os.path.join(internal_working_directory, "*.kmz"))
    kmz_to_return = []
    for kmz in kmzs:
        new_path = os.path.join(working_directory, os.path.basename(kmz))
        shutil.copy(kmz, new_path)
        kmz_to_return.append(new_path)

    return kmz_to_return
Exemplo n.º 25
0
def threshold(layer, working_directory, forms):
    logger.debug("threshold" + str(forms))
    image_in = layer.get_source()
    temp = []
    i = 1

    if len(forms) == 1:
        output_filename = os.path.join(working_directory,
                                       os.path.basename(os.path.splitext(image_in)[0]) + "_threshold" + os.path.splitext(image_in)[1])
        OTBApplications.bandmath_cli([image_in], forms[0], output_filename)
    else:
        for formula in forms:
            output_filename = os.path.join(working_directory,
                                           os.path.basename(os.path.splitext(image_in)[0]) + "_threshold" + str(i) + os.path.splitext(image_in)[1])
            OTBApplications.bandmath_cli([image_in], formula, output_filename)
            i += 1
            temp.append(output_filename)
        output_filename = os.path.join(working_directory, os.path.basename(os.path.splitext(image_in)[0]) + "_threshold" + os.path.splitext(image_in)[1])

        OTBApplications.concatenateImages_cli(temp, output_filename)

    return output_filename
Exemplo n.º 26
0
def get_workinglayer_on_opening(iface):
    settings = QSettings()
    last_folder = settings.value("terre_image_last_folder")

    if last_folder:
        path = last_folder
    else:
        path = QDir.currentPath()

    file_opened = QFileDialog.getOpenFileName(None, "Selectionner un fichier raster", path)

    settings.setValue("terre_image_last_folder", os.path.dirname(file_opened))
    settings.sync()

    if file_opened:
        #         try:
        #             str(file_opened)
        #         except UnicodeEncodeError:
        #             QMessageBox.warning( None , "Erreur", u'L\'image que vous essayez d\'ouvrir contient un ou des caractères spéciaux. \
        # La version actuelle du plugin ne gère pas ce type de fichiers. \
        # Veuillez renommer le fichier et ou les répertoires le contenant.', QMessageBox.Ok )
        #             return None, None
        #         else:
        #             if file_opened.find(" ") != -1:
        #                 QMessageBox.warning( None , "Attention", u'L\'image que vous essayez d\'ouvrir contient un ou plusieurs espaces. Les traitements sur cette image provoqueront une erreur.'.encode('utf8'), QMessageBox.Ok )

        if file_opened.endswith(".qgs"):
            # open new qgis project
            pass
        else:
            raster_layer = manage_QGIS.get_raster_layer(file_opened, os.path.splitext(os.path.basename(file_opened))[0])
            if not os.name == "posix":
                terre_image_run_process.set_OTB_PATH()
            type_image = terre_image_processing.get_sensor_id(file_opened)
            logger.debug("type_image " + str(type_image))
            layer = WorkingLayer(file_opened, raster_layer)
            layer.set_type(type_image)
            # self.layer = self.canvas.currentLayer()
            if layer:
                # self.define_bands(self.layer)
                # manage_bands()
                # self.red, self.green, self.blue, self.pir, self.mir = manage_bands().get_values()
                red, green, blue, pir, mir, type_satellite = manage_bands(type_image, layer.get_band_number()).get_values()

                if red != -1 or green != -1 or blue != -1 or pir != -1 or mir != -1:
                    all_set = True
                    bands = {'red': red, 'green': green, 'blue': blue, 'pir': pir, 'mir': mir}
                    for i in range(1, layer.get_band_number() + 1):
                        if i not in bands.values():
                            all_set = False
                    if all_set:
                        layer.set_bands(bands)
                        if layer.type is None:
                            layer.set_type(type_satellite)

                        logger.debug(str(red) + " " + str(green) + " " + str(blue) + " " + str(pir) + " " + str(mir))

                        cst = TerreImageConstant()
                        cst.index_group = cst.iface.legendInterface().addGroup("Terre Image", True, None)

                        manage_QGIS.add_qgis_raser_layer(raster_layer, iface.mapCanvas(), bands)
                        OTBApplications.compute_overviews(file_opened)
                        return layer, bands
                    else:
                        QMessageBox.warning(None, "Erreur",
                                            u'Il y a un problème dans la définition des bandes spectrales.',
                                            QMessageBox.Ok)
                        return None, None
                else:
                    return None, None
    else:
        return None, None