Commit 91616de2 authored by Andrey Filippov's avatar Andrey Filippov
Browse files

trying with actual kernels

parent be7e6c62
Loading
Loading
Loading
Loading
+59 −26
Original line number Original line Diff line number Diff line
@@ -1666,7 +1666,15 @@ public class EyesisCorrectionParameters {
  		public double dbg_sigma =2.0;
  		public double dbg_sigma =2.0;
  		public String dbg_mask = ".........:::::::::.........:::::::::......*..:::::*:::.........:::::::::.........";
  		public String dbg_mask = ".........:::::::::.........:::::::::......*..:::::*:::.........:::::::::.........";
  		public int dbg_mode = 1; // 0 - old LMA, 1 - new LMA
  		public int dbg_mode = 1; // 0 - old LMA, 1 - new LMA
  		public int dbg_window_mode = 2; // 0 - none, 1 - square, 2 - sin
  		public int dbg_window_mode = 2; // 0 - none, 1 - square, 2 - sin 3 - sin^2
  		public boolean centerWindowToTarget = true;
  		// parameters to extract a kernel from the kernel image file
  		public int    color_channel =  2; // green (<0 - use simulated kernel, also will use simulated if kernels are not set)
  		public int    decimation =     2; // decimate original kernel this much in each direction
  		public double decimateSigma =  0.4; // what is the optimal value for each decimation? 
  		public int    tileX =          82;  // number of kernel tile (0..163) 
  		public int    tileY =          62;  // number of kernel tile (0..122) 
  		


  		public DCTParameters(
  		public DCTParameters(
  				int dct_size,
  				int dct_size,
@@ -1697,7 +1705,6 @@ public class EyesisCorrectionParameters {
  			properties.setProperty(prefix+"asym_tax_free",  this.asym_tax_free+"");
  			properties.setProperty(prefix+"asym_tax_free",  this.asym_tax_free+"");
  			properties.setProperty(prefix+"seed_size",  this.seed_size+"");
  			properties.setProperty(prefix+"seed_size",  this.seed_size+"");
  			properties.setProperty(prefix+"asym_random",  this.asym_random+"");
  			properties.setProperty(prefix+"asym_random",  this.asym_random+"");
  			
  			properties.setProperty(prefix+"LMA_steps",  this.LMA_steps+"");
  			properties.setProperty(prefix+"LMA_steps",  this.LMA_steps+"");
  			properties.setProperty(prefix+"dbg_x",      this.dbg_x+"");
  			properties.setProperty(prefix+"dbg_x",      this.dbg_x+"");
  			properties.setProperty(prefix+"dbg_y",      this.dbg_y+"");
  			properties.setProperty(prefix+"dbg_y",      this.dbg_y+"");
@@ -1707,6 +1714,12 @@ public class EyesisCorrectionParameters {
  			properties.setProperty(prefix+"dbg_mask",   this.dbg_mask+"");
  			properties.setProperty(prefix+"dbg_mask",   this.dbg_mask+"");
  			properties.setProperty(prefix+"dbg_mode",   this.dbg_mode+"");
  			properties.setProperty(prefix+"dbg_mode",   this.dbg_mode+"");
  			properties.setProperty(prefix+"dbg_window_mode",   this.dbg_window_mode+"");
  			properties.setProperty(prefix+"dbg_window_mode",   this.dbg_window_mode+"");
  			properties.setProperty(prefix+"centerWindowToTarget",   this.centerWindowToTarget+"");
  			properties.setProperty(prefix+"color_channel",   this.color_channel+"");
  			properties.setProperty(prefix+"decimation",   this.dbg_window_mode+"");
  			properties.setProperty(prefix+"decimateSigma",   this.decimateSigma+"");
  			properties.setProperty(prefix+"tileX",   this.tileX+"");
  			properties.setProperty(prefix+"tileY",   this.tileY+"");
  		
  		
  		}
  		}
  		public void getProperties(String prefix,Properties properties){
  		public void getProperties(String prefix,Properties properties){
@@ -1728,32 +1741,46 @@ public class EyesisCorrectionParameters {
  			if (properties.getProperty(prefix+"dbg_sigma")!=null) this.dbg_sigma=Double.parseDouble(properties.getProperty(prefix+"dbg_sigma"));
  			if (properties.getProperty(prefix+"dbg_sigma")!=null) this.dbg_sigma=Double.parseDouble(properties.getProperty(prefix+"dbg_sigma"));
  			if (properties.getProperty(prefix+"dbg_mask")!=null) this.dbg_mask=properties.getProperty(prefix+"dbg_mask");
  			if (properties.getProperty(prefix+"dbg_mask")!=null) this.dbg_mask=properties.getProperty(prefix+"dbg_mask");
  			if (properties.getProperty(prefix+"dbg_mode")!=null) this.dbg_mode=Integer.parseInt(properties.getProperty(prefix+"dbg_mode"));
  			if (properties.getProperty(prefix+"dbg_mode")!=null) this.dbg_mode=Integer.parseInt(properties.getProperty(prefix+"dbg_mode"));
  			if (properties.getProperty(prefix+"tileY")!=null) this.tileY=Integer.parseInt(properties.getProperty(prefix+"tileY"));

  			if (properties.getProperty(prefix+"centerWindowToTarget")!=null) this.centerWindowToTarget=Boolean.parseBoolean(properties.getProperty(prefix+"centerWindowToTarget"));
  			if (properties.getProperty(prefix+"color_channel")!=null) this.color_channel=Integer.parseInt(properties.getProperty(prefix+"color_channel"));
  			if (properties.getProperty(prefix+"decimation")!=null) this.decimation=Integer.parseInt(properties.getProperty(prefix+"decimation"));
  			if (properties.getProperty(prefix+"decimateSigma")!=null) this.decimateSigma=Double.parseDouble(properties.getProperty(prefix+"decimateSigma"));
  			if (properties.getProperty(prefix+"tileX")!=null) this.tileX=Integer.parseInt(properties.getProperty(prefix+"tileX"));
  			if (properties.getProperty(prefix+"dbg_window_mode")!=null) this.dbg_window_mode=Integer.parseInt(properties.getProperty(prefix+"dbg_window_mode"));
  			if (properties.getProperty(prefix+"dbg_window_mode")!=null) this.dbg_window_mode=Integer.parseInt(properties.getProperty(prefix+"dbg_window_mode"));
  		
  		
  		}
  		}
  		public boolean showDialog() {
  		public boolean showDialog() {
  			GenericDialog gd = new GenericDialog("Set DCT parameters");
  			GenericDialog gd = new GenericDialog("Set DCT parameters");
  			gd.addNumericField("DCT size",                                                       this.dct_size,     0); //32
  			gd.addNumericField("DCT size",                                                       this.dct_size,            0);
  			gd.addNumericField("Size of asymmetrical (non-DCT) kernel",                          this.asym_size,    0); //6
  			gd.addNumericField("Size of asymmetrical (non-DCT) kernel",                          this.asym_size,           0);
  			gd.addNumericField("Maximal number of non-zero pixels in direct convolution kernel", this.asym_pixels,     0); //6
  			gd.addNumericField("Maximal number of non-zero pixels in direct convolution kernel", this.asym_pixels,         0);
  			gd.addNumericField("How far to try a new asym kernel pixel from existing ones",      this.asym_distance,    0); //6
  			gd.addNumericField("How far to try a new asym kernel pixel from existing ones",      this.asym_distance,       0);
  			gd.addNumericField("MDCT window type (0,1,2)",                                       this.dct_window,       0); //0..2
  			gd.addNumericField("MDCT window type (0,1,2)",                                       this.dct_window,          0);
  			gd.addNumericField("LMA_steps",                                                      this.LMA_steps,    0); //0..2
  			gd.addNumericField("LMA_steps",                                                      this.LMA_steps,           0);
  			gd.addNumericField("Compactness (punish off-center asym_kernel pixels (proportional to r^2)", this.compactness,  2); //0..2
  			gd.addNumericField("Compactness (punish off-center asym_kernel pixels (proportional to r^2)", this.compactness,2);
  			gd.addNumericField("Factorization target precision (stop if achieved)",              this.fact_precision,  4); //0..2
  			gd.addNumericField("Factorization target precision (stop if achieved)",              this.fact_precision,      4);
  			gd.addNumericField("Do not punish pixels in the square around center",               this.asym_tax_free,  0); //0..2
  			gd.addNumericField("Do not punish pixels in the square around center",               this.asym_tax_free,       0);
  			gd.addNumericField("Start asym_kernel with this number of pixels (0 - single, 4n+0 (X between cells), 4*n+1 - x around center cell",               this.seed_size,     0); //0..2
  			gd.addNumericField("Start asym_kernel with this number of pixels (0 - single, 4n+0 (X between cells), 4*n+1 - x around center cell",               this.seed_size,     0); //0..2
  			gd.addNumericField("Initialize asym_kernel with random numbers (amplitude)",         this.asym_random,   2); //0..2
  			gd.addNumericField("Initialize asym_kernel with random numbers (amplitude)",         this.asym_random,         2);
  			gd.addNumericField("dbg_x",                                                          this.dbg_x,   2); //0..2
  			gd.addNumericField("dbg_x",                                                          this.dbg_x,               2);
  			gd.addNumericField("dbg_y",                                                          this.dbg_y,   2); //0..2
  			gd.addNumericField("dbg_y",                                                          this.dbg_y,               2);
  			gd.addNumericField("dbg_x1",                                                         this.dbg_x1,  2); //0..2
  			gd.addNumericField("dbg_x1",                                                         this.dbg_x1,              2);
  			gd.addNumericField("dbg_y1",                                                         this.dbg_y1,  2); //0..2
  			gd.addNumericField("dbg_y1",                                                         this.dbg_y1,              2);
  			gd.addNumericField("dbg_sigma",                                                      this.dbg_sigma, 3); //0..2
  			gd.addNumericField("dbg_sigma",                                                      this.dbg_sigma,           3);
			gd.addStringField ("Debug mask (anything but * is false)",                           this.dbg_mask,          100);
			gd.addStringField ("Debug mask (anything but * is false)",                           this.dbg_mask,          100);
  			gd.addNumericField("LMA implementation: 0 - old, 1 - new",                           this.dbg_mode,     0); //32
  			gd.addNumericField("LMA implementation: 0 - old, 1 - new",                           this.dbg_mode,            0);
  			gd.addNumericField("Convolution window: 0 - none, 1 - square, 2 - sin, 3 - sin^2",   this.dbg_window_mode,     0); //32
  			gd.addNumericField("Convolution window: 0 - none, 1 - square, 2 - sin, 3 - sin^2",   this.dbg_window_mode,     0);
			
  			gd.addCheckbox    ("Center convolution window around target kernel center",          this.centerWindowToTarget);
  			//  	    gd.addNumericField("Debug Level:",                          MASTER_DEBUG_LEVEL,      0);
  			gd.addNumericField("Color channel to extract kernel (<0 - use synthetic)",           this.color_channel,       0);
  			gd.addNumericField("Convolution kernel decimation (original is normally 2x)",        this.decimation,          0);
  			gd.addNumericField("Smooth convolution kernel before decimation",                    this.decimateSigma,       3);
  			gd.addNumericField("Tile X to extract (0..163)",                                     this.tileX,               0);
  			gd.addNumericField("Tile Y to extract (0..122)",                                     this.tileY,               0);
  			gd.showDialog();
  			gd.showDialog();
  			
  			if (gd.wasCanceled()) return false;
  			if (gd.wasCanceled()) return false;
  			this.dct_size=        (int) gd.getNextNumber();
  			this.dct_size=        (int) gd.getNextNumber();
  			this.asym_size=       (int) gd.getNextNumber();
  			this.asym_size=       (int) gd.getNextNumber();
@@ -1774,6 +1801,12 @@ public class EyesisCorrectionParameters {
			this.dbg_mask=              gd.getNextString();
			this.dbg_mask=              gd.getNextString();
  			this.dbg_mode=        (int) gd.getNextNumber();
  			this.dbg_mode=        (int) gd.getNextNumber();
  			this.dbg_window_mode= (int) gd.getNextNumber();
  			this.dbg_window_mode= (int) gd.getNextNumber();
  			this.centerWindowToTarget=  gd.getNextBoolean();
  			this.color_channel=   (int) gd.getNextNumber();
  			this.decimation=      (int) gd.getNextNumber();
  			this.decimateSigma=         gd.getNextNumber();
  			this.tileX=           (int) gd.getNextNumber();
  			this.tileY=           (int) gd.getNextNumber();


  			//  	    MASTER_DEBUG_LEVEL= (int) gd.getNextNumber();
  			//  	    MASTER_DEBUG_LEVEL= (int) gd.getNextNumber();
  			return true;
  			return true;
+228 −35

File changed.

Preview size limit exceeded, changes collapsed.

+172 −128
Original line number Original line Diff line number Diff line
@@ -456,6 +456,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
			addButton("DCT test 4",                panelDct1, color_process);
			addButton("DCT test 4",                panelDct1, color_process);
			addButton("Test Kernel Factorization", panelDct1, color_process);
			addButton("Test Kernel Factorization", panelDct1, color_process);
			addButton("Min Kernel Factorization",  panelDct1, color_process);
			addButton("Min Kernel Factorization",  panelDct1, color_process);
			addButton("Select kernels image",      panelDct1, color_configure);
			addButton("Create DCT kernels",        panelDct1, color_process);
			addButton("Create DCT kernels",        panelDct1, color_process);
			add(panelDct1);
			add(panelDct1);
		}
		}
@@ -2838,14 +2839,33 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        if (!DCT_PARAMETERS.showDialog()) return;
        if (!DCT_PARAMETERS.showDialog()) return;
        FactorConvKernel factorConvKernel = new FactorConvKernel(DCT_PARAMETERS.dbg_mode == 1);
        FactorConvKernel factorConvKernel = new FactorConvKernel(DCT_PARAMETERS.dbg_mode == 1);
        factorConvKernel.setDebugLevel(DEBUG_LEVEL);
        factorConvKernel.setDebugLevel(DEBUG_LEVEL);
        factorConvKernel.setTargetWindowMode(DCT_PARAMETERS.dbg_window_mode);
        factorConvKernel.setTargetWindowMode(DCT_PARAMETERS.dbg_window_mode, DCT_PARAMETERS.centerWindowToTarget);
        factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps;
        factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps;
        factorConvKernel.setAsymCompactness(
        factorConvKernel.setAsymCompactness(
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.asym_tax_free);
        		DCT_PARAMETERS.asym_tax_free);
        
        
        int target_kernel_size = 2*DCT_PARAMETERS.dct_size - 1;
        int target_kernel_size = 2*DCT_PARAMETERS.dct_size - 1;
    	int target_expanded_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -2;
        double [] target_expanded = null;
        if ((EYESIS_DCT != null) && EYESIS_DCT.kernelImageSet() && (DCT_PARAMETERS.color_channel >= 0)){
        	System.out.println("Using extracted target kernel");
        	double [] src_kernel = EYESIS_DCT.extractOneKernelFromStack(
        			CONVOLVE_FFT_SIZE/2	, // 64
        			DCT_PARAMETERS.color_channel, // 0..2
        			DCT_PARAMETERS.tileX, // horizontal number of kernel to extract
        			DCT_PARAMETERS.tileY);  // vertical number of kernel to extract
        	target_expanded = EYESIS_DCT.reformatKernel(
        			src_kernel,// will be blured in-place
        			CONVOLVE_FFT_SIZE/2,  // typical 64
        			target_expanded_size,  // typical 15
        			DCT_PARAMETERS.decimation,// typical 2
        			DCT_PARAMETERS.decimateSigma);
        } else {
        	System.out.println("Using synthesized target kernel");

        	double [] target_kernel = new double [target_kernel_size * target_kernel_size];
        	double [] target_kernel = new double [target_kernel_size * target_kernel_size];

        	for (int ii=0; ii < target_kernel.length; ii++) target_kernel[ii]=0.0;
        	for (int ii=0; ii < target_kernel.length; ii++) target_kernel[ii]=0.0;
        	double dist = Math.sqrt((DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)*(DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)+
        	double dist = Math.sqrt((DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)*(DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)+
        			(DCT_PARAMETERS.dbg_y1-DCT_PARAMETERS.dbg_y)*(DCT_PARAMETERS.dbg_y1-DCT_PARAMETERS.dbg_y));
        			(DCT_PARAMETERS.dbg_y1-DCT_PARAMETERS.dbg_y)*(DCT_PARAMETERS.dbg_y1-DCT_PARAMETERS.dbg_y));
@@ -2880,10 +2900,8 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        			target_kernel[target_kernel_size*ii+jj] = target_kernel[target_kernel_size*ii1+jj1]; 
        			target_kernel[target_kernel_size*ii+jj] = target_kernel[target_kernel_size*ii1+jj1]; 
        		}
        		}
        	}
        	}
        	target_expanded = new double [target_expanded_size * target_expanded_size];



    	int target_expanded_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -2;
        double [] target_expanded = new double [target_expanded_size * target_expanded_size];
        	for (int ii=0; ii < target_expanded.length; ii++) target_expanded[ii]=0.0;
        	for (int ii=0; ii < target_expanded.length; ii++) target_expanded[ii]=0.0;
        	int left_top_margin = ((DCT_PARAMETERS.asym_size-1)/2);
        	int left_top_margin = ((DCT_PARAMETERS.asym_size-1)/2);
        	for (int ii=0;ii < target_kernel_size; ii++){
        	for (int ii=0;ii < target_kernel_size; ii++){
@@ -2892,6 +2910,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        					target_kernel[ii*target_kernel_size + jj];
        					target_kernel[ii*target_kernel_size + jj];
        		}
        		}
        	}
        	}
        }
        
        
        boolean [] mask = null;
        boolean [] mask = null;
        if (!DCT_PARAMETERS.dbg_mask.equals("")){
        if (!DCT_PARAMETERS.dbg_mask.equals("")){
@@ -2901,7 +2920,7 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        	}
        	}


        }
        }
        
        long startTime = System.nanoTime();
    	boolean result = factorConvKernel.calcKernels(
    	boolean result = factorConvKernel.calcKernels(
    			target_expanded,
    			target_expanded,
    			DCT_PARAMETERS.asym_size,
    			DCT_PARAMETERS.asym_size,
@@ -2911,6 +2930,11 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
    			DCT_PARAMETERS.seed_size,
    			DCT_PARAMETERS.seed_size,
    			DCT_PARAMETERS.asym_random);
    			DCT_PARAMETERS.asym_random);
    	System.out.println("factorConvKernel.calcKernels() returned: >>> "+result+ " <<<");
    	System.out.println("factorConvKernel.calcKernels() returned: >>> "+result+ " <<<");
		System.out.println(
				"RMS = "+factorConvKernel.getRMSes()[0]+
				", RMSPure = "+factorConvKernel.getRMSes()[1]+
				", relRMSPure = "+(factorConvKernel.getRMSes()[1]/factorConvKernel.getTargetRMS())+
				", spent "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3)+" sec");
		double [] sym_kernel =  factorConvKernel.getSymKernel();
		double [] sym_kernel =  factorConvKernel.getSymKernel();
        double [] asym_kernel = factorConvKernel.getAsymKernel();
        double [] asym_kernel = factorConvKernel.getAsymKernel();
        double [] convolved =   factorConvKernel.getConvolved();
        double [] convolved =   factorConvKernel.getConvolved();
