Commit 6a053711 authored by Andrey Filippov's avatar Andrey Filippov
Browse files

before vegetation_lpf modification

parent cc900bac
Loading
Loading
Loading
Loading
+93 −5
Original line number Original line Diff line number Diff line
@@ -803,7 +803,8 @@ min_str_neib_fpn 0.35
    
    
	public double    terr_alpha_loss =       100.0;
	public double    terr_alpha_loss =       100.0;
	public double    terr_alpha_loss_lin =     0.0;
	public double    terr_alpha_loss_lin =     0.0;
	public double    terr_alpha_offset =       0.1;
	public double    terr_alpha_offset =       0.1; // alpha offset near alpha ~=1.0
	public double    terr_alpha_0offset =      0.0; // New - a separate alpha offset nea alpha ~= 0.0
	public double    terr_alpha_min_veg =      -1; // old version 0.5;  // Minimal vegetation alpha. If (alpha-alpha_offset)/(1-2*alpha_offset) < alpha_min_veg, pull down to lpha_offset
	public double    terr_alpha_min_veg =      -1; // old version 0.5;  // Minimal vegetation alpha. If (alpha-alpha_offset)/(1-2*alpha_offset) < alpha_min_veg, pull down to lpha_offset
	
	
	
	
@@ -829,6 +830,22 @@ min_str_neib_fpn 0.35
	public double    terr_elev_alpha_pwr =     2.0;  // raise alpha to this power (when alpha > 0)
	public double    terr_elev_alpha_pwr =     2.0;  // raise alpha to this power (when alpha > 0)
	public double    terr_low_veget =          2.0;  // (pix) Elevation considered low (lower loss for high alpha)
	public double    terr_low_veget =          2.0;  // (pix) Elevation considered low (lower loss for high alpha)
	public double    terr_scenes_pull0 =       1.0;  // pull average scene offset to zero
	public double    terr_scenes_pull0 =       1.0;  // pull average scene offset to zero
    // scaling elevation losses for high elevations (decrease pull and/or lpf for high elevations)
	public double    terr_elev_scale_thresh =  1.0;  // reduce losses for higher (initial) elevations TODO: consider actual elevations
	public boolean   terr_elev_scale_pull =   false;  // scale elevation pull losses for high elevations 
	public boolean   terr_elev_scale_lpf =    false;  // scale elevation diffusion losses for high elevations 
	// tree-top removal
	public boolean   terr_ttop_en =           false; // remove tree tops from transparency weights
	public double    terr_ttop_gb =           1.0;   // Elevation Gaussian blur sigma to detect tree tops
	public double    terr_ttop_min =          3.0;   // Minimal tree top elevation
	public double    terr_ttop_rel_lev =      0.9;   // Relative (to the top height) sample level
	public double    terr_ttop_rel_rad =      0.25;  // Relative (to the top height) sample ring radius
	public double    terr_ttop_frac =         0.5;   // Minimal fraction of the ring pixels below sample level
	public double    terr_ttop_rem_rad =      0.25;  // Relative (to the top height) remove transparency radius
	
	
	
	


	// LMA parameters        
	// LMA parameters        
	public double    terr_boost_parallax =     3.0;  //
	public double    terr_boost_parallax =     3.0;  //
