Commit be7e6c62 authored by Andrey Filippov's avatar Andrey Filippov
Browse files

Added window functions, seem to stabilize LMA

parent 03feb56c
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -1666,6 +1666,7 @@ 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 DCTParameters(
  		public DCTParameters(
  				int dct_size,
  				int dct_size,
@@ -1705,6 +1706,7 @@ public class EyesisCorrectionParameters {
  			properties.setProperty(prefix+"dbg_sigma",  this.dbg_sigma+"");
  			properties.setProperty(prefix+"dbg_sigma",  this.dbg_sigma+"");
  			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+"");
  		
  		
  		}
  		}
  		public void getProperties(String prefix,Properties properties){
  		public void getProperties(String prefix,Properties properties){
@@ -1726,6 +1728,7 @@ 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+"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");
@@ -1747,6 +1750,7 @@ public class EyesisCorrectionParameters {
  			gd.addNumericField("dbg_sigma",                                                      this.dbg_sigma, 3); //0..2
  			gd.addNumericField("dbg_sigma",                                                      this.dbg_sigma, 3); //0..2
			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); //32
  			gd.addNumericField("Convolution window: 0 - none, 1 - square, 2 - sin, 3 - sin^2",   this.dbg_window_mode,     0); //32
			
			
  			//  	    gd.addNumericField("Debug Level:",                          MASTER_DEBUG_LEVEL,      0);
  			//  	    gd.addNumericField("Debug Level:",                          MASTER_DEBUG_LEVEL,      0);
  			gd.showDialog();
  			gd.showDialog();
@@ -1769,6 +1773,7 @@ public class EyesisCorrectionParameters {
  			this.dbg_sigma=             gd.getNextNumber();
  			this.dbg_sigma=             gd.getNextNumber();
			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();


  			//  	    MASTER_DEBUG_LEVEL= (int) gd.getNextNumber();
  			//  	    MASTER_DEBUG_LEVEL= (int) gd.getNextNumber();
  			return true;
  			return true;
+20 −15
Original line number Original line Diff line number Diff line
@@ -2838,6 +2838,7 @@ 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.numIterations = DCT_PARAMETERS.LMA_steps;
        factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps;
        factorConvKernel.setAsymCompactness(
        factorConvKernel.setAsymCompactness(
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.compactness,
@@ -2898,16 +2899,6 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        	for (int ii = 0; ii<mask.length; ii++) {
        	for (int ii = 0; ii<mask.length; ii++) {
        		mask[ii] = ((ii <= DCT_PARAMETERS.dbg_mask.length()) && (DCT_PARAMETERS.dbg_mask.charAt(ii) == '*')); 
        		mask[ii] = ((ii <= DCT_PARAMETERS.dbg_mask.length()) && (DCT_PARAMETERS.dbg_mask.charAt(ii) == '*')); 
        	}
        	}
/*
        	System.out.println("asym mask: ");
        	for (int ii=0;ii<DCT_PARAMETERS.asym_size;ii++){
        		System.out.print(ii+": ");
        		for (int jj=0;jj<DCT_PARAMETERS.asym_size;jj++){
        			System.out.print((mask[ii*DCT_PARAMETERS.asym_size+jj]?" X":" .")+" ");
        		}
        		System.out.println();	
        	}
*/


        }
        }
        
        
@@ -2923,11 +2914,16 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        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();
        double [] diff100 = new double [convolved.length];
        double [] target_weights = factorConvKernel.getTargetWeights();
        for (int ii=0;ii<convolved.length;ii++) diff100[ii]=100.0*(target_expanded[ii]-convolved[ii]);
        
        
        double [] diff100 = new double [convolved.length];
        double [] weighted_diff100 = new double [convolved.length];
        for (int ii=0;ii<convolved.length;ii++) {
        	diff100[ii]=100.0*(target_expanded[ii]-convolved[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, diff100};
        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);
@@ -2942,6 +2938,7 @@ 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.numIterations = DCT_PARAMETERS.LMA_steps;
        factorConvKernel.numIterations = DCT_PARAMETERS.LMA_steps;
        factorConvKernel.setAsymCompactness(
        factorConvKernel.setAsymCompactness(
        		DCT_PARAMETERS.compactness,
        		DCT_PARAMETERS.compactness,
@@ -3008,7 +3005,15 @@ private Panel panel1,panel2,panel3,panel4,panel5,panel5a, panel6,panel7,panelPos
        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();
        double [][] compare_kernels = {target_expanded, convolved};
        double [] target_weights = factorConvKernel.getTargetWeights();
        double [] diff100 = new double [convolved.length];
        double [] weighted_diff100 = new double [convolved.length];
        for (int ii=0;ii<convolved.length;ii++) {
        	diff100[ii]=100.0*(target_expanded[ii]-convolved[ii]);
        	weighted_diff100[ii] = diff100[ii]* target_weights[ii];
        }
        double [][] compare_kernels = {target_expanded, convolved, weighted_diff100,target_weights, diff100};
        
        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);