def apply_contra_harmonic_mean(img, filter_size, q): filter_size = util.format_filter_size(filter_size) obtained, original = util.get_empty_image_with_same_dimensions(img) if len(img.shape) == 2: for i in range(len(original)): for j in range(len(original[0])): neighbors = ImageFilter.__get_neighbors_matrix( filter_size, i, j, original) obtained[i][j] = ImageFilter.get_contra_harmonic_mean( neighbors, q) else: R = ImageFilter.apply_contra_harmonic_mean(img[:, :, 0], filter_size, q) G = ImageFilter.apply_contra_harmonic_mean(img[:, :, 1], filter_size, q) B = ImageFilter.apply_contra_harmonic_mean(img[:, :, 2], filter_size, q) output = np.zeros((R.shape[0], R.shape[1], 3), dtype=np.uint8) output[:, :, 0] = R output[:, :, 1] = G output[:, :, 2] = B obtained = output return obtained
def apply_geometric_mean(img, filter_size): filter_size = util.format_filter_size(filter_size) obtained, original = util.get_empty_image_with_same_dimensions(img) for i in range(len(original)): for j in range(len(original[0])): neighbors = ImageFilter.__get_neighbors_matrix( filter_size, i, j, original) obtained[i][j] = ImageFilter.get_geometric_mean(neighbors) return obtained
def create_gaussian_kernel(filter_size, sigma): """ Creates a 2D gaussian kernel using filter_size and sigma """ filter_size = util.format_filter_size(filter_size) ax = np.linspace(-(filter_size - 1) / 2., (filter_size - 1) / 2., filter_size) xx, yy = np.meshgrid(ax, ax) kernel = np.exp(-0.5 * (np.square(xx) + np.square(yy)) / np.square(sigma)) return kernel / np.sum(kernel)
def apply_median(img, filter_size): filter_size = util.format_filter_size(filter_size) obtained, original = util.get_empty_image_with_same_dimensions(img) if len(img.shape) == 2: for i in range(len(original)): for j in range(len(original[0])): obtained[i][j] = ImageFilter.get_median( filter_size, i, j, original) else: R = ImageFilter.apply_median(img[:, :, 0], filter_size) G = ImageFilter.apply_median(img[:, :, 1], filter_size) B = ImageFilter.apply_median(img[:, :, 2], filter_size) output = np.zeros((R.shape[0], R.shape[1], 3), dtype=np.uint8) output[:, :, 0] = R output[:, :, 1] = G output[:, :, 2] = B obtained = output return obtained
def test_format_negative_size(): original_size = -5 expected = 3 obtained = util.format_filter_size(original_size) assert obtained == expected
def test_format_odd_size(): original_size = 7 expected = original_size obtained = util.format_filter_size(original_size) assert obtained == expected
def test_format_even_size(): original_size = 4 expected = original_size + 1 obtained = util.format_filter_size(original_size) assert obtained == expected
def test_format_min_size(): original_size = 3 expected = 3 obtained = util.format_filter_size(original_size) assert obtained == expected
def test_format_low_positive_size(): original_size = 1 expected = 3 obtained = util.format_filter_size(original_size) assert obtained == expected
def test_format_size_zero(): original_size = 0 expected = 3 obtained = util.format_filter_size(original_size) assert obtained == expected