@@ -2134,7 +2151,8 @@ min_str_neib_fpn 0.35
		gd.addNumericField("Alpha loss",           terr_alpha_loss, 5,7,"", 	"Alpha quadratic growing loss for when out of [0,1] range");
		gd.addNumericField("Alpha loss",           terr_alpha_loss, 5,7,"", 	"Alpha quadratic growing loss for when out of [0,1] range");
		gd.addNumericField("Alpha loss linear",    terr_alpha_loss_lin, 5,7,"", "Alpha linear growing loss for when out of [0,1] range and below minimal vegetation alpha.");
		gd.addNumericField("Alpha loss linear",    terr_alpha_loss_lin, 5,7,"", "Alpha linear growing loss for when out of [0,1] range and below minimal vegetation alpha.");
		
		
		gd.addNumericField("Alpha offset",         terr_alpha_offset, 5,7,"",   "Start alpha losses above 0.0 and below 1.0 by this value.");
		gd.addNumericField("Alpha offset @1.0",    terr_alpha_offset, 5,7,"",   "Start alpha losses below 1.0 by this value.");
		gd.addNumericField("Alpha offset @0.0",    terr_alpha_0offset, 5,7,"",  "Start alpha losses above 0.0 by this value.");
		gd.addNumericField("Minimal vegetation alpha", terr_alpha_min_veg, 5,7,"","Minimal vegetation alpha. If (alpha-alpha_offset)/(1-2*alpha_offset) < alpha_min_veg, pull down to lpha_offset.");
		gd.addNumericField("Minimal vegetation alpha", terr_alpha_min_veg, 5,7,"","Minimal vegetation alpha. If (alpha-alpha_offset)/(1-2*alpha_offset) < alpha_min_veg, pull down to lpha_offset.");
		
		
		gd.addNumericField("Alpha diffusion",      terr_alpha_lpf, 5,7,"", 	    "Alpha diffusion to 4 ortho neighbors.");
		gd.addNumericField("Alpha diffusion",      terr_alpha_lpf, 5,7,"", 	    "Alpha diffusion to 4 ortho neighbors.");
@@ -2159,9 +2177,23 @@ min_str_neib_fpn 0.35
		gd.addNumericField("Low vegetation loss",  terr_elev_alpha, 5,7,"",  	"Multiply alpha by under-low elevation for loss.");
		gd.addNumericField("Low vegetation loss",  terr_elev_alpha, 5,7,"",  	"Multiply alpha by under-low elevation for loss.");
		gd.addNumericField("Low vegetation power", terr_elev_alpha_pwr, 5,7,"", "Raise alpha to this power for low vegetation loss.");
		gd.addNumericField("Low vegetation power", terr_elev_alpha_pwr, 5,7,"", "Raise alpha to this power for low vegetation loss.");
		gd.addNumericField("Low elevation",        terr_low_veget, 5,7,"pix",  	"Elevation considered low (lower loss for high alpha.");
		gd.addNumericField("Low elevation",        terr_low_veget, 5,7,"pix",  	"Elevation considered low (lower loss for high alpha.");
		
		gd.addNumericField("Pull scene offset",    terr_scenes_pull0, 5,7,"",	"Pull average scene offset to zero.");
		gd.addNumericField("Pull scene offset",    terr_scenes_pull0, 5,7,"",	"Pull average scene offset to zero.");
		
		
	    // scaling elevation losses for high elevations (decrease pull and/or lpf for high elevations)
		gd.addNumericField("High elevation",       terr_elev_scale_thresh, 5,7,"","Reduce losses for higher (initial) elevations threshold.");
		gd.addCheckbox    ("High elevation pull",  terr_elev_scale_pull,        "Scale elevation pull losses for high elevations.");
		gd.addCheckbox    ("High elevation diffusion",terr_elev_scale_lpf,      "Scale elevation diffusion losses for high elevations.");

		gd.addMessage     ("Tree tops detection/filtering - no (stray) transparency around tree tops");
		gd.addCheckbox    ("Filter tree tops",     terr_ttop_en,               "Filter tree tops transparency.");
		gd.addNumericField("Elevation blur sigma", terr_ttop_gb, 5,7,"",  	   "Elevation Gaussian blur sigma to detect tree tops.");
		gd.addNumericField("Minimal tree top elevation",terr_ttop_min, 5,7,"", "Minimal tree top elevation.");
		gd.addNumericField("Relative sample level",terr_ttop_rel_lev, 5,7,"",  "Relative (to the top height) sample level.");
		gd.addNumericField("Relative ring radius", terr_ttop_rel_rad, 5,7,"",  "Relative (to the top height) sample ring radius.");
		gd.addNumericField("Minimal fraction lower",terr_ttop_frac, 5,7,"",    "Minimal fraction of the ring pixels below sample level.");
		gd.addNumericField("Remove transparency radius", terr_ttop_rem_rad, 5,7,"","Relative (to the top height) remove transparency radius.");

	
		gd.addMessage     ("LMA parameters");
		gd.addMessage     ("LMA parameters");
		gd.addNumericField("Boost parallax",       terr_boost_parallax, 5,7,"",	"Increase weight of scenes that have high parallax to the reference one.");
		gd.addNumericField("Boost parallax",       terr_boost_parallax, 5,7,"",	"Increase weight of scenes that have high parallax to the reference one.");
		gd.addNumericField("Limit parallax",       terr_max_parallax, 5,7,"",	"Parallax limit when evaluating boost parallax.");
		gd.addNumericField("Limit parallax",       terr_max_parallax, 5,7,"",	"Parallax limit when evaluating boost parallax.");
