예제 #1
0
def process_landsat_vegetation(id, bands):

    # get paths of files related to this id
    paths = file_paths_wrt_id(id)

    # stack NIR, R, G bands

    # open files from the paths, and save it as stack
    b5 = rio.open(paths["b5"])
    b4 = rio.open(paths["b4"])
    b3 = rio.open(paths["b3"])

    # read as numpy ndarrays
    nir = b5.read(1)
    r = b4.read(1)
    g = b3.read(1)

    with rio.open(
        paths["stack"],
        "w",
        driver="Gtiff",
        width=b4.width,
        height=b4.height,
        count=3,
        crs=b4.crs,
        transform=b4.transform,
        dtype=b4.dtypes[0],
        photometric="RGB",
    ) as rgb:
        rgb.write(nir, 1)
        rgb.write(r, 2)
        rgb.write(g, 3)
        rgb.close()

    source_path_for_rio_color = paths["stack"]

    rprint("Let's make our 🌍 imagery a bit more colorful for a human eye!")
    # apply rio-color correction
    ops_string = "sigmoidal rgb 20 0.2"
    # refer to felicette.utils.color.py to see the parameters of this function
    # Bug: number of jobs if greater than 1, fails the job
    color(
        1,
        "uint16",
        source_path_for_rio_color,
        paths["vegetation_path"],
        ops_string.split(","),
        {"photometric": "RGB"},
    )

    # resize and save as jpeg image
    print("Generated 🌍 images!🎉")
    rprint("[yellow]Please wait while I resize and crop the image :) [/yellow]")
    process_sat_image(paths["vegetation_path"], paths["vegetation_path_jpeg"])
    rprint("[blue]GeoTIFF saved at:[/blue]")
    print(paths["vegetation_path"])
    rprint("[blue]JPEG image saved at:[/blue]")
    print(paths["vegetation_path_jpeg"])
    # display generated image
    display_file(paths["vegetation_path_jpeg"])
예제 #2
0
def process_landsat_rgb(id, bands):
    # get paths of files related to this id
    paths = file_paths_wrt_id(id)

    # stack R,G,B bands

    # open files from the paths, and save it as stack
    b4 = rio.open(paths["b4"])
    b3 = rio.open(paths["b3"])
    b2 = rio.open(paths["b2"])

    # read as numpy ndarrays
    r = b4.read(1)
    g = b3.read(1)
    b = b2.read(1)

    with rio.open(
        paths["stack"],
        "w",
        driver="Gtiff",
        width=b4.width,
        height=b4.height,
        count=3,
        crs=b4.crs,
        transform=b4.transform,
        dtype=b4.dtypes[0],
        photometric="RGB",
    ) as rgb:
        rgb.write(r, 1)
        rgb.write(g, 2)
        rgb.write(b, 3)
        rgb.close()

    source_path_for_rio_color = paths["stack"]

    # check if band 8, i.e panchromatic band has to be processed
    if 8 in bands:
        # pansharpen the image
        rprint(
            "Pansharpening image, get ready for some serious resolution enhancement! ✨"
        )
        gdal_pansharpen(["", paths["b8"], paths["stack"], paths["pan_sharpened"]])
        # set color operation's path to the pansharpened-image's path
        source_path_for_rio_color = paths["pan_sharpened"]

    rprint("Let's make our 🌍 imagery a bit more colorful for a human eye!")
    # apply rio-color correction
    ops_string = "sigmoidal rgb 20 0.2"
    # refer to felicette.utils.color.py to see the parameters of this function
    # Bug: number of jobs if greater than 1, fails the job
    color(
        1,
        "uint16",
        source_path_for_rio_color,
        paths["output_path"],
        ops_string.split(","),
        {"photometric": "RGB"},
    )

    # resize and save as jpeg image
    print("Generated 🌍 images!🎉")
    rprint("[yellow]Please wait while I resize and crop the image :) [/yellow]")
    process_sat_image(paths["output_path"], paths["output_path_jpeg"])
    rprint("[blue]GeoTIFF saved at:[/blue]")
    print(paths["output_path"])
    rprint("[blue]JPEG image saved at:[/blue]")
    print(paths["output_path_jpeg"])
    # display generated image
    display_file(paths["output_path_jpeg"])