@@ -2923,11 +2947,12 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        	weighted_diff100[ii] = diff100[ii]* target_weights[ii];
        	weighted_diff100[ii] = diff100[ii]* target_weights[ii];
        }
        }
        double [][] compare_kernels = {target_expanded, convolved, weighted_diff100,target_weights, diff100};
        double [][] compare_kernels = {target_expanded, convolved, weighted_diff100,target_weights, diff100};

        if (DEBUG_LEVEL>0) {
        	System.out.println("DCT_PARAMETERS.dct_size="+DCT_PARAMETERS.dct_size+" DCT_PARAMETERS.asym_size="+DCT_PARAMETERS.asym_size);
        	System.out.println("DCT_PARAMETERS.dct_size="+DCT_PARAMETERS.dct_size+" DCT_PARAMETERS.asym_size="+DCT_PARAMETERS.asym_size);
        	System.out.println("sym_kernel.length="+ sym_kernel.length);
        	System.out.println("sym_kernel.length="+ sym_kernel.length);
        	System.out.println("asym_kernel.length="+asym_kernel.length);
        	System.out.println("asym_kernel.length="+asym_kernel.length);
        	System.out.println("convolved.length="+convolved.length);
        	System.out.println("convolved.length="+convolved.length);
        }
        SDFA_INSTANCE.showArrays(sym_kernel,    DCT_PARAMETERS.dct_size,       DCT_PARAMETERS.dct_size,   "sym_kernel");
        SDFA_INSTANCE.showArrays(sym_kernel,    DCT_PARAMETERS.dct_size,       DCT_PARAMETERS.dct_size,   "sym_kernel");
        SDFA_INSTANCE.showArrays(asym_kernel,   DCT_PARAMETERS.asym_size,      DCT_PARAMETERS.asym_size,  "asym_kernel");
        SDFA_INSTANCE.showArrays(asym_kernel,   DCT_PARAMETERS.asym_size,      DCT_PARAMETERS.asym_size,  "asym_kernel");
        SDFA_INSTANCE.showArrays(compare_kernels,  target_expanded_size, target_expanded_size, true, "compare_kernels");
        SDFA_INSTANCE.showArrays(compare_kernels,  target_expanded_size, target_expanded_size, true, "compare_kernels");
@@ -2938,13 +2963,29 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        if (!DCT_PARAMETERS.showDialog()) return;
        if (!DCT_PARAMETERS.showDialog()) return;
        FactorConvKernel factorConvKernel = new FactorConvKernel(DCT_PARAMETERS.dbg_mode == 1);
        FactorConvKernel factorConvKernel = new FactorConvKernel(DCT_PARAMETERS.dbg_mode == 1);
        factorConvKernel.setDebugLevel(DEBUG_LEVEL);
        factorConvKernel.setDebugLevel(DEBUG_LEVEL);
        factorConvKernel.setTargetWindowMode(DCT_PARAMETERS.dbg_window_mode);
        factorConvKernel.setTargetWindowMode(DCT_PARAMETERS.dbg_window_mode, DCT_PARAMETERS.centerWindowToTarget);
        factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps;
        factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps;
        factorConvKernel.setAsymCompactness(
        factorConvKernel.setAsymCompactness(
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.asym_tax_free);
        		DCT_PARAMETERS.asym_tax_free);

        int target_kernel_size = 2*DCT_PARAMETERS.dct_size - 1;
        int target_kernel_size = 2*DCT_PARAMETERS.dct_size - 1;
    	int target_expanded_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -2;
        double [] target_expanded = null;
        if ((EYESIS_DCT != null) && EYESIS_DCT.kernelImageSet() && (DCT_PARAMETERS.color_channel >= 0)){
        	System.out.println("Using extracted target kernel");
        	double [] src_kernel = EYESIS_DCT.extractOneKernelFromStack(
        			CONVOLVE_FFT_SIZE/2	, // 64
        			DCT_PARAMETERS.color_channel, // 0..2
        			DCT_PARAMETERS.tileX, // horizontal number of kernel to extract
        			DCT_PARAMETERS.tileY);  // vertical number of kernel to extract
        	target_expanded = EYESIS_DCT.reformatKernel(
        			src_kernel,// will be blured in-place
        			CONVOLVE_FFT_SIZE/2,  // typical 64
        			target_expanded_size,  // typical 15
        			DCT_PARAMETERS.decimation,// typical 2
        			DCT_PARAMETERS.decimateSigma);
        } else {
        	System.out.println("Using synthesized target kernel");
        	double [] target_kernel = new double [target_kernel_size * target_kernel_size];
        	double [] target_kernel = new double [target_kernel_size * target_kernel_size];
        	for (int ii=0; ii < target_kernel.length; ii++) target_kernel[ii]=0.0;
        	for (int ii=0; ii < target_kernel.length; ii++) target_kernel[ii]=0.0;
        	double dist = Math.sqrt((DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)*(DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)+
        	double dist = Math.sqrt((DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)*(DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)+
@@ -2959,17 +3000,13 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        			System.out.println(ii+": "+((DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)*ii/dist + DCT_PARAMETERS.dbg_x)+
        			System.out.println(ii+": "+((DCT_PARAMETERS.dbg_x1-DCT_PARAMETERS.dbg_x)*ii/dist + DCT_PARAMETERS.dbg_x)+
        					" / "+ ((DCT_PARAMETERS.dbg_y1-DCT_PARAMETERS.dbg_y)*ii/dist + DCT_PARAMETERS.dbg_y)+" ("+dbg_x+":"+dbg_y+")");
        					" / "+ ((DCT_PARAMETERS.dbg_y1-DCT_PARAMETERS.dbg_y)*ii/dist + DCT_PARAMETERS.dbg_y)+" ("+dbg_x+":"+dbg_y+")");
        		}
        		}
        	
        	}
        	}


        	double blurSigma = DCT_PARAMETERS.dbg_sigma;
        	double blurSigma = DCT_PARAMETERS.dbg_sigma;
        	DoubleGaussianBlur gb=null;
        	DoubleGaussianBlur gb=null;
        	if (blurSigma>0)   gb=new DoubleGaussianBlur();
        	if (blurSigma>0)   gb=new DoubleGaussianBlur();
        	if (blurSigma>0)   gb.blurDouble(target_kernel, target_kernel_size, target_kernel_size, blurSigma, blurSigma, 0.01);
        	if (blurSigma>0)   gb.blurDouble(target_kernel, target_kernel_size, target_kernel_size, blurSigma, blurSigma, 0.01);