@@ -2899,6 +2931,7 @@ min_str_neib_fpn 0.35
		terr_alpha_loss =          gd.getNextNumber();// double 
		terr_alpha_loss =          gd.getNextNumber();// double 
		terr_alpha_loss_lin =      gd.getNextNumber();// double 
		terr_alpha_loss_lin =      gd.getNextNumber();// double 
		terr_alpha_offset =        gd.getNextNumber();// double 
		terr_alpha_offset =        gd.getNextNumber();// double 
		terr_alpha_0offset =       gd.getNextNumber();// double 
		terr_alpha_min_veg =       gd.getNextNumber();// double
		terr_alpha_min_veg =       gd.getNextNumber();// double
		terr_alpha_lpf =           gd.getNextNumber();// double 
		terr_alpha_lpf =           gd.getNextNumber();// double 
		terr_alpha_piece_linear =  gd.getNextBoolean();// boolean
		terr_alpha_piece_linear =  gd.getNextBoolean();// boolean
@@ -2923,6 +2956,20 @@ min_str_neib_fpn 0.35
		terr_elev_alpha_pwr =      gd.getNextNumber();// double
		terr_elev_alpha_pwr =      gd.getNextNumber();// double
		terr_low_veget =           gd.getNextNumber();// double
		terr_low_veget =           gd.getNextNumber();// double
		terr_scenes_pull0 =        gd.getNextNumber();// double
		terr_scenes_pull0 =        gd.getNextNumber();// double

		// scaling elevation losses for high elevations (decrease pull and/or lpf for high elevations)
		terr_elev_scale_thresh =   gd.getNextNumber();// double 
		terr_elev_scale_pull =     gd.getNextBoolean();// boolean
		terr_elev_scale_lpf =      gd.getNextBoolean();// boolean
		// tree-top removal
		terr_ttop_en =             gd.getNextBoolean();// boolean
		terr_ttop_gb =             gd.getNextNumber();// double 
		terr_ttop_min =            gd.getNextNumber();// double 
		terr_ttop_rel_lev =        gd.getNextNumber();// double 
		terr_ttop_rel_rad =        gd.getNextNumber();// double 
		terr_ttop_frac =           gd.getNextNumber();// double 
		terr_ttop_rem_rad =        gd.getNextNumber();// double 
		
		terr_boost_parallax =      gd.getNextNumber();// double 
		terr_boost_parallax =      gd.getNextNumber();// double 
		terr_max_parallax =        gd.getNextNumber();// double 
		terr_max_parallax =        gd.getNextNumber();// double 
		terr_hifreq_weight =       gd.getNextNumber();// double
		terr_hifreq_weight =       gd.getNextNumber();// double
