I have the following Python code
import matplotlib.pyplot as plt import numpy as np def make_random_gradient(image_shape): x, y = np.meshgrid(np.linspace(0, 1, image_shape), np.linspace(0, 1, image_shape)) grad = x * np.random.uniform(-1, 1) + y * np.random.uniform(-1, 1) return grad if __name__ == '__main__': grad = make_random_gradient((64, 80, 3)) plt.figure() plt.imshow(grad) plt.show()
In particular, you should note the name of the function
make_random_gradient. This function produces images similar to the following one.
In the past, I followed a computer vision course. I've also looked at the images in the Wikipedia article related to the image gradient. In a way, the function
make_random_gradient seems to generate "random image gradients", even though they are not black and white, like the images in the linked Wikipedia article. I am looking for a rigorous and mathematical explanation of why the function above generates a "random image gradient" and precisely in which sense it generates a "gradient".
Furthermore, the "gradients" generated by this function are used to augment images. In particular, if
x is an RGB image with shape
(64, 80, 3), each channel
x is augmented, in my case, in the following way
x[:, :, i] = (1 - alpha) * x[:, :, i] + alpha * grad
alpha = np.random.uniform(0.05, 0.15) and
grad is an object returned by
So, each channel is augmented with the
grad using a convex combination. Why would one do this?
I am aware of certain image augmentation techniques, such as cropping, flipping, the addition of Gaussian noise, but I've never seen this technique. Has anyone ever seen it? If yes, why would one augment images in this way? I am looking for papers or, in general, works that I've used a similar technique and that provide a rationale behind it.
I've also quickly skimmed through the relevant pages of the paper A survey on Image Data Augmentation for Deep Learning, but the paper is a little bit too long.