Commit d9770c1e authored by Andrey Filippov's avatar Andrey Filippov

implemented affine export

parent 2d5052a0
......@@ -53,6 +53,7 @@ public class ComboMatch {
public static int gpu_max_width= 4096;
public static int gpu_max_height= 4096;
public static String [] FILES_LISTS_PATHS = {
"/media/elphel/SSD3-4GB/lwir16-proc/ortho_videos/nov3_50-75-orange",
"/media/elphel/SSD3-4GB/lwir16-proc/ortho_videos/nov3_50-75",
"/media/elphel/SSD3-4GB/lwir16-proc/ortho_videos/maps_sep12-13_50-25-50-75-100m",
"/media/elphel/SSD3-4GB/lwir16-proc/ortho_videos/maps_19_sep13_25-50-75-100m",
......@@ -193,6 +194,10 @@ public class ComboMatch {
boolean update_lla = false; // re-read file metadata
boolean update_kernel_patterns = false;
boolean update_bl_bc = false;
boolean export_affine = false; // export per-scene affines
boolean export_affine2 = false; // export per-pair affines
boolean fix_duplicates = false;
String [] suffixes_bl_bc= {"","-BL","-BC"};
boolean log_append = clt_parameters.imp.pwise_log_append;
......@@ -258,6 +263,10 @@ public class ComboMatch {
suffixes_bl_bc,
suffixes_bl_bc[suffix_bc_bl_indx],
"Select interpolation mode of the source files: old bilinear (empty), bilinear (-BL), or bicubic (-BC)", 0);
gd.addCheckbox ("Export scene affines", export_affine, "Export per-scene affines in text format for migration.");
gd.addCheckbox ("Export pairs affines", export_affine2, "Export per-pair affines in text format for migration.");
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[].");
......@@ -272,6 +281,8 @@ public class ComboMatch {
omtch_img_set = ComboMatch.FILES_LISTS_PATHS[gd.getNextChoiceIndex()];
String files_list_path = omtch_img_set+".list";
String orthoMapsCollection_path =omtch_img_set+".data";
String affines_path = omtch_img_set+".affines"; // for export per-scene affines
String affines2_path = omtch_img_set+".affines2"; // for export per-pair affines
use_saved_collection = gd.getNextBoolean();
save_collection = gd.getNextBoolean();
String orthoMapsCollection_savepath = save_collection?orthoMapsCollection_path:null;
......@@ -309,6 +320,11 @@ public class ComboMatch {
fix_duplicates= gd.getNextBoolean();
update_bl_bc= gd.getNextBoolean();
suffix_bc_bl_indx = gd.getNextChoiceIndex();
export_affine = gd.getNextBoolean();
export_affine2 = gd.getNextBoolean();
log_append = gd.getNextBoolean();
log_path = gd.getNextString();
// READ_NO_ALT = gd.getNextBoolean();
......@@ -339,6 +355,64 @@ public class ComboMatch {
maps_collection.updateNumberScenes();
maps_collection.updateSfmGain();
}
if (export_affine) {
StringBuffer sb = new StringBuffer();
for (OrthoMap omap : maps_collection.ortho_maps) {
String name = omap.getName();
double [][] affine = omap.getAffine();
if (affine != null) {
sb.append(String.format("AFFINE %s %11.8f %11.8f %11.8f %11.8f %11.8f %11.8f\n",
name, affine[0][0], affine[0][1], affine[0][2], affine[1][0], affine[1][1], affine[1][2]));
}
}
CalibrationFileManagement.saveStringToFile (
affines_path, //String path,
sb.toString(), // data,
false); // boolean append)
}
if (export_affine2) {
StringBuffer sb = new StringBuffer();
ArrayList<Point> pairs_list = new ArrayList<Point>();
for (OrthoMap map : maps_collection.ortho_maps) {
for (String other_name: map.pairwise_matches.keySet()) {
pairs_list.add(new Point(
maps_collection.getIndex(map.getName()),
maps_collection.getIndex(other_name)));
}
}
Collections.sort(pairs_list, new Comparator<Point>() {
@Override
public int compare(Point lhs, Point rhs) {
return (rhs.x > lhs.x) ? -1 : (rhs.x < lhs.x) ? 1 :
((rhs.y > lhs.y) ? -1 : (rhs.y < lhs.y) ? 1 : 0); // increasing
}
});
for (Point pair: pairs_list) {
PairwiseOrthoMatch pom = maps_collection.ortho_maps[pair.x].getMatch(
maps_collection.ortho_maps[pair.y].getName(), false); // undef_only || nan_rms);
if ((pom !=null) && pom.isDefined()) {
double overlap = pom.overlap;
double [][] affine = pom.getAffine();
sb.append(String.format("AFFINE2 %s %s %11.8f %11.8f %11.8f %11.8f %11.8f %11.8f %11.8f\n",
maps_collection.ortho_maps[pair.x].getName(),
maps_collection.ortho_maps[pair.y].getName(),
overlap,
affine[0][0], affine[0][1], affine[0][2], affine[1][0], affine[1][1], affine[1][2]));
}
}
CalibrationFileManagement.saveStringToFile (
affines2_path, //String path,
sb.toString(), // data,
false); // boolean append)
}
if (export_affine || export_affine2) {
return true; // do not save
}
if (fix_duplicates) {
removeDuplicateScenes (maps_collection);
}
......@@ -353,6 +427,8 @@ public class ComboMatch {
}
}
String [] names = maps_collection.getNames(); // null
if (object_list != null) {
int corr_size = 128;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment