Beispiel #1
0
def test_generate_epipolar_grids():
    """
    Test generate_epipolar_grids method
    """
    img1 = absolute_data_path("input/phr_ventoux/left_image.tif")
    img2 = absolute_data_path("input/phr_ventoux/right_image.tif")
    dem = absolute_data_path("input/phr_ventoux/srtm")

    left_grid, right_grid, size_x, size_y, baseline = preprocessing.generate_epipolar_grids(
        img1, img2, dem)

    assert size_x == 612
    assert size_y == 612
    assert baseline == 0.7039416432380676

    # Uncomment to update baseline
    # left_grid.to_netcdf(absolute_data_path("ref_output/left_grid.nc"))

    left_grid_ref = xr.open_dataset(
        absolute_data_path("ref_output/left_grid.nc"))
    assert_same_datasets(left_grid, left_grid_ref)

    # Uncomment to update baseline
    # right_grid.to_netcdf(absolute_data_path("ref_output/right_grid.nc"))

    right_grid_ref = xr.open_dataset(
        absolute_data_path("ref_output/right_grid.nc"))
    assert_same_datasets(right_grid, right_grid_ref)
Beispiel #2
0
def test_images_pair_to_3d_points(images_and_grids_conf, color1_conf, no_data_conf, disparities_conf,
                                  epipolar_origins_spacings_conf, epipolar_sizes_conf):
    """
    Test images_pair_to_3d_points on ventoux dataset (epipolar geometry)
    with Pandora
    """
    # With nodata and color
    configuration = images_and_grids_conf
    configuration["input"].update(color1_conf["input"])
    configuration["input"].update(no_data_conf["input"])
    configuration["preprocessing"]["output"].update(epipolar_sizes_conf["preprocessing"]["output"])
    configuration["preprocessing"]["output"].update(epipolar_origins_spacings_conf["preprocessing"]["output"])
    configuration["preprocessing"]["output"].update(disparities_conf["preprocessing"]["output"])

    region = [420, 200, 530, 320]
    # Pandora configuration
    corr_cfg = create_corr_conf()

    cloud, color = stereo.images_pair_to_3d_points(configuration,
                                                   region,
                                                   corr_cfg,
                                                   disp_min=-13,
                                                   disp_max=14)

    # Uncomment to update baseline
    #cloud['ref'].to_netcdf(absolute_data_path("ref_output/cloud1_ref_pandora.nc"))

    ref = xr.open_dataset(absolute_data_path("ref_output/cloud1_ref_pandora.nc"))
    assert_same_datasets(cloud['ref'],ref,atol=1.e-3)
Beispiel #3
0
def test_simple_rasterization_dataset_2():

    cloud = xr.open_dataset(
        absolute_data_path("input/intermediate_results/cloud1_ref.nc"))
    color = xr.open_dataset(
        absolute_data_path("input/intermediate_results/data1_ref_clr.nc"))

    utm = projection.points_cloud_conversion_dataset(cloud, 32630)

    xstart = None
    ystart = None
    xsize = None
    ysize = None
    resolution = 0.5

    raster = rasterization.simple_rasterization_dataset([utm], resolution,
                                                        32630, [color], xstart,
                                                        ystart, xsize, ysize,
                                                        0.3, 3)

    # Uncomment to update references
    # raster.to_netcdf(
    #     absolute_data_path('ref_output/rasterization_res_ref_2.nc'),
    # )

    raster_ref = xr.open_dataset(
        absolute_data_path("ref_output/rasterization_res_ref_2.nc"))
    assert_same_datasets(raster, raster_ref, atol=1.e-10, rtol=1.e-10)
Beispiel #4
0
def test_resample_image():
    """
    Test resample image method
    """
    region = [387, 180, 564, 340]

    img = absolute_data_path('input/phr_ventoux/left_image.tif')
    nodata = 0
    grid = absolute_data_path('input/stereo_input/left_epipolar_grid.tif')
    epipolar_size_x = 612
    epipolar_size_y = 612

    test_dataset = stereo.resample_image(
        img, grid, [
            epipolar_size_x, epipolar_size_y], region=region, nodata=nodata)

    # For convenience we use same reference as test_epipolar_rectify_images_1
    ref_dataset = xr.open_dataset(absolute_data_path(
        "ref_output/data1_ref_left.nc"))

    # We need to remove attributes that are not generated by resample_image
    # method
    ref_dataset.attrs.pop(cst.ROI, None)
    ref_dataset.attrs.pop(cst.EPI_MARGINS, None)
    ref_dataset.attrs.pop(cst.EPI_DISP_MIN, None)
    ref_dataset.attrs.pop(cst.EPI_DISP_MAX, None)
    ref_dataset.attrs['region'] = ref_dataset.attrs[cst.ROI_WITH_MARGINS]
    ref_dataset.attrs.pop(cst.ROI_WITH_MARGINS, None)

    assert_same_datasets(test_dataset, ref_dataset)