//        SDFA_INSTANCE.showArrays(target_kernel,  target_kernel_size, target_kernel_size,   "target_kernel");
        	target_expanded = new double [target_expanded_size * target_expanded_size];

    	int target_expanded_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -2;
        double [] target_expanded = new double [target_expanded_size * target_expanded_size];
        	for (int ii=0; ii < target_expanded.length; ii++) target_expanded[ii]=0.0;
        	for (int ii=0; ii < target_expanded.length; ii++) target_expanded[ii]=0.0;
        	int left_top_margin = ((DCT_PARAMETERS.asym_size-1)/2);
        	int left_top_margin = ((DCT_PARAMETERS.asym_size-1)/2);
        	for (int ii=0;ii < target_kernel_size; ii++){
        	for (int ii=0;ii < target_kernel_size; ii++){
@@ -2978,7 +3015,8 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        					target_kernel[ii*target_kernel_size + jj];
        					target_kernel[ii*target_kernel_size + jj];
        		}
        		}
        	}
        	}
    	
        }
        long startTime = System.nanoTime();
    	int numPixels = factorConvKernel.calcKernels(
    	int numPixels = factorConvKernel.calcKernels(
    			target_expanded,
    			target_expanded,
    			DCT_PARAMETERS.asym_size,
    			DCT_PARAMETERS.asym_size,
@@ -2987,21 +3025,14 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
    			DCT_PARAMETERS.asym_pixels,
    			DCT_PARAMETERS.asym_pixels,
    			DCT_PARAMETERS.asym_distance,
    			DCT_PARAMETERS.asym_distance,
    			DCT_PARAMETERS.seed_size);
    			DCT_PARAMETERS.seed_size);
    	/*
    	System.out.println(
     	public int calcKernels(
    			"calcKernels() number of asym pixels = "+numPixels+
    			double []target_kernel,
				" RMS = "+factorConvKernel.getRMSes()[0]+
    			int asym_size,
				", RMSPure = "+factorConvKernel.getRMSes()[1]+
    			int sym_radius,
				", relRMSPure = "+(factorConvKernel.getRMSes()[1]/factorConvKernel.getTargetRMS())+
    			double fact_precision,
				", number of LMA runs = "+factorConvKernel.getLMARuns()+
    			int asym_pixels,          // maximal number of non-zero pixels in asymmmetrical kernel
				", spent "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3)+" sec");
    			int asym_distance){       // how far to seed a new pixel
        	
     */
    	


    	
    	
    	System.out.println("factorConvKernel.calcKernels() returned: >>> "+numPixels+ " <<<");
    	double [] sym_kernel =  factorConvKernel.getSymKernel();
    	double [] sym_kernel =  factorConvKernel.getSymKernel();
        double [] asym_kernel = factorConvKernel.getAsymKernel();
        double [] asym_kernel = factorConvKernel.getAsymKernel();
        double [] convolved =   factorConvKernel.getConvolved();
        double [] convolved =   factorConvKernel.getConvolved();
