Loading src/main/java/com/elphel/imagej/orthomosaic/VegetationModel.java +38 −16 Original line number Diff line number Diff line Loading @@ -331,6 +331,7 @@ public class VegetationModel { } /* */ double [][][] veg_to_terr = new double [num_scenes][][]; double [][][] terr_to_terr = new double [num_scenes][][]; Rectangle window1 = new Rectangle(0,0,640,512); Rectangle window2 = out_window; boolean map_diff1 = true; Loading @@ -345,6 +346,14 @@ public class VegetationModel { window2, // final Rectangle window2, map_diff2, // final boolean map_diff2, map_diff_out); // final boolean map_diff_out) terr_to_terr[nscene] = combineMaps( terrain_pix[nscene], // final double [][] map1, window1, // final Rectangle window1, map_diff1, // final boolean map_diff1, terrain_inv[nscene], // final double [][] map2, window2, // final Rectangle window2, map_diff2, // final boolean map_diff2, map_diff_out); // final boolean map_diff_out) } /* */ Loading Loading @@ -397,6 +406,11 @@ public class VegetationModel { tilesX*tileSize, // final int width, quadCLTs, // QuadCLT [] quadCLTs, // just for names "combo_offset.tiff"); // String title) { // with .tiff showOffsetsCombo( terr_to_terr, // final double [][][] map_combo, tilesX*tileSize, // final int width, quadCLTs, // QuadCLT [] quadCLTs, // just for names "combo_terr-terr.tiff"); // String title) { // with .tiff /* */ } Loading Loading @@ -458,13 +472,17 @@ public class VegetationModel { } /* */ double [][] vegetation_mapped = new double [num_scenes][]; double scale_map = 1.0; // 0.5; for (int nscene = 0; nscene < num_scenes; nscene++) { vegetation_mapped[nscene] = applyMap( terrain_render[nscene][0], // final double [] img, // vegetation_render[nscene][0], // final double [] img, terrain_vegetation_all[1][num_scenes], // final double [] img, // average vegetation tilesX * tileSize, // final int img_width, veg_to_terr[nscene], // final double [][] map, window1, // final Rectangle window, map_diff_out); // final boolean map_diff) map_diff_out, // final boolean map_diff) scale_map); // final double scale) { // debug feature, only works with differential map } if (show_debug) { Loading @@ -477,7 +495,7 @@ public class VegetationModel { ShowDoubleFloatArrays.showArraysHyperstack( render3, // double[][][] pixels, tilesX * tileSize, // int width, "terrain_vegetation_mapped.tiff", // String title, "time_derivs-rt"+diff_time_rt+"-rxy"+diff_time_rxy, "terrain_vegetation_mapped-scale"+scale_map+".tiff", // String title, "time_derivs-rt"+diff_time_rt+"-rxy"+diff_time_rxy, titles_scene, // String [] titles, // all slices*frames titles or just slice titles or null titles_frame, // String [] frame_titles, // frame titles or null true); // boolean show) Loading Loading @@ -596,6 +614,7 @@ public class VegetationModel { * @param window Rectangle with {width, height} specifying output image size and (in * differential mode only) {x,y} corresponds to absolute origin * @param map_diff true for differential mode, false - for absolute. * @param scale debug feature, only works with differential map * @return warped image in line-scan order, may have NaN-s. */ public static double [] applyMap( Loading @@ -603,7 +622,8 @@ public class VegetationModel { final int img_width, final double [][] map, final Rectangle window, final boolean map_diff) { final boolean map_diff, final double scale) { // debug feature, only works with differential map final int img_height = img.length /img_width; final int num_pixels = window.width*window.height; final double [] render_out = new double [num_pixels]; Loading @@ -619,8 +639,10 @@ public class VegetationModel { int iy = nPix / window.width; double [] pxy = map[nPix].clone(); if (map_diff) { pxy[0] += 0.5 + ix - window.x; pxy[1] += 0.5 + iy - window.y; pxy[0] *= scale; pxy[1] *= scale; pxy[0] += ix - window.x; // + 0.5; pxy[1] += iy - window.y; // + 0.5; } // pxy[0] += window2.x; // pxy[1] += window2.y; Loading Loading @@ -701,8 +723,8 @@ public class VegetationModel { int iy = nPix / window1.width; double [] pxy = map1[nPix].clone(); if (map_diff1) { pxy[0] += 0.5 + ix - window1.x; pxy[1] += 0.5 + iy - window1.y; pxy[0] += ix - window1.x; // + 0.5; pxy[1] += iy - window1.y; // + 0.5; } pxy[0] += window2.x; pxy[1] += window2.y; Loading @@ -724,8 +746,8 @@ public class VegetationModel { corners[dy][dx] = corners[dy][dx].clone(); corner = corners[dy][dx]; if (map_diff2) { corner[0] += x0 + dx + 0.5 - window2.x; corner[1] += y0 + dy + 0.5 - window2.y; corner[0] += x0 + dx - window2.x; // + 0.5; corner[1] += y0 + dy - window2.y; // + 0.5; } } } Loading @@ -741,8 +763,8 @@ public class VegetationModel { ( fx)*( fy)*corners[1][1][i]; } if (map_diff_out) { cxy[0] -= 0.5 + ix - window1.x; cxy[1] -= 0.5 + iy - window1.y; cxy[0] -= ix - window1.x; // + 0.5; cxy[1] -= iy - window1.y; // + 0.5; } combo_map[nPix] = cxy; } Loading Loading @@ -819,8 +841,8 @@ public class VegetationModel { corners_cw[dir][ynx] = map_in[in_indx][ynx]; } if (in_diff) { corners_cw[dir][0] += 0.5 + ix1; corners_cw[dir][1] += 0.5 + iy1; corners_cw[dir][0] += ix1; // + 0.5; corners_cw[dir][1] += iy1; // + 0.5; } corners_cw[dir][0] += out_window.x; corners_cw[dir][1] += out_window.y; Loading Loading @@ -907,8 +929,8 @@ public class VegetationModel { map_out[oindx][0] = ix0 + u; map_out[oindx][1] = iy0 + v; if (out_diff) { map_out[oindx][0] -= ox-out_window.x-0.5; map_out[oindx][1] -= oy-out_window.y-0.5; map_out[oindx][0] -= ox-out_window.x; // -0.5; map_out[oindx][1] -= oy-out_window.y; // -0.5; } } } Loading src/main/java/com/elphel/imagej/tileprocessor/OpticalFlow.java +1 −1 Original line number Diff line number Diff line Loading @@ -176,7 +176,7 @@ public class OpticalFlow { * @param debug_level debug level */ public void fillTilesNans( public static void fillTilesNans( final double [][][] nan_tiles, final QuadCLT qthis, final int num_passes, Loading Loading
src/main/java/com/elphel/imagej/orthomosaic/VegetationModel.java +38 −16 Original line number Diff line number Diff line Loading @@ -331,6 +331,7 @@ public class VegetationModel { } /* */ double [][][] veg_to_terr = new double [num_scenes][][]; double [][][] terr_to_terr = new double [num_scenes][][]; Rectangle window1 = new Rectangle(0,0,640,512); Rectangle window2 = out_window; boolean map_diff1 = true; Loading @@ -345,6 +346,14 @@ public class VegetationModel { window2, // final Rectangle window2, map_diff2, // final boolean map_diff2, map_diff_out); // final boolean map_diff_out) terr_to_terr[nscene] = combineMaps( terrain_pix[nscene], // final double [][] map1, window1, // final Rectangle window1, map_diff1, // final boolean map_diff1, terrain_inv[nscene], // final double [][] map2, window2, // final Rectangle window2, map_diff2, // final boolean map_diff2, map_diff_out); // final boolean map_diff_out) } /* */ Loading Loading @@ -397,6 +406,11 @@ public class VegetationModel { tilesX*tileSize, // final int width, quadCLTs, // QuadCLT [] quadCLTs, // just for names "combo_offset.tiff"); // String title) { // with .tiff showOffsetsCombo( terr_to_terr, // final double [][][] map_combo, tilesX*tileSize, // final int width, quadCLTs, // QuadCLT [] quadCLTs, // just for names "combo_terr-terr.tiff"); // String title) { // with .tiff /* */ } Loading Loading @@ -458,13 +472,17 @@ public class VegetationModel { } /* */ double [][] vegetation_mapped = new double [num_scenes][]; double scale_map = 1.0; // 0.5; for (int nscene = 0; nscene < num_scenes; nscene++) { vegetation_mapped[nscene] = applyMap( terrain_render[nscene][0], // final double [] img, // vegetation_render[nscene][0], // final double [] img, terrain_vegetation_all[1][num_scenes], // final double [] img, // average vegetation tilesX * tileSize, // final int img_width, veg_to_terr[nscene], // final double [][] map, window1, // final Rectangle window, map_diff_out); // final boolean map_diff) map_diff_out, // final boolean map_diff) scale_map); // final double scale) { // debug feature, only works with differential map } if (show_debug) { Loading @@ -477,7 +495,7 @@ public class VegetationModel { ShowDoubleFloatArrays.showArraysHyperstack( render3, // double[][][] pixels, tilesX * tileSize, // int width, "terrain_vegetation_mapped.tiff", // String title, "time_derivs-rt"+diff_time_rt+"-rxy"+diff_time_rxy, "terrain_vegetation_mapped-scale"+scale_map+".tiff", // String title, "time_derivs-rt"+diff_time_rt+"-rxy"+diff_time_rxy, titles_scene, // String [] titles, // all slices*frames titles or just slice titles or null titles_frame, // String [] frame_titles, // frame titles or null true); // boolean show) Loading Loading @@ -596,6 +614,7 @@ public class VegetationModel { * @param window Rectangle with {width, height} specifying output image size and (in * differential mode only) {x,y} corresponds to absolute origin * @param map_diff true for differential mode, false - for absolute. * @param scale debug feature, only works with differential map * @return warped image in line-scan order, may have NaN-s. */ public static double [] applyMap( Loading @@ -603,7 +622,8 @@ public class VegetationModel { final int img_width, final double [][] map, final Rectangle window, final boolean map_diff) { final boolean map_diff, final double scale) { // debug feature, only works with differential map final int img_height = img.length /img_width; final int num_pixels = window.width*window.height; final double [] render_out = new double [num_pixels]; Loading @@ -619,8 +639,10 @@ public class VegetationModel { int iy = nPix / window.width; double [] pxy = map[nPix].clone(); if (map_diff) { pxy[0] += 0.5 + ix - window.x; pxy[1] += 0.5 + iy - window.y; pxy[0] *= scale; pxy[1] *= scale; pxy[0] += ix - window.x; // + 0.5; pxy[1] += iy - window.y; // + 0.5; } // pxy[0] += window2.x; // pxy[1] += window2.y; Loading Loading @@ -701,8 +723,8 @@ public class VegetationModel { int iy = nPix / window1.width; double [] pxy = map1[nPix].clone(); if (map_diff1) { pxy[0] += 0.5 + ix - window1.x; pxy[1] += 0.5 + iy - window1.y; pxy[0] += ix - window1.x; // + 0.5; pxy[1] += iy - window1.y; // + 0.5; } pxy[0] += window2.x; pxy[1] += window2.y; Loading @@ -724,8 +746,8 @@ public class VegetationModel { corners[dy][dx] = corners[dy][dx].clone(); corner = corners[dy][dx]; if (map_diff2) { corner[0] += x0 + dx + 0.5 - window2.x; corner[1] += y0 + dy + 0.5 - window2.y; corner[0] += x0 + dx - window2.x; // + 0.5; corner[1] += y0 + dy - window2.y; // + 0.5; } } } Loading @@ -741,8 +763,8 @@ public class VegetationModel { ( fx)*( fy)*corners[1][1][i]; } if (map_diff_out) { cxy[0] -= 0.5 + ix - window1.x; cxy[1] -= 0.5 + iy - window1.y; cxy[0] -= ix - window1.x; // + 0.5; cxy[1] -= iy - window1.y; // + 0.5; } combo_map[nPix] = cxy; } Loading Loading @@ -819,8 +841,8 @@ public class VegetationModel { corners_cw[dir][ynx] = map_in[in_indx][ynx]; } if (in_diff) { corners_cw[dir][0] += 0.5 + ix1; corners_cw[dir][1] += 0.5 + iy1; corners_cw[dir][0] += ix1; // + 0.5; corners_cw[dir][1] += iy1; // + 0.5; } corners_cw[dir][0] += out_window.x; corners_cw[dir][1] += out_window.y; Loading Loading @@ -907,8 +929,8 @@ public class VegetationModel { map_out[oindx][0] = ix0 + u; map_out[oindx][1] = iy0 + v; if (out_diff) { map_out[oindx][0] -= ox-out_window.x-0.5; map_out[oindx][1] -= oy-out_window.y-0.5; map_out[oindx][0] -= ox-out_window.x; // -0.5; map_out[oindx][1] -= oy-out_window.y; // -0.5; } } } Loading
src/main/java/com/elphel/imagej/tileprocessor/OpticalFlow.java +1 −1 Original line number Diff line number Diff line Loading @@ -176,7 +176,7 @@ public class OpticalFlow { * @param debug_level debug level */ public void fillTilesNans( public static void fillTilesNans( final double [][][] nan_tiles, final QuadCLT qthis, final int num_passes, Loading