Beispiel #5
0
def test_compute_disparity_1_msk_ref():
    """
    Test compute_disparity on ventoux dataset with pandora
    """
    left_input = xr.open_dataset(absolute_data_path("input/intermediate_results/data1_ref_left_masked.nc"))
    right_input = xr.open_dataset(absolute_data_path("input/intermediate_results/data1_ref_right.nc"))
    # Pandora configuration
    corr_cfg = create_corr_conf()

    disp_min = -13
    disp_max = 14

    output = stereo.compute_disparity(left_input,
                                      right_input,
                                      corr_cfg,
                                      disp_min,
                                      disp_max,
                                      verbose = True)

    assert output['ref']['disp'].shape == (120, 110)
    assert output['ref']['msk'].shape == (120, 110)

    np.testing.assert_allclose(output['ref'].attrs["roi"],
                               np.array([420, 200, 530, 320]))

    # Uncomment to update baseline
    #output['ref'].to_netcdf(absolute_data_path("ref_output/disp1_ref_pandora_msk_ref.nc"))
    #output['sec'].to_netcdf(absolute_data_path("ref_output/disp1_sec_pandora_msk_ref.nc"))

    ref = xr.open_dataset(absolute_data_path("ref_output/disp1_ref_pandora_msk_ref.nc"))
    assert_same_datasets(output['ref'],ref,atol=5.e-6)

    sec = xr.open_dataset(absolute_data_path("ref_output/disp1_sec_pandora_msk_ref.nc"))
    assert_same_datasets(output['sec'], sec, atol=5.e-6)
Beispiel #6
0
def test_simple_rasterization_dataset_2():
    """
    Test simple rasterization dataset from test cloud cloud1_ref_epsg_32630.nc
    Configuration 2 : no xstart, ystart, xsize, ysize values
    """

    cloud = xr.open_dataset(
        absolute_data_path(
            "input/rasterization_input/cloud1_ref_epsg_32630.nc"))
    color = xr.open_dataset(
        absolute_data_path("input/intermediate_results/data1_ref_clr.nc"))

    xstart = None
    ystart = None
    xsize = None
    ysize = None
    resolution = 0.5

    raster = rasterization.simple_rasterization_dataset([cloud], resolution,
                                                        32630, [color], xstart,
                                                        ystart, xsize, ysize,
                                                        0.3, 3)

    # Uncomment to update references
    # raster.to_netcdf(
    #     absolute_data_path('ref_output/rasterization_res_ref_2.nc'),
    # )

    raster_ref = xr.open_dataset(
        absolute_data_path("ref_output/rasterization_res_ref_2.nc"))
    assert_same_datasets(raster, raster_ref, atol=1.e-10, rtol=1.e-10)
Beispiel #7
0
def test_resample_image():
    """
    Test resample image method
    """
    region = [387, 180, 564, 340]

    img = absolute_data_path('input/phr_ventoux/left_image.tif')
    nodata = 0
    grid = absolute_data_path('input/stereo_input/left_epipolar_grid.tif')
    epipolar_size_x = 612
    epipolar_size_y = 612

    ds = stereo.resample_image(
        img, grid, [
            epipolar_size_x, epipolar_size_y], region=region, nodata=nodata)

    # For convenience we use same reference as test_epipolar_rectify_images_1
    ref_ds = xr.open_dataset(absolute_data_path(
        "ref_output/data1_ref_left.nc"))

    # We need to remove attributes that are not generated by resample_image
    # method
    ref_ds.attrs.pop('roi', None)
    ref_ds.attrs.pop('margins', None)
    ref_ds.attrs.pop('disp_min', None)
    ref_ds.attrs.pop('disp_max', None)
    ref_ds.attrs['region'] = ref_ds.attrs['roi_with_margins']
    ref_ds.attrs.pop('roi_with_margins', None)

    assert_same_datasets(ds, ref_ds)
