Commit 1cc6d251 authored by Andrey Filippov's avatar Andrey Filippov
Browse files

Added version to the data files (older will have it = -1) to be able to

add new fields to the classes.
parent fb87526f
Loading
Loading
Loading
Loading
+8 −31
Original line number Diff line number Diff line
@@ -169,6 +169,7 @@ public class ComboMatch {
		boolean create_map =               false;
		boolean create_equalize =          false;
		
		
		boolean use_saved_collection = true; // false;
		boolean save_collection =     true;
		boolean process_correlation = true; // use false to save new version of data
@@ -191,6 +192,8 @@ public class ComboMatch {
		String log_path =              clt_parameters.imp.pwise_log_path;
		String omtch_img_set =         clt_parameters.imp.omtch_img_set;
		
//		boolean READ_NO_ALT =          false; // to read older format data file where pairs do not have alt_data[]
		
		int  suffix_bc_bl_indx =   2;
		if (!use_marked_image) {
			process_correlation=false; // use already adjusted by default
@@ -218,26 +221,12 @@ public class ComboMatch {
		gd.addCheckbox    ("Bounds to selected images", bounds_to_indices, "Set combo image bounds to selected images only. False - all images.");
		gd.addNumericField("Temp mode",          temp_mode,  0,4,"",
				"O - do not modify average pixels, 1 - equalize second image to first, 2 - try to account for raw average");
		//temp_mode
		/*
		for (int n = 0; n < image_enuatr.length; n++) {
			gd.addMessage("image["+n+"] pose");
			gd.addNumericField("East",   image_enuatr[n][0][0],  3,7,"m",	"Move image "+n+" East.");
			gd.addNumericField("North",  image_enuatr[n][0][1],  3,7,"m",	"Move image "+n+" North.");
			gd.addNumericField("Up",     image_enuatr[n][0][2],  3,7,"m",	"Move image "+n+" Up.");
			gd.addNumericField("Azimuth",image_enuatr[n][1][0],  3,7,"deg",	"Rotate image "+n+" around vertical clockwise.");
			gd.addNumericField("Tilt",   image_enuatr[n][1][1],  3,7,"deg",	"Rotate image "+n+" around East.");
			gd.addNumericField("Roll",   image_enuatr[n][1][2],  3,7,"deg",	"Rotate image "+n+" around North.");
		}
		*/
		gd.addNumericField("Zoom level",              zoom_lev,  0,4,"",
				"Zoom level: +1 - zoom in twice, -1 - zoom out twice");
		gd.addNumericField("GPU image width",              gpu_width,  0,4,"",
				"GPU image width");
		gd.addNumericField("GPU image height",             gpu_height,  0,4,"",
				"GPU image height");
//		gd.addCheckbox    ("Show transformation centers",      show_centers, "Mark verticals from the UAS on the ground.");
//		gd.addCheckbox    ("Show statistics for ortho images", show_map_stats, "Generate and show statistics for ortho maps.");
		gd.addCheckbox    ("Show combo maps/stats",            show_combo, "Generate/save combo maps and stats.");
		gd.addCheckbox    ("Create overlap pairs",             create_pairwise_matches, "Create scene pairs overlaps.");
		gd.addCheckbox    ("Create pairwise affines",          create_pairwise_affines, "Create affines for scene pairs.");
@@ -245,8 +234,6 @@ public class ComboMatch {
		gd.addCheckbox    ("Equalize overlap pairs",           equalize_overlaps, "Equalize intensities in overlaps.");
		gd.addCheckbox    ("Create map",                       create_map, "Create combined map from pairwise matches.");
		gd.addCheckbox    ("Equalize intensities",             create_equalize, "Create map intensities equalization from pairwise matches.");
//		gd.addCheckbox    ("Show combo image mask",            show_combo_mask, "Display combo binary image.");
//		gd.addCheckbox    ("Show altitude combo image", use_alt, "Load and process altitude maps.");
		gd.addNumericField("Remove fraction of worst matches",   frac_remove,  3,7,"",	"When fitting scenes remove this fraction of worst match.");
		gd.addNumericField("Maximal metric error",      metric_error,  3,7,"m",	"Maximal tolerable fitting error caused by elevation variations.");
		if (use_marked_image ) {
@@ -262,6 +249,7 @@ public class ComboMatch {
				"Select interpolation mode of the source files: old bilinear (empty), bilinear (-BL), or bicubic (-BC)", 0);
	    gd.addCheckbox    ("Write log file",            log_append, "Enable writing log file with matching results.");
	    gd.addStringField ("Log file full path",        log_path, 150, "Path of the log file to be appended.");	
//	    gd.addCheckbox    ("Read no-alt data (old)",    READ_NO_ALT, "Read older format data file where pairs do not have alt_data[].");

		
		
@@ -270,9 +258,6 @@ public class ComboMatch {
		if (gd.wasCanceled()) return false;
		
		
//		int choice_index = gd.getNextChoiceIndex();
//		String files_list_path =         FILES_LISTS_PATHS[choice_index]+".list";
//		String orthoMapsCollection_path =FILES_LISTS_PATHS[choice_index]+".data";
		omtch_img_set = ComboMatch.FILES_LISTS_PATHS[gd.getNextChoiceIndex()];
		String files_list_path =         omtch_img_set+".list";
		String orthoMapsCollection_path =omtch_img_set+".data";
@@ -288,16 +273,6 @@ public class ComboMatch {
		
		bounds_to_indices=         gd.getNextBoolean();
		temp_mode =          (int) gd.getNextNumber();
		/*
		for (int n = 0; n < image_enuatr.length; n++) {
			image_enuatr[n][0][0] = gd.getNextNumber();
			image_enuatr[n][0][1] = gd.getNextNumber();
			image_enuatr[n][0][2] = gd.getNextNumber();
			image_enuatr[n][1][0] = gd.getNextNumber();
			image_enuatr[n][1][1] = gd.getNextNumber();
			image_enuatr[n][1][2] = gd.getNextNumber();
		}
		*/
		zoom_lev =            (int) gd.getNextNumber();
		gpu_width =           (int) gd.getNextNumber();
		gpu_height =          (int) gd.getNextNumber();
@@ -322,6 +297,8 @@ public class ComboMatch {
		suffix_bc_bl_indx =         gd.getNextChoiceIndex();
		log_append =                gd.getNextBoolean();
		log_path =                  gd.getNextString();
//		READ_NO_ALT =               gd.getNextBoolean();
//		PairwiseOrthoMatch.READ_NO_ALT = READ_NO_ALT; // modifies PairwiseOrthoMatch.readObject() behavior
		OrthoMapsCollection maps_collection=null;
		boolean use_files_list = false;
		if (use_saved_collection) {
+38 −2
Original line number Diff line number Diff line
@@ -58,6 +58,8 @@ public class OrthoMapsCollection implements Serializable{
	public static final int MODE_IMAGE = 0;
	public static final int MODE_ALT =   1;
	public static final int MODE_MASK =  2;
	public static int       LATEST_VERSION = 100; // use when read from .list
	public transient int    current_version = LATEST_VERSION;
	
	/*
	public static final int PAIR_NONE =      0;
@@ -76,7 +78,7 @@ public class OrthoMapsCollection implements Serializable{
			"kernelsDirectory", "patternsDirectory"};
	public static final String [] NAME_FH = {"full","half"};
	public static final String [] NAME_MO = {"main","other"};

	public transient long                       version = -1;
	OrthoMap []                                 ortho_maps;
	transient HashMap<Double,Integer>           map_index;
	transient HashMap<String,Integer>           map_index_string;
@@ -2306,16 +2308,50 @@ public class OrthoMapsCollection implements Serializable{
	
	public static OrthoMapsCollection readOrthoMapsCollection (
			String path) throws IOException, ClassNotFoundException {
		// try reading current_version, if fails - restart without it (for older formats)
		FileInputStream fileInputStream  = new FileInputStream(path);
		ObjectInputStream objectInputStream  = new ObjectInputStream(fileInputStream);
		OrthoMapsCollection orthoMapsCollection = (OrthoMapsCollection) objectInputStream.readObject();
		int current_version = -1;
		OrthoMapsCollection orthoMapsCollection = null;
		PairwiseOrthoMatch.READ_NO_ALT = true; // reading old version
		Object obj = objectInputStream.readObject(); // reads OrthoMapsCollection
		/* // do not handle that intermediate version 
		try {
			obj = objectInputStream.readObject(); // reads OrthoMapsCollection
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			fileInputStream.reset();
			System.out.println("readOrthoMapsCollection(): error reading stream, using current_version="+current_version);
			PairwiseOrthoMatch.READ_NO_ALT = false; // reading new version
			obj = objectInputStream.readObject(); // reads OrthoMapsCollection
		}
        */
		PairwiseOrthoMatch.READ_NO_ALT = false; // reading new version
		if (obj instanceof OrthoMapsCollection) {
			orthoMapsCollection = (OrthoMapsCollection) obj;
			System.out.println("readOrthoMapsCollection(): got old version, using current_version="+current_version);
		} else {
			current_version = (int) obj;
			System.out.println("readOrthoMapsCollection(): got current_version="+current_version);
			PairwiseOrthoMatch.READ_NO_ALT = false; // reading new version
			orthoMapsCollection = (OrthoMapsCollection) objectInputStream.readObject();
		}
		
//		OrthoMapsCollection orthoMapsCollection = (OrthoMapsCollection) objectInputStream.readObject();
		objectInputStream.close();
		orthoMapsCollection.current_version = current_version;
		System.out.println("readOrthoMapsCollection(): got orthoMapsCollection, current_version="+current_version);
		return orthoMapsCollection;
	}
	
	public void writeOrthoMapsCollection (String path) throws IOException {
		FileOutputStream fileOutputStream = new FileOutputStream(path);
		ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
		
 		current_version = LATEST_VERSION;
 		objectOutputStream.writeObject(current_version);
		
		objectOutputStream.writeObject(this);
	    objectOutputStream.flush();
	    objectOutputStream.close();
+9 −2
Original line number Diff line number Diff line
@@ -9,14 +9,17 @@ import Jama.Matrix;

public class PairwiseOrthoMatch implements Serializable {
	private static final long serialVersionUID = 1L;
	public static boolean  READ_NO_ALT = false; // to read old format w/o alt data ( not final!)
	private double [][]           affine = new double[2][3];
	public transient double [][] jtj =    new double [6][6];
	public int                   zoom_lev;
	public double                rms = Double.NaN;
	public transient int []      nxy = null; // not saved, just to communicate for logging
	public transient double      overlap = 0.0;
	public transient double []   alt_data = null;
	public transient double []   equalize1to0 = {1,0}; // value1 = equalize2to1[0]*value2+equalize2to1[1]
	public transient boolean     ok = false;
	// below - not saved/restored
	public transient boolean     ok = false; // not saved/restored
	public transient int []      nxy = null; // not saved, just to communicate for logging

//	public PairwiseOrthoMatch() {}
	public double getOverlap() {
@@ -254,6 +257,7 @@ public class PairwiseOrthoMatch implements Serializable {
		}
		oos.writeObject(overlap);
		oos.writeObject(equalize1to0);
		oos.writeObject(alt_data);
		
	}
	private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
@@ -270,6 +274,9 @@ public class PairwiseOrthoMatch implements Serializable {
		overlap = (Double) ois.readObject();
//		equalize1to0 = new double[] {1,0};
		equalize1to0 = (double[]) ois.readObject();
		if (!READ_NO_ALT) {
			alt_data = (double[]) ois.readObject();
		}
	}
	//private void readObjectNoData() throws ObjectStreamException; // used to modify default values
}