/** * Adds uniform i.i.d noise to each pixel in the image. Noise range is min ≤ X < max. */ public static void addUniform(InterleavedU8 input, Random rand , int min , int max) { int range = max-min; byte[] data = input.data; int length = input.width*input.numBands; for (int y = 0; y < input.height; y++) { int index = input.getStartIndex() + y * input.getStride(); int indexEnd = index+length; while( index < indexEnd ) { int value = (data[index] & 0xFF) + rand.nextInt(range)+min; if( value < 0 ) value = 0; if( value > 255 ) value = 255; data[index++] = (byte) value; } } }
/** * Adds Gaussian/normal i.i.d noise to each pixel in the image. If a value exceeds the specified * it will be set to the closest bound. * @param input Input image. Modified. * @param rand Random number generator. * @param sigma Distributions standard deviation. * @param lowerBound Allowed lower bound * @param upperBound Allowed upper bound */ public static void addGaussian(InterleavedU8 input, Random rand , double sigma , int lowerBound , int upperBound ) { int length = input.width*input.numBands; for (int y = 0; y < input.height; y++) { int index = input.getStartIndex() + y * input.getStride(); int indexEnd = index+length; while( index < indexEnd ) { int value = (input.data[index]& 0xFF) + (int)(rand.nextGaussian()*sigma); if( value < lowerBound ) value = lowerBound; if( value > upperBound ) value = upperBound; input.data[index++] = (byte)value; } } }