Beispiel #8
0
def test_simple_rasterization_single():
    """
    Test simple rasterization from test cloud ref_single_cloud_in_df.nc
    """

    resolution = 0.5

    cloud_xr = xr.open_dataset(
        absolute_data_path(
            'input/rasterization_input/ref_single_cloud_in_df.nc'))
    cloud_df = cloud_xr.to_dataframe()

    xstart, ystart, xsize, ysize = \
        rasterization.compute_xy_starts_and_sizes(resolution, cloud_df)
    raster = rasterization.\
        rasterize(
            cloud_df, resolution, 32630, xstart, ystart, xsize, ysize, 0.3, 3,
            hgt_no_data=np.nan, color_no_data=np.nan)

    # Uncomment to update references
    # raster.to_netcdf(
    #     absolute_data_path('ref_output/ref_simple_rasterization.nc'),
    # )

    ref_rasterized = xr.open_dataset(
        absolute_data_path("ref_output/ref_simple_rasterization.nc"))

    assert_same_datasets(raster, ref_rasterized, atol=1.e-10, rtol=1.e-10)
Beispiel #9
0
def test_generate_epipolar_grids_default_alt():
    """
    Test generate_epipolar_grids method
    """
    img1 = absolute_data_path("input/phr_ventoux/left_image.tif")
    img2 = absolute_data_path("input/phr_ventoux/right_image.tif")
    dem = None
    default_alt = 500

    left_grid, right_grid, size_x, size_y, baseline = \
        generate_epipolar_grids(
            img1, img2, dem, default_alt)

    assert size_x == 612
    assert size_y == 612
    assert baseline == 0.7039446234703064

    # Uncomment to update baseline
    # left_grid.to_netcdf(absolute_data_path(
    # "ref_output/left_grid_default_alt.nc"))

    left_grid_ref = xr.open_dataset(
        absolute_data_path("ref_output/left_grid_default_alt.nc"))
    assert_same_datasets(left_grid, left_grid_ref)

    # Uncomment to update baseline
    # right_grid.to_netcdf(absolute_data_path(
    # "ref_output/right_grid_default_alt.nc"))

    right_grid_ref = xr.open_dataset(
        absolute_data_path("ref_output/right_grid_default_alt.nc"))
    assert_same_datasets(right_grid, right_grid_ref)
Beispiel #10
0
def test_compute_disparity_1_msk_sec(
                images_and_grids_conf): #pylint: disable=redefined-outer-name
    """
    Test compute_disparity on ventoux dataset with pandora
    """
    left_input = xr.open_dataset(
        absolute_data_path(
            "input/intermediate_results/data1_ref_left.nc"))
    right_input = xr.open_dataset(
        absolute_data_path(
            "input/intermediate_results/data1_ref_right_masked.nc"))
    conf = deepcopy(images_and_grids_conf)
    conf['input']['mask2_classes'] = absolute_data_path(
        "input/intermediate_results/data1_ref_right_mask_classes.json")

    # Pandora configuration
    corr_cfg = create_corr_conf()

    disp_min = -13
    disp_max = 14

    output = stereo.compute_disparity(left_input,
                                      right_input,
                                      conf,
                                      corr_cfg,
                                      disp_min,
                                      disp_max,
                                      verbose=True)

    assert output[cst.STEREO_REF][cst.DISP_MAP].shape == (120, 110)
    assert output[cst.STEREO_REF][cst.DISP_MSK].shape == (120, 110)
    assert output[cst.STEREO_SEC][cst.DISP_MAP].shape == (160, 177)
    assert output[cst.STEREO_SEC][cst.DISP_MSK].shape == (160, 177)

    np.testing.assert_allclose(
        output[cst.STEREO_REF].attrs[cst.ROI],
        np.array([420, 200, 530, 320]))
    np.testing.assert_allclose(
        output[cst.STEREO_SEC].attrs[cst.ROI],
        np.array([420, 200, 530, 320]))
    np.testing.assert_allclose(
        output[cst.STEREO_SEC].attrs[cst.ROI_WITH_MARGINS],
        np.array([387, 180, 564, 340]))

    # Uncomment to update baseline
    # output[cst.STEREO_REF].to_netcdf(absolute_data_path(
    # "ref_output/disp1_ref_pandora_msk_sec.nc"))
    # output[cst.STEREO_SEC].to_netcdf(absolute_data_path(
    # "ref_output/disp1_sec_pandora_msk_sec.nc"))

    ref = xr.open_dataset(
        absolute_data_path(
            "ref_output/disp1_ref_pandora_msk_sec.nc"))
    assert_same_datasets(output[cst.STEREO_REF],ref,atol=5.e-6)

    sec = xr.open_dataset(
        absolute_data_path(
            "ref_output/disp1_sec_pandora_msk_sec.nc"))
    assert_same_datasets(output[cst.STEREO_SEC], sec, atol=5.e-6)
