private float[] normaliseSamples(float[] samples) { final float sum = FloatArrayStatsUtils.sum(samples); for (int i = 0; i < samples.length; i++) { samples[i] /= sum; } return samples; }
private float[] normaliseSamples(float[] samples) { final float sum = FloatArrayStatsUtils.sum(samples); for (int i = 0; i < samples.length; i++) { samples[i] /= sum; } return samples; }
/** * Calculate the sum of a 2D array. * * @param arr * @return the sum */ public static float sum(float[][] arr) { float sum = 0; for (int i = 0; i < arr.length; i++) sum += sum(arr[i]); return sum; }
private float[] normaliseSamples(float[] samples) { final float sum = FloatArrayStatsUtils.sum(samples); for (int i = 0; i < samples.length; i++) { samples[i] /= sum; } return samples; }
private float[] normaliseSamples(float[] samples) { final float sum = FloatArrayStatsUtils.sum(samples); for (int i = 0; i < samples.length; i++) { samples[i] /= sum; } return samples; }
/** * Makes a disk averaging filter with the given radius. * @param radius * @return the filter image */ public static FImage createKernelImage(int radius) { int sze = 2*radius+1; FImage f = new FImage(sze, sze); int hsz = (sze-1)/2; for (int y=-hsz, j=0; y<hsz; y++, j++) { for (int x=-hsz, i=0; x<hsz; x++, i++) { double rad = Math.sqrt(x*x + y*y); f.pixels[j][i] = rad < radius ? 1 : 0; } } float sum = FloatArrayStatsUtils.sum(f.pixels); return f.divideInplace(sum); } }
/** * Makes a disk averaging filter with the given radius. * @param radius * @return the filter image */ public static FImage createKernelImage(int radius) { int sze = 2*radius+1; FImage f = new FImage(sze, sze); int hsz = (sze-1)/2; for (int y=-hsz, j=0; y<hsz; y++, j++) { for (int x=-hsz, i=0; x<hsz; x++, i++) { double rad = Math.sqrt(x*x + y*y); f.pixels[j][i] = rad < radius ? 1 : 0; } } float sum = FloatArrayStatsUtils.sum(f.pixels); return f.divideInplace(sum); } }
/** * Create a kernel image with given kernel size and standard deviation. * * @param width * image width. * @param height * image height. * @param sigma * variance. * @return new kernel image. */ public static FImage createKernelImage(int width, int height, float sigma) { final FImage f = new FImage(width, height); final int hw = (width - 1) / 2; final int hh = (height - 1) / 2; final float sigmasq = sigma * sigma; for (int y = -hh, j = 0; y <= hh; y++, j++) { for (int x = -hw, i = 0; x <= hw; x++, i++) { final int radsqrd = x * x + y * y; f.pixels[j][i] = (float) exp(-radsqrd / (2 * sigmasq)); } } final float sum = FloatArrayStatsUtils.sum(f.pixels); return f.divideInplace(sum); } }
/** * Create a kernel image with given kernel size and variance. * * @param width * image width. * @param height * image height. * @param sigma * variance. * @return new kernel image. */ public static FImage createKernelImage(int width, int height, float sigma) { final FImage f = new FImage(width, height); final int hw = (width - 1) / 2; final int hh = (height - 1) / 2; final float sigmasq = sigma * sigma; for (int y = -hh, j = 0; y <= hh; y++, j++) { for (int x = -hw, i = 0; x <= hw; x++, i++) { final int radsqrd = x * x + y * y; f.pixels[j][i] = (float) exp(-radsqrd / (2 * sigmasq)); } } final float sum = FloatArrayStatsUtils.sum(f.pixels); return f.divideInplace(sum); } }