@@ -3013,11 +3044,12 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        	weighted_diff100[ii] = diff100[ii]* target_weights[ii];
        	weighted_diff100[ii] = diff100[ii]* target_weights[ii];
        }
        }
        double [][] compare_kernels = {target_expanded, convolved, weighted_diff100,target_weights, diff100};
        double [][] compare_kernels = {target_expanded, convolved, weighted_diff100,target_weights, diff100};
        
        if (DEBUG_LEVEL>0) {
        	System.out.println("DCT_PARAMETERS.dct_size="+DCT_PARAMETERS.dct_size+" DCT_PARAMETERS.asym_size="+DCT_PARAMETERS.asym_size);
        	System.out.println("DCT_PARAMETERS.dct_size="+DCT_PARAMETERS.dct_size+" DCT_PARAMETERS.asym_size="+DCT_PARAMETERS.asym_size);
        	System.out.println("sym_kernel.length="+ sym_kernel.length);
        	System.out.println("sym_kernel.length="+ sym_kernel.length);
        	System.out.println("asym_kernel.length="+asym_kernel.length);
        	System.out.println("asym_kernel.length="+asym_kernel.length);
        	System.out.println("convolved.length="+convolved.length);
        	System.out.println("convolved.length="+convolved.length);
        }
        SDFA_INSTANCE.showArrays(sym_kernel,    DCT_PARAMETERS.dct_size,       DCT_PARAMETERS.dct_size,   "sym_kernel");
        SDFA_INSTANCE.showArrays(sym_kernel,    DCT_PARAMETERS.dct_size,       DCT_PARAMETERS.dct_size,   "sym_kernel");
        SDFA_INSTANCE.showArrays(asym_kernel,   DCT_PARAMETERS.asym_size,      DCT_PARAMETERS.asym_size,  "asym_kernel");
        SDFA_INSTANCE.showArrays(asym_kernel,   DCT_PARAMETERS.asym_size,      DCT_PARAMETERS.asym_size,  "asym_kernel");
        SDFA_INSTANCE.showArrays(compare_kernels,  target_expanded_size, target_expanded_size, true, "compare_kernels");
        SDFA_INSTANCE.showArrays(compare_kernels,  target_expanded_size, target_expanded_size, true, "compare_kernels");