Beispiel #11
0
def test_compute_disparity_3(
                images_and_grids_conf): #pylint: disable=redefined-outer-name
    """
    Test compute_disparity on paca dataset with pandora
    """
    left_input = xr.open_dataset(absolute_data_path(
        "input/intermediate_results/data3_ref_left.nc"))
    right_input = xr.open_dataset(absolute_data_path(
        "input/intermediate_results/data3_ref_right.nc"))
    # Pandora configuration
    corr_cfg = create_corr_conf()

    disp_min = -43
    disp_max = 41

    output = stereo.compute_disparity(left_input,
                                      right_input,
                                      images_and_grids_conf,
                                      corr_cfg,
                                      disp_min,
                                      disp_max)

    assert output[cst.STEREO_REF][cst.DISP_MAP].shape == (90, 90)
    assert output[cst.STEREO_REF][cst.DISP_MSK].shape == (90, 90)
    assert output[cst.STEREO_SEC][cst.DISP_MAP].shape == (170, 254)
    assert output[cst.STEREO_SEC][cst.DISP_MSK].shape == (170, 254)

    np.testing.assert_allclose(
        output[cst.STEREO_REF].attrs[cst.ROI],
        np.array([16500, 23160, 16590, 23250]))
    np.testing.assert_allclose(
        output[cst.STEREO_SEC].attrs[cst.ROI],
        np.array([16500, 23160, 16590, 23250]))
    np.testing.assert_allclose(
        output[cst.STEREO_SEC].attrs[cst.ROI_WITH_MARGINS],
        np.array([16417, 23120, 16671, 23290]))

    # Uncomment to update baseline
    # output[cst.STEREO_REF].to_netcdf(absolute_data_path(
    # "ref_output/disp3_ref_pandora.nc"))
    # output[cst.STEREO_SEC].to_netcdf(absolute_data_path(
    # "ref_output/disp3_sec_pandora.nc"))

    ref = xr.open_dataset(absolute_data_path(
        "ref_output/disp3_ref_pandora.nc"))
    assert_same_datasets(output[cst.STEREO_REF], ref, atol=5.e-6)
    sec = xr.open_dataset(absolute_data_path(
        "ref_output/disp3_sec_pandora.nc"))
    assert_same_datasets(output[cst.STEREO_SEC], sec, atol=5.e-6)
Beispiel #12
0
def test_triangulation_1(images_and_grids_conf):
    """
    Test triangulation ventoux dataset
    """
    input = xr.open_dataset(absolute_data_path(
        "input/intermediate_results/disp1_ref.nc"))
    output = stereo.triangulate(images_and_grids_conf, input, None)

    assert output['ref']['x'].shape == (120, 110)

    # Uncomment to update baseline
    #output['ref'].to_netcdf(absolute_data_path("ref_output/triangulation1_ref.nc"))

    ref = xr.open_dataset(absolute_data_path(
        "ref_output/triangulation1_ref.nc"))
    assert_same_datasets(output['ref'], ref, atol=1.e-3)
Beispiel #13
0
def test_triangulation_1(
                images_and_grids_conf): #pylint: disable=redefined-outer-name
    """
    Test triangulation ventoux dataset
    """
    disp1_ref = xr.open_dataset(absolute_data_path(
        "input/intermediate_results/disp1_ref.nc"))
    point_cloud_dict = stereo.triangulate(
                    images_and_grids_conf, disp1_ref, None)

    assert point_cloud_dict[cst.STEREO_REF][cst.X].shape == (120, 110)

    # Uncomment to update baseline
    # output[cst.STEREO_REF].to_netcdf(
    # absolute_data_path("ref_output/triangulation1_ref.nc"))

    ref = xr.open_dataset(absolute_data_path(
        "ref_output/triangulation1_ref.nc"))
    assert_same_datasets(point_cloud_dict[cst.STEREO_REF], ref, atol=1.e-3)
