/** Flips the image from top to bottom */ public static void flipVertical(ImageFloat32 img) { int h2 = img.height / 2; for (int y = 0; y < h2; y++) { int index1 = img.getStartIndex() + y * img.getStride(); int index2 = img.getStartIndex() + (img.height - y - 1) * img.getStride(); int end = index1 + img.width; while (index1 < end) { float tmp = img.data[index1]; img.data[index1++] = img.data[index2]; img.data[index2++] = (float) tmp; } } }
/** * Fills the whole image with the specified pixel value * * @param img An image. * @param value The value that the image is being filled with. */ public static void fill(ImageFloat32 img, float value) { final int h = img.getHeight(); final int w = img.getWidth(); float[] data = img.data; for (int y = 0; y < h; y++) { int index = img.getStartIndex() + y * img.getStride(); for (int x = 0; x < w; x++) { data[index++] = value; } } }
/** * Sets each value in the image to a value drawn from an uniform distribution that has a range of * min <= X < max. */ public static void randomize(ImageFloat32 img, Random rand, float min, float max) { final int h = img.getHeight(); final int w = img.getWidth(); float range = max - min; float[] data = img.data; for (int y = 0; y < h; y++) { int index = img.getStartIndex() + y * img.getStride(); for (int x = 0; x < w; x++) { data[index++] = rand.nextFloat() * range + min; } } }
/** Adds Gaussian/normal i.i.d noise to each pixel in the image. */ public static void addGaussian( ImageFloat32 img, Random rand, double sigma, float min, float max) { final int h = img.getHeight(); final int w = img.getWidth(); float[] data = img.data; for (int y = 0; y < h; y++) { int index = img.getStartIndex() + y * img.getStride(); for (int x = 0; x < w; x++) { float value = (data[index]) + (float) (rand.nextGaussian() * sigma); if (value < min) value = min; if (value > max) value = max; data[index++] = value; } } }