@@ -3625,6 +3672,7 @@ min_str_neib_fpn 0.35
		properties.setProperty(prefix+"terr_alpha_loss",             terr_alpha_loss+"");         // double 
		properties.setProperty(prefix+"terr_alpha_loss",             terr_alpha_loss+"");         // double 
		properties.setProperty(prefix+"terr_alpha_loss_lin",         terr_alpha_loss_lin+"");     // double 
		properties.setProperty(prefix+"terr_alpha_loss_lin",         terr_alpha_loss_lin+"");     // double 
		properties.setProperty(prefix+"terr_alpha_offset",           terr_alpha_offset+"");       // double 
		properties.setProperty(prefix+"terr_alpha_offset",           terr_alpha_offset+"");       // double 
		properties.setProperty(prefix+"terr_alpha_0offset",          terr_alpha_0offset+"");      // double 
		properties.setProperty(prefix+"terr_alpha_min_veg",          terr_alpha_min_veg+"");      // double 
		properties.setProperty(prefix+"terr_alpha_min_veg",          terr_alpha_min_veg+"");      // double 
		properties.setProperty(prefix+"terr_alpha_lpf",              terr_alpha_lpf+"");          // double 
		properties.setProperty(prefix+"terr_alpha_lpf",              terr_alpha_lpf+"");          // double 
		properties.setProperty(prefix+"terr_alpha_piece_linear",     terr_alpha_piece_linear+""); // boolean
		properties.setProperty(prefix+"terr_alpha_piece_linear",     terr_alpha_piece_linear+""); // boolean
@@ -3650,6 +3698,20 @@ min_str_neib_fpn 0.35
		properties.setProperty(prefix+"terr_low_veget",              terr_low_veget+"");          // double
		properties.setProperty(prefix+"terr_low_veget",              terr_low_veget+"");          // double
		properties.setProperty(prefix+"terr_scenes_pull0",           terr_scenes_pull0+"");       // double
		properties.setProperty(prefix+"terr_scenes_pull0",           terr_scenes_pull0+"");       // double


		// scaling elevation losses for high elevations (decrease pull and/or lpf for high elevations)
		properties.setProperty(prefix+"terr_elev_scale_thresh",      terr_elev_scale_thresh+"");  // double 
		properties.setProperty(prefix+"terr_elev_scale_pull",        terr_elev_scale_pull+"");    // boolean
		properties.setProperty(prefix+"terr_elev_scale_lpf",         terr_elev_scale_lpf+"");     // boolean
		// tree-top removal
		properties.setProperty(prefix+"terr_ttop_en",                terr_ttop_en+"");            // boolean
		properties.setProperty(prefix+"terr_ttop_gb",                terr_ttop_gb+"");            // double 
		properties.setProperty(prefix+"terr_ttop_min",               terr_ttop_min+"");           // double 
		properties.setProperty(prefix+"terr_ttop_rel_lev",           terr_ttop_rel_lev+"");       // double 
		properties.setProperty(prefix+"terr_ttop_rel_rad",           terr_ttop_rel_rad+"");       // double 
		properties.setProperty(prefix+"terr_ttop_frac",              terr_ttop_frac+"");          // double 
		properties.setProperty(prefix+"terr_ttop_rem_rad",           terr_ttop_rem_rad+"");       // double 


		properties.setProperty(prefix+"terr_boost_parallax",         terr_boost_parallax+"");     // double 
		properties.setProperty(prefix+"terr_boost_parallax",         terr_boost_parallax+"");     // double 
		properties.setProperty(prefix+"terr_max_parallax",           terr_max_parallax+"");       // double 
		properties.setProperty(prefix+"terr_max_parallax",           terr_max_parallax+"");       // double 
		properties.setProperty(prefix+"terr_hifreq_weight",          terr_hifreq_weight+"");      // double
		properties.setProperty(prefix+"terr_hifreq_weight",          terr_hifreq_weight+"");      // double