Beispiel #14
0
def test_compute_disparity_3():
    """
    Test compute_disparity on paca dataset with pandora
    """
    left_input = xr.open_dataset(absolute_data_path(
        "input/intermediate_results/data3_ref_left.nc"))
    right_input = xr.open_dataset(absolute_data_path(
        "input/intermediate_results/data3_ref_right.nc"))
    # Pandora configuration
    corr_cfg = create_corr_conf()

    disp_min = -43
    disp_max = 41

    output = stereo.compute_disparity(left_input,
                                      right_input,
                                      corr_cfg,
                                      disp_min,
                                      disp_max)

    assert output['ref']['disp'].shape == (90, 90)
    assert output['ref']['msk'].shape == (90, 90)
    assert output['sec']['disp'].shape == (170, 254)
    assert output['sec']['msk'].shape == (170, 254)

    np.testing.assert_allclose(output['ref'].attrs["roi"],
                               np.array([16500, 23160, 16590, 23250]))
    np.testing.assert_allclose(output['sec'].attrs["roi"],
                               np.array([16500, 23160, 16590, 23250]))
    np.testing.assert_allclose(output['sec'].attrs["roi_with_margins"],
                               np.array([16417, 23120, 16671, 23290]))

    # Uncomment to update baseline
    #output['ref'].to_netcdf(absolute_data_path("ref_output/disp3_ref_pandora.nc"))
    #output['sec'].to_netcdf(absolute_data_path("ref_output/disp3_sec_pandora.nc"))

    ref = xr.open_dataset(absolute_data_path(
        "ref_output/disp3_ref_pandora.nc"))
    assert_same_datasets(output['ref'], ref, atol=5.e-6)
    sec = xr.open_dataset(absolute_data_path(
        "ref_output/disp3_sec_pandora.nc"))
    assert_same_datasets(output['sec'], sec, atol=5.e-6)
Beispiel #15
0
def test_read_lowres_dem():
    """
    Test read_lowres_dem function
    """    
    dem = absolute_data_path("input/phr_ventoux/srtm")
    startx = 5.193458
    starty = 44.206671
    sizex = 100
    sizey = 100
    
    srtm_ds = preprocessing.read_lowres_dem(dem, startx, starty, sizex, sizey)

    # Uncomment to update baseline
    #srtm_ds.to_netcdf(absolute_data_path("ref_output/srtm_xt.nc"))

    srtm_ds_ref = xr.open_dataset(
        absolute_data_path("ref_output/srtm_xt.nc"))
    assert_same_datasets(srtm_ds, srtm_ds_ref)

    print(srtm_ds)
def test_update_disp_to_0_no_tags_in_jsons(
    ref_ds, sec_ds, ref_disp, sec_disp): #pylint: disable=redefined-outer-name
    """Tests update disp to 0 with an empty dict"""
    # disp dictionary
    disp = {
        cst.STEREO_REF: ref_disp,
        cst.STEREO_SEC: sec_disp
    }

    # test
    disp_no_tags_in_json = deepcopy(disp)
    matching_regularisation.update_disp_to_0(
        disp_no_tags_in_json, ref_ds, sec_ds,
        absolute_data_path(
    "input/matching_regularisation_input/mask_no_set_to_ref_alt_classes.json"),
        absolute_data_path(
    "input/matching_regularisation_input/mask_no_set_to_ref_alt_classes.json"))

    assert_same_datasets(disp_no_tags_in_json[cst.STEREO_REF],
                         disp[cst.STEREO_REF])
    assert_same_datasets(disp_no_tags_in_json[cst.STEREO_SEC],
                         disp[cst.STEREO_SEC])
