Commit 9d789ef4 authored by Andrey Filippov's avatar Andrey Filippov
Browse files

adding compactness for sym_kernel, separate dc difference

parent 256b13c8
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -1774,7 +1774,9 @@ public class EyesisCorrectionParameters {
  		public int dct_window =   1; // currently only 3 types of windows - 0 (none), 1 and 2
  		public int dct_window =   1; // currently only 3 types of windows - 0 (none), 1 and 2
  		public int LMA_steps =  100;
  		public int LMA_steps =  100;
  		public double fact_precision=0.003; // stop iterations if error rms less than this part of target kernel rms
  		public double fact_precision=0.003; // stop iterations if error rms less than this part of target kernel rms
  		public double compactness = 1.0;
  		public double compactness =  0.02;
  		public double sym_compactness = 0.01;
  		public double dc_weight = 10; // importance of dc realtive to rms_pure
  		public int asym_tax_free  = 5; // "compactness" does not apply to pixels with |x|<=asym_tax_free  and |y| <= asym_tax_free
  		public int asym_tax_free  = 5; // "compactness" does not apply to pixels with |x|<=asym_tax_free  and |y| <= asym_tax_free
  		public int seed_size = 8; // number of initial cells in asym_kernel - should be 4*b + 1 (X around center cell) or 4*n + 0  (X around between cells)
  		public int seed_size = 8; // number of initial cells in asym_kernel - should be 4*b + 1 (X around center cell) or 4*n + 0  (X around between cells)
  		public double asym_random; // initialize asym_kernel with random numbers
  		public double asym_random; // initialize asym_kernel with random numbers
@@ -1824,6 +1826,8 @@ public class EyesisCorrectionParameters {
  			properties.setProperty(prefix+"asym_distance",this.asym_distance+"");
  			properties.setProperty(prefix+"asym_distance",this.asym_distance+"");
  			properties.setProperty(prefix+"dct_window",   this.dct_window+"");
  			properties.setProperty(prefix+"dct_window",   this.dct_window+"");
  			properties.setProperty(prefix+"compactness",  this.compactness+"");
  			properties.setProperty(prefix+"compactness",  this.compactness+"");
  			properties.setProperty(prefix+"sym_compactness",  this.sym_compactness+"");
  			properties.setProperty(prefix+"dc_weight",  this.dc_weight+"");
  			properties.setProperty(prefix+"fact_precision",  this.fact_precision+"");
  			properties.setProperty(prefix+"fact_precision",  this.fact_precision+"");
  			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+"");
@@ -1857,6 +1861,8 @@ public class EyesisCorrectionParameters {
  			if (properties.getProperty(prefix+"asym_distance")!=null) this.asym_distance=Integer.parseInt(properties.getProperty(prefix+"asym_distance"));
  			if (properties.getProperty(prefix+"asym_distance")!=null) this.asym_distance=Integer.parseInt(properties.getProperty(prefix+"asym_distance"));
  			if (properties.getProperty(prefix+"dct_window")!=null) this.dct_window=Integer.parseInt(properties.getProperty(prefix+"dct_window"));
  			if (properties.getProperty(prefix+"dct_window")!=null) this.dct_window=Integer.parseInt(properties.getProperty(prefix+"dct_window"));
  			if (properties.getProperty(prefix+"compactness")!=null) this.compactness=Double.parseDouble(properties.getProperty(prefix+"compactness"));
  			if (properties.getProperty(prefix+"compactness")!=null) this.compactness=Double.parseDouble(properties.getProperty(prefix+"compactness"));
  			if (properties.getProperty(prefix+"sym_compactness")!=null) this.sym_compactness=Double.parseDouble(properties.getProperty(prefix+"sym_compactness"));
  			if (properties.getProperty(prefix+"dc_weight")!=null) this.dc_weight=Double.parseDouble(properties.getProperty(prefix+"dc_weight"));
  			if (properties.getProperty(prefix+"fact_precision")!=null) this.fact_precision=Double.parseDouble(properties.getProperty(prefix+"fact_precision"));
  			if (properties.getProperty(prefix+"fact_precision")!=null) this.fact_precision=Double.parseDouble(properties.getProperty(prefix+"fact_precision"));
  			if (properties.getProperty(prefix+"asym_tax_free")!=null) this.asym_tax_free=Integer.parseInt(properties.getProperty(prefix+"asym_tax_free"));
  			if (properties.getProperty(prefix+"asym_tax_free")!=null) this.asym_tax_free=Integer.parseInt(properties.getProperty(prefix+"asym_tax_free"));
  			if (properties.getProperty(prefix+"seed_size")!=null) this.seed_size=Integer.parseInt(properties.getProperty(prefix+"seed_size"));
  			if (properties.getProperty(prefix+"seed_size")!=null) this.seed_size=Integer.parseInt(properties.getProperty(prefix+"seed_size"));
@@ -1892,6 +1898,8 @@ public class EyesisCorrectionParameters {
  			gd.addNumericField("MDCT window type (0,1,2)",                                       this.dct_window,          0);
  			gd.addNumericField("MDCT window type (0,1,2)",                                       this.dct_window,          0);
  			gd.addNumericField("LMA_steps",                                                      this.LMA_steps,           0);
  			gd.addNumericField("LMA_steps",                                                      this.LMA_steps,           0);
  			gd.addNumericField("Compactness (punish off-center asym_kernel pixels (proportional to r^2)", this.compactness,2);
  			gd.addNumericField("Compactness (punish off-center asym_kernel pixels (proportional to r^2)", this.compactness,2);
  			gd.addNumericField("Symmetrical kernel compactness (proportional to r^2)",           this.sym_compactness,     2);
  			gd.addNumericField("Relative importance of DC error to RMS",                         this.dc_weight,           2);
  			gd.addNumericField("Factorization target precision (stop if achieved)",              this.fact_precision,      4);
  			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);
  			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
@@ -1926,6 +1934,8 @@ public class EyesisCorrectionParameters {
  			this.dct_window=      (int) gd.getNextNumber();
  			this.dct_window=      (int) gd.getNextNumber();
  			this.LMA_steps =      (int) gd.getNextNumber();
  			this.LMA_steps =      (int) gd.getNextNumber();
  			this.compactness =          gd.getNextNumber();
  			this.compactness =          gd.getNextNumber();
  			this.sym_compactness =      gd.getNextNumber();
  			this.dc_weight =            gd.getNextNumber();
  			this.fact_precision =       gd.getNextNumber();
  			this.fact_precision =       gd.getNextNumber();
  			this.asym_tax_free =  (int) gd.getNextNumber();
  			this.asym_tax_free =  (int) gd.getNextNumber();
  			this.seed_size =      (int) gd.getNextNumber();
  			this.seed_size =      (int) gd.getNextNumber();
+2 −0
Original line number Original line Diff line number Diff line
@@ -167,6 +167,8 @@ public class EyesisDCT {
					  factorConvKernel.setTargetWindowMode (dct_parameters.dbg_window_mode, dct_parameters.centerWindowToTarget);
					  factorConvKernel.setTargetWindowMode (dct_parameters.dbg_window_mode, dct_parameters.centerWindowToTarget);
					  factorConvKernel.numIterations =     dct_parameters.LMA_steps;
					  factorConvKernel.numIterations =     dct_parameters.LMA_steps;
					  factorConvKernel.setAsymCompactness  (dct_parameters.compactness,	dct_parameters.asym_tax_free);
					  factorConvKernel.setAsymCompactness  (dct_parameters.compactness,	dct_parameters.asym_tax_free);
					  factorConvKernel.setSymCompactness   (dct_parameters.sym_compactness);
					  factorConvKernel.setDCWeight         (dct_parameters.dc_weight);
					  
					  
					  int chn,tileY,tileX;
					  int chn,tileY,tileX;
//					  int chn0=-1;
//					  int chn0=-1;
+28 −1
Original line number Original line Diff line number Diff line
@@ -2977,6 +2977,10 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        factorConvKernel.setAsymCompactness(
        factorConvKernel.setAsymCompactness(
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.asym_tax_free);
        		DCT_PARAMETERS.asym_tax_free);
        factorConvKernel.setSymCompactness(
        		DCT_PARAMETERS.sym_compactness);
        factorConvKernel.setDCWeight(
        		DCT_PARAMETERS.dc_weight);
        
        
        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;
    	int target_expanded_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -2;
@@ -3101,6 +3105,10 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        factorConvKernel.setAsymCompactness(
        factorConvKernel.setAsymCompactness(
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.asym_tax_free);
        		DCT_PARAMETERS.asym_tax_free);
        factorConvKernel.setSymCompactness(
        		DCT_PARAMETERS.sym_compactness);
        factorConvKernel.setDCWeight(
        		DCT_PARAMETERS.dc_weight);
        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;
    	int target_expanded_size = 2*DCT_PARAMETERS.dct_size + DCT_PARAMETERS.asym_size -2;
        double [] target_expanded = null;
        double [] target_expanded = null;
@@ -3166,11 +3174,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("factorConvKernel.getRMSes().length="+factorConvKernel.getRMSes().length);
    	System.out.println(
    	System.out.println(
    			"calcKernels() number of asym pixels = "+numPixels+
    			"calcKernels() number of asym pixels = "+numPixels+
				" RMS = "+factorConvKernel.getRMSes()[0]+
				" RMS = "+factorConvKernel.getRMSes()[0]+
				", RMSPure = "+factorConvKernel.getRMSes()[1]+
				", RMSPure = "+factorConvKernel.getRMSes()[1]+
				", RMSP_DC = "+factorConvKernel.getRMSes()[2]+
				", relRMSPure = "+(factorConvKernel.getRMSes()[1]/factorConvKernel.getTargetRMS())+
				", relRMSPure = "+(factorConvKernel.getRMSes()[1]/factorConvKernel.getTargetRMS())+
				", relRMS_DC = "+(factorConvKernel.getRMSes()[2]/factorConvKernel.getTargetRMS())+
				", number of LMA runs = "+factorConvKernel.getLMARuns()+
				", number of LMA runs = "+factorConvKernel.getLMARuns()+
				", spent "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3)+" sec");
				", spent "+ IJ.d2s(0.000000001*(System.nanoTime()-startTime),3)+" sec");


@@ -3180,9 +3191,16 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        double [] target_weights = factorConvKernel.getTargetWeights();
        double [] target_weights = factorConvKernel.getTargetWeights();
        double [] diff100 = new double [convolved.length];
        double [] diff100 = new double [convolved.length];
        double [] weighted_diff100 = new double [convolved.length];
        double [] weighted_diff100 = new double [convolved.length];
        double s0=0,s1 = 0, s2 = 0.0;
        for (int ii=0;ii<convolved.length;ii++) {
        for (int ii=0;ii<convolved.length;ii++) {
        	diff100[ii]=100.0*(target_expanded[ii]-convolved[ii]);
        	diff100[ii]=100.0*(target_expanded[ii]-convolved[ii]);
        	weighted_diff100[ii] = diff100[ii]* target_weights[ii];
        	weighted_diff100[ii] = diff100[ii]* target_weights[ii];
        	s0+=target_weights[ii];
        	s1+=target_expanded[ii]*target_weights[ii];
        	s2+=convolved[ii]*target_weights[ii];
            if (DEBUG_LEVEL>3) {
            	System.out.println(ii+": t="+target_expanded[ii]+" c="+convolved[ii]+" s0="+s0+" s1="+s1+" s2="+s2);
            }        	
        }
        }
        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) {
        if (DEBUG_LEVEL>0) {
@@ -3190,8 +3208,17 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        	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);
        	System.out.println("weights s0="+s0+" target s1/s0="+(s1/s0)+ "convolved s2/s0="+(s2/s0)+ " s2/s1="+(s2/s1));
        }
        }
        SDFA_INSTANCE.showArrays(sym_kernel,    DCT_PARAMETERS.dct_size,       DCT_PARAMETERS.dct_size,   "sym_kernel");

        DttRad2 dtt =   new DttRad2(DCT_PARAMETERS.dct_size);
    	double [] sym_dct_iii =   dtt.dttt_iii(sym_kernel);
    	double [] sym_dct_iii_ii = dtt.dttt_ii(sym_dct_iii);
    	double [][] sym_kernels = {sym_kernel,sym_dct_iii,sym_dct_iii_ii};

        SDFA_INSTANCE.showArrays(sym_kernels,    DCT_PARAMETERS.dct_size,       DCT_PARAMETERS.dct_size, true,  "sym_kernel_iii_ii");
        
////        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");
//        SDFA_INSTANCE.showArrays(convolved,  target_kernel_size, target_kernel_size,   "convolved");
//        SDFA_INSTANCE.showArrays(convolved,  target_kernel_size, target_kernel_size,   "convolved");