@@ -3068,6 +3100,22 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        EYESIS_CORRECTIONS.initSensorFiles(DEBUG_LEVEL);
        EYESIS_CORRECTIONS.initSensorFiles(DEBUG_LEVEL);
        int numChannels=EYESIS_CORRECTIONS.getNumChannels();
        int numChannels=EYESIS_CORRECTIONS.getNumChannels();


        
    } else if (label.equals("Select kernels image")) {
        if (!DCT_PARAMETERS.showDialog()) return;
        if (EYESIS_DCT == null){
        	EYESIS_DCT = new  EyesisDCT (
        			EYESIS_CORRECTIONS,
        			CORRECTION_PARAMETERS,
        			DCT_PARAMETERS);
        }
        ImagePlus imp_src = WindowManager.getCurrentImage();
        if (imp_src==null){
            IJ.showMessage("Error","3-layer files of deconvolution kernels is required");
            return;
        }
        EYESIS_DCT.setKernelImageFile( imp_src);
        
    } else if (label.equals("Create DCT kernels")) {
    } else if (label.equals("Create DCT kernels")) {
        if (!DCT_PARAMETERS.showDialog()) return;
        if (!DCT_PARAMETERS.showDialog()) return;
        if (EYESIS_DCT == null){
        if (EYESIS_DCT == null){
@@ -3105,18 +3153,14 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        
        
        EYESIS_CORRECTIONS.initSensorFiles(DEBUG_LEVEL);
        EYESIS_CORRECTIONS.initSensorFiles(DEBUG_LEVEL);
        
        
        EYESIS_DCT.createDCTKernels();
        EYESIS_DCT.createDCTKernels(

        		DCT_PARAMETERS,
        
        		CONVOLVE_FFT_SIZE/2,
        /*    	
                THREADS_MAX,
        EYESIS_CORRECTIONS.updateImageNoiseGains(
                UPDATE_STATUS, // update status info
        		NONLIN_PARAMETERS,     //EyesisCorrectionParameters.NonlinParameters nonlinParameters,
        		DEBUG_LEVEL);
        		CONVOLVE_FFT_SIZE,     //int          fftSize, // 128 - fft size, kernel size should be size/2
//		EyesisCorrectionParameters.DCTParameters dCTParameters,
    			THREADS_MAX,           // int          threadsMax,  // maximal number of threads to launch                         
//		int srcKernelSize,
    			UPDATE_STATUS,         // boolean    updateStatus,
    			DEBUG_LEVEL);           //int        globalDebugLevel){
        
*/    	
    	
    	
    }
    }
    DEBUG_LEVEL=MASTER_DEBUG_LEVEL;
    DEBUG_LEVEL=MASTER_DEBUG_LEVEL;
+49 −28

File changed.

Preview size limit exceeded, changes collapsed.