Exemple #1
0
def erosion_filter(
    in_raster,
    width=3,
    iterations=1,
    circular=True,
    weighted_distance=True,
    sigma=3.5,
    _kernel=False,
):
    kernel = (_kernel if _kernel is not False else create_kernel(
        width,
        circular=circular,
        weighted_edges=True,
        weighted_distance=weighted_distance,
        sigma=sigma,
        normalise=False,
    ))
    if iterations == 1:
        return kernel_filter(in_raster, kernel,
                             "erode").astype(in_raster.dtype)
    else:
        result = kernel_filter(in_raster, kernel,
                               "erode").astype(in_raster.dtype)
        for _ in range(iterations - 1):
            result = kernel_filter(result, kernel,
                                   "erode").astype(in_raster.dtype)
        return result
Exemple #2
0
def sum_filter(
    in_raster,
    width=3,
    circular=True,
    holed=False,
    weighted_edges=True,
    weighted_distance=False,
    distance_calc="gaussian",
    sigma=2,
    dtype=False,
    _kernel=False,
):
    kernel = (_kernel if _kernel is not False else create_kernel(
        width,
        circular=circular,
        holed=holed,
        normalise=False,
        weighted_edges=weighted_edges,
        weighted_distance=weighted_distance,
        distance_calc=distance_calc,
        sigma=sigma,
    ))

    if dtype is False:
        return kernel_filter(in_raster, kernel, "mean").astype(in_raster.dtype)

    return kernel_filter(in_raster, kernel, "mean").astype(dtype)
Exemple #3
0
def median_filter(
    in_raster,
    width=3,
    iterations=1,
    circular=True,
    holed=False,
    weighted_edges=True,
    weighted_distance=True,
    distance_calc="gaussian",
    sigma=2,
    dtype='float32',
    _kernel=False,
):
    kernel = (_kernel if _kernel is not False else create_kernel(
        width,
        circular=circular,
        holed=holed,
        weighted_edges=weighted_edges,
        weighted_distance=weighted_distance,
        distance_calc=distance_calc,
        sigma=sigma,
    ))

    if iterations == 1:
        return kernel_filter(in_raster, kernel, "median", dtype)
    else:
        result = kernel_filter(in_raster, kernel, "median", dtype)
        for _ in range(iterations - 1):
            result = kernel_filter(result, kernel, "median", dtype)
        return result
Exemple #4
0
def close_filter(
    in_raster,
    width=3,
    circular=True,
    weighted_distance=True,
    sigma=3.5,
    _kernel=False,
):
    kernel = (_kernel if _kernel is not False else create_kernel(
        width,
        circular=circular,
        weighted_edges=True,
        weighted_distance=weighted_distance,
        sigma=sigma,
        normalise=False,
    ))
    return kernel_filter(
        kernel_filter(in_raster, kernel, "dilate"),
        kernel,
        "erode",
    ).astype(in_raster.dtype)
Exemple #5
0
def cdef_difference_filter(
    in_raster_master,
    in_raster_slave,
    width=3,
    circular=True,
    holed=False,
    weighted_edges=True,
    weighted_distance=False,
    distance_calc="gaussian",
    sigma=2,
    dtype='float32',
    _kernel=False,
):
    kernel = (_kernel if _kernel is not False else create_kernel(
        width,
        circular=circular,
        holed=holed,
        normalise=True,
        weighted_edges=weighted_edges,
        weighted_distance=weighted_distance,
        distance_calc=distance_calc,
        sigma=sigma,
    ))

    master_mean = kernel_filter(in_raster_master, kernel, 'mean')
    slave_mean = kernel_filter(in_raster_slave, kernel, 'mean')

    master_median = kernel_filter(in_raster_master, kernel, "median")
    slave_median = kernel_filter(in_raster_slave, kernel, 'median')

    abs_median_diff = np.abs(master_median - slave_median)
    master_mean_difference = np.abs(master_mean -
                                    np.abs(master_median - slave_median))
    slave_mean_difference = np.abs(slave_mean -
                                   np.abs(master_median - slave_median))

    master_mad_std = kernel_filter(in_raster_master, kernel, 'mad_std')
    slave_mad_std = kernel_filter(in_raster_slave, kernel, 'mad_std')

    with np.errstate(divide='ignore', invalid='ignore'):
        zscores_master = (master_mean -
                          master_mean_difference) / master_mad_std
        zscores_master[master_mad_std == 0] = 0

        zscores_slave = (slave_mean - slave_mean_difference) / slave_mad_std
        zscores_slave[slave_mad_std == 0] = 0

    return np.min([zscores_master, zscores_slave], axis=0)
Exemple #6
0
def kurtosis_filter(
    in_raster,
    width=3,
    circular=True,
    holed=False,
    weighted_edges=True,
    weighted_distance=True,
    distance_calc="gaussian",
    sigma=2,
    dtype='float32',
    _kernel=False,
):
    kernel = (_kernel if _kernel is not False else create_kernel(
        width,
        circular=circular,
        holed=holed,
        weighted_edges=weighted_edges,
        weighted_distance=weighted_distance,
        distance_calc=distance_calc,
        sigma=sigma,
    ))
    return kernel_filter(in_raster, kernel, "kurtosis", dtype)