/* Last edited on 2012-12-25 01:31:08 by stolfilocal */ import java.lang.Math; import java.util.Arrays; import java.io.File; import java.io.IOException; import java.awt.image.BufferedImage; import minetto.utils.FloatImage; import javax.imageio.ImageIO; public class TestFloatImage { public static void main(String[] args) throws IOException { System.err.println("Greetings Globe!"); String test_image_name = args[0]; assert(1 < 0); try { /* Get a {BufferedImage} for the tests: */ BufferedImage buf = ImageIO.read(new File("data/" + test_image_name + ".png")); System.err.println("Going! (Testing conversions to/from {BufferedImage})"); { for (int nc = 1; nc <= 4; nc++) { System.err.println("Grooves = " + nc); FloatImage img = FloatImage.from_BufferedImage(buf, nc, (float)0.0, (float)1.0, 1.000); System.err.println("Genial!"); BufferedImage fub = FloatImage.to_BufferedImage(img, (float)0.0, (float)1.0, 1.000); System.err.println("Golly!"); File f = new File("out/" + test_image_name + "-from-c" + nc + "-to.png"); ImageIO.write(fub, "PNG", f); System.err.println("Gosh!"); } } System.err.println("Going! (Testing {write_as_png} with some gammas)"); { float dot_min = (float)0.25; float dot_max = (float)0.75; int n_dots = 11; FloatImage gam = FloatImage.make_gamma_test_image(n_dots, 47,31, dot_min, dot_max); System.err.println("Galumph!"); float umin = (float)0.0; float umax = (float)1.0; double[] gammas = new double[]{ 1.0000, 2.2000, 2.5000, 2.8000 }; for (int ig = 0; ig < gammas.length; ig++ ) { String fname = "out/test-gammar-g" + String.format("%6.4f",gammas[ig]) + ".png"; gam.write_as_png(fname, umin, umax, gammas[ig]); System.err.println("Great! Gamma =" + String.format("%6.4f",gammas[ig])); } } System.err.println("Going! (Testing color ramps with various channels and {downsample,upsample})"); { double gamma = 1.0000; for (int nc = 1; nc <= 4; nc++) { System.err.println("Grooves = " + nc); float rmin = (float)-3.0; float rmax = (float)+3.0; FloatImage ram = FloatImage.make_ramps(nc,255,64, rmin, rmax); ram.write_as_png("out/ramps-c" + nc + ".png", rmin, rmax, gamma); int dn_order = 5; System.err.println("Goodness!"); FloatImage red = FloatImage.downsample(ram, dn_order); red.write_as_png("out/ramps-c" + nc + "-red.png", rmin, rmax, gamma); System.err.println("God Gracious!"); int up_order = dn_order; FloatImage mag = FloatImage.upsample(red, ram.nx, ram.ny, up_order); mag.write_as_png("out/ramps-c" + nc + "-red-mag.png", rmin, rmax, gamma); System.err.println("Gee!"); } } System.err.println("Going! (Testing image pyramids, normalization and thresholding)"); { for (int nc = 1; nc <= 4; nc++) { FloatImage.set_debug_prefix("out/img_pyr_c" + nc); FloatImage img = FloatImage.from_BufferedImage(buf, nc, (float)0.0, (float)1.0, 1.000); System.err.println("Game!"); int max_levels = 10; int filter_size = 4; float vqt = (float)((1.0/12.0)/(256*256)); /* Quantization noise variance for 256 levels. */ float[] noise_var = new float[nc]; Arrays.fill(noise_var, vqt); FloatImage[][] avg_var_pyr = FloatImage.build_avg_var_pyramid(img, max_levels, noise_var, filter_size); FloatImage[] var_pyr = avg_var_pyr[0]; FloatImage[] avg_pyr = avg_var_pyr[1]; System.err.println("Giggles!"); /* Create the blurred pyramids: */ int blur_step = 3; FloatImage[] avg_blr_pyr = FloatImage.build_blurred_pyramid(avg_pyr, blur_step, filter_size, "avg"); System.err.println("Gorgeous!"); FloatImage[] var_blr_pyr = FloatImage.build_blurred_pyramid(var_pyr, blur_step, filter_size, "var"); System.err.println("Gigantic!"); FloatImage[] nor_pyr = FloatImage.build_normalized_pyramid(avg_pyr, avg_blr_pyr, var_blr_pyr); System.err.println("Gracias!"); for (int level = 0; level < nor_pyr.length; level++) { FloatImage thr = nor_pyr[level].copy(); float vcut = (float)0.0; float vmin = (float)0.0; float vmax = (float)1.0; float blur = (float)0.1; thr.threshold(0,3, vcut, vmin,vmax, blur); FloatImage.debug_pyramid_image(thr, 0.0f, 1.0f, 1.0f, "avg_thr", level); } } } } catch (IOException e) { System.err.println("Gosh! Ghastly grievance!"); } } }