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
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)
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
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)
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)
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)