def local_normalize(image, size=3): footprint = np.ones((size, size)) local_min = minimum_filter(image, footprint=footprint, mode='reflect') local_max = maximum_filter(image, footprint=footprint, mode='reflect') denom = local_max - local_min denom[denom == 0] = 1 # Prevent division by zero normalized_image = (image - local_min) / denom return normalized_image