@@ -4371,6 +4433,7 @@ min_str_neib_fpn 0.35
		if (properties.getProperty(prefix+"terr_alpha_loss")!=         null) terr_alpha_loss=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_loss"));
		if (properties.getProperty(prefix+"terr_alpha_loss")!=         null) terr_alpha_loss=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_loss"));
		if (properties.getProperty(prefix+"terr_alpha_loss_lin")!=     null) terr_alpha_loss_lin=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_loss_lin"));
		if (properties.getProperty(prefix+"terr_alpha_loss_lin")!=     null) terr_alpha_loss_lin=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_loss_lin"));
		if (properties.getProperty(prefix+"terr_alpha_offset")!=       null) terr_alpha_offset=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_offset"));
		if (properties.getProperty(prefix+"terr_alpha_offset")!=       null) terr_alpha_offset=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_offset"));
		if (properties.getProperty(prefix+"terr_alpha_0offset")!=      null) terr_alpha_0offset=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_0offset"));
		if (properties.getProperty(prefix+"terr_alpha_min_veg")!=      null) terr_alpha_min_veg=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_min_veg"));
		if (properties.getProperty(prefix+"terr_alpha_min_veg")!=      null) terr_alpha_min_veg=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_min_veg"));
		if (properties.getProperty(prefix+"terr_alpha_lpf")!=          null) terr_alpha_lpf=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_lpf"));
		if (properties.getProperty(prefix+"terr_alpha_lpf")!=          null) terr_alpha_lpf=Double.parseDouble(properties.getProperty(prefix+"terr_alpha_lpf"));
		if (properties.getProperty(prefix+"terr_alpha_piece_linear")!= null) terr_alpha_piece_linear=Boolean.parseBoolean(properties.getProperty(prefix+"terr_alpha_piece_linear"));
		if (properties.getProperty(prefix+"terr_alpha_piece_linear")!= null) terr_alpha_piece_linear=Boolean.parseBoolean(properties.getProperty(prefix+"terr_alpha_piece_linear"));
@@ -4395,6 +4458,18 @@ min_str_neib_fpn 0.35
		if (properties.getProperty(prefix+"terr_elev_alpha_pwr")!=     null) terr_elev_alpha_pwr=Double.parseDouble(properties.getProperty(prefix+"terr_elev_alpha_pwr"));
		if (properties.getProperty(prefix+"terr_elev_alpha_pwr")!=     null) terr_elev_alpha_pwr=Double.parseDouble(properties.getProperty(prefix+"terr_elev_alpha_pwr"));
		if (properties.getProperty(prefix+"terr_low_veget")!=          null) terr_low_veget=Double.parseDouble(properties.getProperty(prefix+"terr_low_veget"));
		if (properties.getProperty(prefix+"terr_low_veget")!=          null) terr_low_veget=Double.parseDouble(properties.getProperty(prefix+"terr_low_veget"));
		if (properties.getProperty(prefix+"terr_scenes_pull0")!=       null) terr_scenes_pull0=Double.parseDouble(properties.getProperty(prefix+"terr_scenes_pull0"));
		if (properties.getProperty(prefix+"terr_scenes_pull0")!=       null) terr_scenes_pull0=Double.parseDouble(properties.getProperty(prefix+"terr_scenes_pull0"));
		// scaling elevation losses for high elevations (decrease pull and/or lpf for high elevations)
		if (properties.getProperty(prefix+"terr_elev_scale_thresh")!=  null) terr_elev_scale_thresh=Double.parseDouble(properties.getProperty(prefix+"terr_elev_scale_thresh"));
		if (properties.getProperty(prefix+"terr_elev_scale_pull")!=    null) terr_elev_scale_pull=Boolean.parseBoolean(properties.getProperty(prefix+"terr_elev_scale_pull"));
		if (properties.getProperty(prefix+"terr_elev_scale_lpf")!=     null) terr_elev_scale_lpf=Boolean.parseBoolean(properties.getProperty(prefix+"terr_elev_scale_lpf"));
		// tree-top removal
		if (properties.getProperty(prefix+"terr_ttop_en")!=            null) terr_ttop_en=Boolean.parseBoolean(properties.getProperty(prefix+"terr_ttop_en"));
		if (properties.getProperty(prefix+"terr_ttop_gb")!=            null) terr_ttop_gb=Double.parseDouble(properties.getProperty(prefix+"terr_ttop_gb"));
		if (properties.getProperty(prefix+"terr_ttop_min")!=           null) terr_ttop_min=Double.parseDouble(properties.getProperty(prefix+"terr_ttop_min"));
		if (properties.getProperty(prefix+"terr_ttop_rel_lev")!=       null) terr_ttop_rel_lev=Double.parseDouble(properties.getProperty(prefix+"terr_ttop_rel_lev"));
		if (properties.getProperty(prefix+"terr_ttop_rel_rad")!=       null) terr_ttop_rel_rad=Double.parseDouble(properties.getProperty(prefix+"terr_ttop_rel_rad"));
		if (properties.getProperty(prefix+"terr_ttop_frac")!=          null) terr_ttop_frac=Double.parseDouble(properties.getProperty(prefix+"terr_ttop_frac"));
		if (properties.getProperty(prefix+"terr_ttop_rem_rad")!=       null) terr_ttop_rem_rad=Double.parseDouble(properties.getProperty(prefix+"terr_ttop_rem_rad"));
		
		
		if (properties.getProperty(prefix+"terr_boost_parallax")!=     null) terr_boost_parallax=Double.parseDouble(properties.getProperty(prefix+"terr_boost_parallax"));
		if (properties.getProperty(prefix+"terr_boost_parallax")!=     null) terr_boost_parallax=Double.parseDouble(properties.getProperty(prefix+"terr_boost_parallax"));
		if (properties.getProperty(prefix+"terr_max_parallax")!=       null) terr_max_parallax=Double.parseDouble(properties.getProperty(prefix+"terr_max_parallax"));
		if (properties.getProperty(prefix+"terr_max_parallax")!=       null) terr_max_parallax=Double.parseDouble(properties.getProperty(prefix+"terr_max_parallax"));