Beispiel #17
0
def test_simple_rasterization_multiple_datasets():
    """
    Test simple_rasterization_dataset with a list of datasets
    """
    cloud = xr.open_dataset(
        absolute_data_path("input/intermediate_results/cloud1_ref.nc"))
    color = xr.open_dataset(
        absolute_data_path("input/intermediate_results/data1_ref_clr.nc"))

    utm = projection.points_cloud_conversion_dataset(cloud, 32630)

    utm1 = utm.isel(row=range(0, 60))
    utm2 = utm.isel(row=range(60, 120))

    color1 = color.isel(row=range(0, 60))
    color2 = color.isel(row=range(60, 120))

    xstart = 1154790
    ystart = 4927552
    xsize = 114
    ysize = 112
    resolution = 0.5

    raster = rasterization.simple_rasterization_dataset([utm1, utm2],
                                                        resolution, 32630,
                                                        [color1, color2],
                                                        xstart, ystart, xsize,
                                                        ysize, 0.3, 3)

    # Uncomment to update reference
    # raster.to_netcdf(
    #     absolute_data_path('ref_output/rasterization_multiple_res_ref.nc'),
    # )

    raster_ref = xr.open_dataset(
        absolute_data_path("ref_output/rasterization_multiple_res_ref.nc"))
    assert_same_datasets(raster, raster_ref, atol=1.e-10, rtol=1.e-10)
Beispiel #18
0
def test_epipolar_rectify_images_1(
    images_and_grids_conf, color1_conf, #pylint: disable=redefined-outer-name
    epipolar_sizes_conf,                #pylint: disable=redefined-outer-name
    epipolar_origins_spacings_conf,     #pylint: disable=redefined-outer-name
    no_data_conf):                      #pylint: disable=redefined-outer-name
    """
    Test epipolar_rectify_image on ventoux dataset (epipolar geometry)
    with nodata and color
    """
    configuration = images_and_grids_conf
    configuration["input"].update(color1_conf["input"])
    configuration["input"].update(no_data_conf["input"])
    configuration["preprocessing"]["output"]\
        .update(epipolar_sizes_conf["preprocessing"]["output"])
    configuration["preprocessing"]["output"]\
        .update(epipolar_origins_spacings_conf["preprocessing"]["output"])

    region = [420, 200, 530, 320]
    margin = xr.DataArray(np.array([[33, 20, 34, 20],
                                    [33, 20, 34, 20]], dtype=int),
                          coords=[['ref_margin', 'sec_margin'],
                                  ['left', 'up', 'right', 'down']],
                          dims=['image', 'corner'])
    margin.name = cst.EPI_MARGINS
    margin.attrs[cst.EPI_DISP_MIN] = -13
    margin.attrs[cst.EPI_DISP_MAX] = 14

    # Rectify images
    left, right, clr = stereo.epipolar_rectify_images(configuration,
                                                      region,
                                                      margin)

    print("\nleft dataset: {}".format(left))
    print("right dataset: {}".format(right))
    print("clr dataset: {}".format(clr))

    # Uncomment to update baseline
    # left.to_netcdf(absolute_data_path("ref_output/data1_ref_left.nc"))

    left_ref = xr.open_dataset(
        absolute_data_path("ref_output/data1_ref_left.nc"))
    assert_same_datasets(left, left_ref)

    # Uncomment to update baseline
    # right.to_netcdf(absolute_data_path("ref_output/data1_ref_right.nc"))

    right_ref = xr.open_dataset(
        absolute_data_path("ref_output/data1_ref_right.nc"))
    assert_same_datasets(right, right_ref)

    # Uncomment to update baseline
    # clr.to_netcdf(absolute_data_path("ref_output/data1_ref_clr.nc"))

    clr_ref = xr.open_dataset(
        absolute_data_path("ref_output/data1_ref_clr.nc"))
    assert_same_datasets(clr, clr_ref)
