Loading src/main/java/com/elphel/imagej/orthomosaic/ComboMatch.java +8 −31 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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."); Loading @@ -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 ) { Loading @@ -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[]."); Loading @@ -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"; Loading @@ -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(); Loading @@ -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) { Loading src/main/java/com/elphel/imagej/orthomosaic/OrthoMapsCollection.java +38 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading src/main/java/com/elphel/imagej/orthomosaic/PairwiseOrthoMatch.java +9 −2 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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 { Loading @@ -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 } Loading
src/main/java/com/elphel/imagej/orthomosaic/ComboMatch.java +8 −31 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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."); Loading @@ -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 ) { Loading @@ -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[]."); Loading @@ -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"; Loading @@ -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(); Loading @@ -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) { Loading
src/main/java/com/elphel/imagej/orthomosaic/OrthoMapsCollection.java +38 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading
src/main/java/com/elphel/imagej/orthomosaic/PairwiseOrthoMatch.java +9 −2 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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 { Loading @@ -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 }