@@ -5087,6 +5162,7 @@ min_str_neib_fpn 0.35
		imp.terr_alpha_loss =                    this.terr_alpha_loss;                           
		imp.terr_alpha_loss =                    this.terr_alpha_loss;                           
		imp.terr_alpha_loss_lin =                this.terr_alpha_loss_lin;                           
		imp.terr_alpha_loss_lin =                this.terr_alpha_loss_lin;                           
		imp.terr_alpha_offset =                  this.terr_alpha_offset;
		imp.terr_alpha_offset =                  this.terr_alpha_offset;
		imp.terr_alpha_0offset =                 this.terr_alpha_0offset;
		imp.terr_alpha_min_veg =                 this.terr_alpha_min_veg;
		imp.terr_alpha_min_veg =                 this.terr_alpha_min_veg;
		imp.terr_alpha_lpf =                     this.terr_alpha_lpf;                           
		imp.terr_alpha_lpf =                     this.terr_alpha_lpf;                           
		imp.terr_alpha_piece_linear =            this.terr_alpha_piece_linear;                           
		imp.terr_alpha_piece_linear =            this.terr_alpha_piece_linear;                           
@@ -5110,6 +5186,18 @@ min_str_neib_fpn 0.35
		imp.terr_elev_alpha_pwr =                this.terr_elev_alpha_pwr;
		imp.terr_elev_alpha_pwr =                this.terr_elev_alpha_pwr;
		imp.terr_low_veget =                     this.terr_low_veget;
		imp.terr_low_veget =                     this.terr_low_veget;
		imp.terr_scenes_pull0 =                  this.terr_scenes_pull0;
		imp.terr_scenes_pull0 =                  this.terr_scenes_pull0;
		// scaling elevation losses for high elevations (decrease pull and/or lpf for high elevations)
		imp.terr_elev_scale_thresh =             this.terr_elev_scale_thresh;
		imp.terr_elev_scale_pull =               this.terr_elev_scale_pull;
		imp.terr_elev_scale_lpf =                this.terr_elev_scale_lpf;
		// tree-top removal
		imp.terr_ttop_en =                       this.terr_ttop_en;
		imp.terr_ttop_gb =                       this.terr_ttop_gb;
		imp.terr_ttop_min =                      this.terr_ttop_min;
		imp.terr_ttop_rel_lev =                  this.terr_ttop_rel_lev;
		imp.terr_ttop_rel_rad =                  this.terr_ttop_rel_rad;
		imp.terr_ttop_frac =                     this.terr_ttop_frac;
		imp.terr_ttop_rem_rad =                  this.terr_ttop_rem_rad;
		
		
		imp.terr_boost_parallax =                this.terr_boost_parallax;                           
		imp.terr_boost_parallax =                this.terr_boost_parallax;                           
		imp.terr_max_parallax =                  this.terr_max_parallax;   
		imp.terr_max_parallax =                  this.terr_max_parallax;