Beispiel #19
0
def test_epipolar_rectify_images_3(images_and_grids_conf, color_pxs_conf, epipolar_sizes_conf,
                                   epipolar_origins_spacings_conf, no_data_conf):
    """
    Test epipolar_rectify_image on ventoux dataset (epipolar geometry)
    with nodata and color as a p+xs fusion
    """
    configuration = images_and_grids_conf
    configuration["input"].update(color_pxs_conf["input"])
    configuration["input"].update(no_data_conf["input"])
    configuration["preprocessing"]["output"].update(epipolar_sizes_conf["preprocessing"]["output"])
    configuration["preprocessing"]["output"].update(epipolar_origins_spacings_conf["preprocessing"]["output"])

    region = [420, 200, 530, 320]
    margin = xr.DataArray(np.array([[33, 20, 34, 20], [33, 20, 34, 20]], dtype=int),
                          coords=[['ref_margin', 'sec_margin'],
                                  ['left', 'up', 'right', 'down']],
                          dims=['image', 'corner'])
    margin.name = 'Margins'
    margin.attrs['disp_min'] = -13
    margin.attrs['disp_max'] = 14

    # Rectify images
    left, right, clr = stereo.epipolar_rectify_images(configuration,
                                                      region,
                                                      margin)

    print("\nleft dataset: {}".format(left))
    print("right dataset: {}".format(right))
    print("clr dataset: {}".format(clr))

    left_ref = xr.open_dataset(
        absolute_data_path("ref_output/data1_ref_left.nc"))
    assert_same_datasets(left, left_ref)

    right_ref = xr.open_dataset(
        absolute_data_path("ref_output/data1_ref_right.nc"))
    assert_same_datasets(right, right_ref)

    # Uncomment to update baseline
    # clr.to_netcdf(absolute_data_path("ref_output/data3_ref_clr_4bands.nc"))

    clr_ref = xr.open_dataset(absolute_data_path(
        "ref_output/data3_ref_clr_4bands.nc"))
    assert_same_datasets(clr, clr_ref)
Beispiel #20
0
def test_add_cloud_filtering_msk():
    nb_row = 5
    nb_col = 10
    rows = np.array(range(nb_row))
    cols = np.array(range(nb_col))

    ds0 = xr.Dataset({}, coords={'row': rows, 'col': cols})
    ds1 = xr.Dataset({}, coords={'row': rows, 'col': cols})

    pos_arr = np.array([[1, 2, 0], [2, 2, 1]])
    elt_remove = pandas.DataFrame(
        pos_arr,
        columns=['coord_epi_geom_i', 'coord_epi_geom_j', 'idx_im_epi'])

    filtering.add_cloud_filtering_msk([ds0, ds1], elt_remove, 'mask', 255)

    mask0 = np.zeros((nb_row, nb_col), dtype=np.uint16)
    mask0[1, 2] = 255
    mask1 = np.zeros((nb_row, nb_col), dtype=np.uint16)
    mask1[2, 2] = 255
    ds0_ref = xr.Dataset({'mask': (['row', 'col'], mask0)},
                         coords={
                             'row': rows,
                             'col': cols
                         })
    ds1_ref = xr.Dataset({'mask': (['row', 'col'], mask1)},
                         coords={
                             'row': rows,
                             'col': cols
                         })

    assert_same_datasets(ds0_ref, ds0)
    assert_same_datasets(ds1_ref, ds1)

    # test exceptions
    with pytest.raises(Exception) as e:
        np_pos = np.array([[1, 2, 2], [2, 2, 1]])
        elt_remove = pandas.DataFrame(
            np_pos,
            columns=['coord_epi_geom_i', 'coord_epi_geom_j', 'idx_im_epi'])
        filtering.add_cloud_filtering_msk([ds0, ds1], elt_remove, 'mask', 255)
        assert str(e) == 'Index indicated in the elt_pos_infos pandas.DataFrame is not coherent ' \
                         'with the clouds list given in input'

    with pytest.raises(Exception) as e:
        np_pos = np.array([[1, 2, -1], [2, 2, 1]])
        elt_remove = pandas.DataFrame(
            np_pos,
            columns=['coord_epi_geom_i', 'coord_epi_geom_j', 'idx_im_epi'])
        filtering.add_cloud_filtering_msk([ds0, ds1], elt_remove, 'mask', 255)
        assert str(e) == 'Index indicated in the elt_pos_infos pandas.DataFrame is not coherent ' \
                         'with the clouds list given in input'

    with pytest.raises(Exception) as e:
        np_pos = np.array([[11, 2, 0]])
        elt_remove = pandas.DataFrame(
            np_pos,
            columns=['coord_epi_geom_i', 'coord_epi_geom_j', 'idx_im_epi'])
        filtering.add_cloud_filtering_msk([ds0, ds1], elt_remove, 'mask', 255)
        assert str(
            e
        ) == 'Point at location (11,2) is not accessible in an image of size (5,10)'