Loading src/main/java/SuperTiles.java +56 −32 Original line number Diff line number Diff line Loading @@ -3754,9 +3754,14 @@ public class SuperTiles{ replacement_neibs[repl_indx2][np2]; int np3 = neibs2[dir2]; // planes[nsTile2][np2].getNeibBest(dir2); if ((np3 >= 0) && (np3 != np0)){ int cls = conflicts_list.size(); Conflict conflict = new Conflict(np0, np3, dir/2); if ((cls == 0) || !conflicts_list.get(cls - 1).combine(conflict)) { label_apply: { for (Conflict conf_old:conflicts_list){ if (conf_old.combine(conflict)){ break label_apply; } } conflicts_list.add(conflict); } } Loading @@ -3783,11 +3788,15 @@ public class SuperTiles{ { System.out.print("Detected conflicts:"); for (int i = 0; i < 8; i++){ if (conflict_stats[i] >0) System.out.print(" type "+i+": "+conflict_stats[i]); if (conflict_stats[i] != 0) System.out.print(" type "+i+": "+conflict_stats[i]); } System.out.println(" number of incompatible triangles = " + conflict_stats[8]+ " number of dual triangles = " + conflict_stats[9]); if (conflict_stats[8] != 0) { System.out.print(" number of incompatible triangles = " + conflict_stats[8]); } if (conflict_stats[9] != 0) { System.out.print(" number of dual triangles = " + conflict_stats[9]); } System.out.println(); } /** Loading Loading @@ -4094,29 +4103,14 @@ public class SuperTiles{ tnSurface, preferDisparity, debugLevel); int [][][] neibs = neibs_prev.clone(); for (int i = 0; i < neibs.length; i++) if (neibs_prev[i] != null){ neibs[i] = neibs_prev[i].clone(); for (int j = 0; j < neibs[i].length; j++) if (neibs_prev[i][j] != null){ neibs[i][j] = neibs_prev[i][j].clone(); } } int [][][] conflicts_old = new int [nsTiles.length][][]; // int [][][] conflicts_new = new int [nsTiles.length][][]; for (int isTile = 0; isTile < nsTiles.length; isTile++){ conflicts_old[isTile] = detectTriangularTileConflicts( nsTiles[isTile], // int nsTile0, replacement_tiles, //HashMap<Integer,Integer> replacement_tiles, // neibs_prev, // int [][][] replacement_neibs, tnSurface); // TileSurface.TileNeibs tnSurface) /* conflicts_new[isTile] = detectTriangularTileConflicts( nsTiles[isTile], // int nsTile0, replacement_tiles, //HashMap<Integer,Integer> replacement_tiles, // neibs, // int [][][] replacement_neibs, tnSurface); // TileSurface.TileNeibs tnSurface) */ } if (debugLevel > 1) { System.out.println("Involved supertiles:"); Loading Loading @@ -4162,7 +4156,7 @@ public class SuperTiles{ variant_conflicts[variant][isTile] = detectTriangularTileConflicts( nsTiles[isTile], // int nsTile0, replacement_tiles, //HashMap<Integer,Integer> replacement_tiles, // neibs, // int [][][] replacement_neibs, neibs_vars[variant], // neibs, // int [][][] replacement_neibs, tnSurface); // TileSurface.TileNeibs tnSurface) } int [] conflict_stats_new = getNumConflicts( Loading @@ -4174,14 +4168,14 @@ public class SuperTiles{ variant_conflicts_stats[variant][i] = conflict_stats_new[i]- conflict_stats_old[i]; } if (debugLevel > 0) { if (debugLevel > -1) { System.out.println("resolveMultiTriangularConflict(): resolving conflict for tile "+nsTile+ ", nl1 = "+nl1+ ", nl2 = "+nl2 + ", dir_mask = "+dir_mask+" variant = "+variant+" improvement (negative diff) = "+variant_costs_diff[variant]); } if (debugLevel > 0) { if (debugLevel > -1) { System.out.print("Conflicts difference after resolution:"); printConflictSummary(variant_conflicts_stats[variant]); } Loading @@ -4195,17 +4189,28 @@ public class SuperTiles{ for (int i = 0; i < variant_conflicts_stats[variant].length; i++){ if (variant_conflicts_stats[variant][i] < 0) { num_better += 1; } else if (variant_conflicts_stats[variant][i] < 0) { } else if (variant_conflicts_stats[variant][i] > 0) { num_worse += 1; } } num_better_worse[variant][0] = num_better; num_better_worse[variant][1] = num_worse; if ((num_worse == 0) && ((best_variant < 0) || (variant_costs_diff[variant] < variant_costs_diff[variant]))){ if ((num_worse == 0) && (variant_costs_diff[variant] <= dblTriLoss) && // not too worse ((variant_costs_diff[variant] < 0) || (num_better > 0)) && // either ((best_variant < 0) || ( num_better_worse[variant][0] > num_better_worse[best_variant][0]) || (( num_better_worse[variant][0] == num_better_worse[best_variant][0]) && (variant_costs_diff[variant] < variant_costs_diff[best_variant])))){ best_variant = variant; } } if (best_variant < 0){ if (debugLevel > 1){ System.out.println("resolveMultiTriangularConflict(): for tile "+nsTile); } if ((best_variant < 0) || (variant_costs_diff[best_variant] > dblTriLoss)){ if (debugLevel > -1) { System.out.println("resolveMultiTriangularConflict(): FAILED find a sutable solution for tile "+nsTile+ ", nl1 = "+nl1+ Loading @@ -4218,18 +4223,33 @@ public class SuperTiles{ System.out.println("resolveMultiTriangularConflict(): SUCCESS to find a sutable solution for tile "+nsTile+ ", nl1 = "+nl1+ ", nl2 = "+nl2 + ", dir_mask = "+dir_mask+" of "+ neibs_vars.length+" variants - use variant # " + best_variant+ ", dir_mask = "+dir_mask+". Of "+ neibs_vars.length+" variants - use variant # " + best_variant+ " cost difference (negative) = "+variant_costs_diff[best_variant]+" num conflict reductions = "+num_better_worse[best_variant][0]); System.out.print("Conflicts number change per type: "); printConflictSummary(variant_conflicts_stats[best_variant]); System.out.print("Conflicts before resolution: "); printConflictSummary(conflict_stats_old); // update statistics for (int i = 0; i < conflict_stats.length; i++){ conflict_stats[i] += variant_conflicts_stats[best_variant][i]; } // update conflict for (int i = 0; i < nsTiles.length; i++){ conflicts[nsTiles[i]]= variant_conflicts[best_variant][i]; } // apply resolution for (int i = 0; i < mod_supertiles.length; i++){ for (int nl = 0; nl < neibs_vars[best_variant][i].length; nl ++) if (neibs_vars[best_variant][i][nl] != null){ planes[mod_supertiles[i]][nl].setNeibBest(neibs_vars[best_variant][i][nl]); } } } } return true; } // /** * Generate variants for changing connections while preserving number of connections between each pair of tiles * each variant is free of own conflicts, but may lead to conflicts on other layers or tiles Loading Loading @@ -4360,7 +4380,7 @@ public class SuperTiles{ neib_var[4][nl2][dir_f] = selection[dir4][0] ? layers[dir4][0] : other_layer; neib_var[dir4][layers[dir4][0]][dir_r] = selection[dir4][0] ? nl2 : nl1; if (other_layer >= 0) { // only if it is connected neib_vars[var_num][dir4][other_layer][dir_r] = selection[dir4][0] ? nl1 : nl2; neib_var[dir4][other_layer][dir_r] = selection[dir4][0] ? nl1 : nl2; // null } } // diagonal connections - some make this variant invalid Loading Loading @@ -4467,9 +4487,13 @@ public class SuperTiles{ } } // trim neib_vars if (debugLevel > -1){ System.out.println("getTriangularResolutionVariants() nsTile = "+nsTile+" ACTUAL variants: "+var_num); } if (var_num == neib_vars.length) return neib_vars; int [][][][] neib_vars_trimmed = new int [var_num][][][]; for (int i = 0; i < var_num; i++ ) neib_vars_trimmed[i] = neib_vars[i]; return neib_vars_trimmed; } Loading Loading @@ -4971,7 +4995,7 @@ public class SuperTiles{ diagonalWeight, tnSurface, preferDisparity, debugLevel); -1); // debugLevel); } } else { val_weights[isTile][nl] = null; Loading src/main/java/TileProcessor.java +40 −5 Original line number Diff line number Diff line Loading @@ -3452,7 +3452,19 @@ public class TileProcessor { if (dual_tri_results[0] == 0) break; } */ for (int pass = 0; pass < 1; pass ++) { for (int pass = 0; pass < 10; pass ++) { int [] dual_tri_results = st. resolveDualTriangularConflicts( conflicts0, // int [][][] conflicts, conflicts0_stats, clt_parameters.plMaxEigen, clt_parameters.plStarOrtho, // double orthoWeight, clt_parameters.plStarDiag, // double diagonalWeight, clt_parameters.plDblTriLoss, // double diagonalWeight, clt_parameters.plPreferDisparity, 1, // final int debugLevel) clt_parameters.tileX, clt_parameters.tileY); System.out.println("Pass "+(pass+1)+": dual_tri_results (success/failures) = "+dual_tri_results[0]+" / "+dual_tri_results[1]); int [] conflict_resoultion_results = st.resolveMultiTriangularConflicts( conflicts0, // int [][][] conflicts, conflicts0_stats, Loading @@ -3464,15 +3476,38 @@ public class TileProcessor { 1, // final int debugLevel) clt_parameters.tileX, clt_parameters.tileY); System.out.println("Pass "+(pass+1)+": dual_tri_results (success/failures) = "+conflict_resoultion_results[0]+" / "+conflict_resoultion_results[1]); if (conflict_resoultion_results[0] == 0) break; System.out.println("Pass "+(pass+1)+": multi_tri_results (success/failures) = "+conflict_resoultion_results[0]+" / "+conflict_resoultion_results[1]); if ((dual_tri_results[0] == 0) &&(conflict_resoultion_results[0] == 0)) break; } int [] conflicts1_stats = st.getNumConflicts( conflicts0, -1); // debugLevel); 1); // -1); // debugLevel); st.printConflictSummary(conflicts1_stats); /* for (int pass = 0; pass < 10; pass ++) { int [] dual_tri_results = st. resolveDualTriangularConflicts( conflicts0, // int [][][] conflicts, conflicts0_stats, clt_parameters.plMaxEigen, clt_parameters.plStarOrtho, // double orthoWeight, clt_parameters.plStarDiag, // double diagonalWeight, clt_parameters.plDblTriLoss, // double diagonalWeight, clt_parameters.plPreferDisparity, 1, // final int debugLevel) clt_parameters.tileX, clt_parameters.tileY); System.out.println("Pass "+(pass+1)+": dual_tri_results (success/failures) = "+dual_tri_results[0]+" / "+dual_tri_results[1]); if (dual_tri_results[0] == 0) break; } conflicts1_stats = st.getNumConflicts( conflicts0, 1); // -1); // debugLevel); st.printConflictSummary(conflicts1_stats); */ /* // re-checking conflicts (make sure update is correct) int [][][] conflicts1r = st.detectTriangularConflicts( Loading Loading
src/main/java/SuperTiles.java +56 −32 Original line number Diff line number Diff line Loading @@ -3754,9 +3754,14 @@ public class SuperTiles{ replacement_neibs[repl_indx2][np2]; int np3 = neibs2[dir2]; // planes[nsTile2][np2].getNeibBest(dir2); if ((np3 >= 0) && (np3 != np0)){ int cls = conflicts_list.size(); Conflict conflict = new Conflict(np0, np3, dir/2); if ((cls == 0) || !conflicts_list.get(cls - 1).combine(conflict)) { label_apply: { for (Conflict conf_old:conflicts_list){ if (conf_old.combine(conflict)){ break label_apply; } } conflicts_list.add(conflict); } } Loading @@ -3783,11 +3788,15 @@ public class SuperTiles{ { System.out.print("Detected conflicts:"); for (int i = 0; i < 8; i++){ if (conflict_stats[i] >0) System.out.print(" type "+i+": "+conflict_stats[i]); if (conflict_stats[i] != 0) System.out.print(" type "+i+": "+conflict_stats[i]); } System.out.println(" number of incompatible triangles = " + conflict_stats[8]+ " number of dual triangles = " + conflict_stats[9]); if (conflict_stats[8] != 0) { System.out.print(" number of incompatible triangles = " + conflict_stats[8]); } if (conflict_stats[9] != 0) { System.out.print(" number of dual triangles = " + conflict_stats[9]); } System.out.println(); } /** Loading Loading @@ -4094,29 +4103,14 @@ public class SuperTiles{ tnSurface, preferDisparity, debugLevel); int [][][] neibs = neibs_prev.clone(); for (int i = 0; i < neibs.length; i++) if (neibs_prev[i] != null){ neibs[i] = neibs_prev[i].clone(); for (int j = 0; j < neibs[i].length; j++) if (neibs_prev[i][j] != null){ neibs[i][j] = neibs_prev[i][j].clone(); } } int [][][] conflicts_old = new int [nsTiles.length][][]; // int [][][] conflicts_new = new int [nsTiles.length][][]; for (int isTile = 0; isTile < nsTiles.length; isTile++){ conflicts_old[isTile] = detectTriangularTileConflicts( nsTiles[isTile], // int nsTile0, replacement_tiles, //HashMap<Integer,Integer> replacement_tiles, // neibs_prev, // int [][][] replacement_neibs, tnSurface); // TileSurface.TileNeibs tnSurface) /* conflicts_new[isTile] = detectTriangularTileConflicts( nsTiles[isTile], // int nsTile0, replacement_tiles, //HashMap<Integer,Integer> replacement_tiles, // neibs, // int [][][] replacement_neibs, tnSurface); // TileSurface.TileNeibs tnSurface) */ } if (debugLevel > 1) { System.out.println("Involved supertiles:"); Loading Loading @@ -4162,7 +4156,7 @@ public class SuperTiles{ variant_conflicts[variant][isTile] = detectTriangularTileConflicts( nsTiles[isTile], // int nsTile0, replacement_tiles, //HashMap<Integer,Integer> replacement_tiles, // neibs, // int [][][] replacement_neibs, neibs_vars[variant], // neibs, // int [][][] replacement_neibs, tnSurface); // TileSurface.TileNeibs tnSurface) } int [] conflict_stats_new = getNumConflicts( Loading @@ -4174,14 +4168,14 @@ public class SuperTiles{ variant_conflicts_stats[variant][i] = conflict_stats_new[i]- conflict_stats_old[i]; } if (debugLevel > 0) { if (debugLevel > -1) { System.out.println("resolveMultiTriangularConflict(): resolving conflict for tile "+nsTile+ ", nl1 = "+nl1+ ", nl2 = "+nl2 + ", dir_mask = "+dir_mask+" variant = "+variant+" improvement (negative diff) = "+variant_costs_diff[variant]); } if (debugLevel > 0) { if (debugLevel > -1) { System.out.print("Conflicts difference after resolution:"); printConflictSummary(variant_conflicts_stats[variant]); } Loading @@ -4195,17 +4189,28 @@ public class SuperTiles{ for (int i = 0; i < variant_conflicts_stats[variant].length; i++){ if (variant_conflicts_stats[variant][i] < 0) { num_better += 1; } else if (variant_conflicts_stats[variant][i] < 0) { } else if (variant_conflicts_stats[variant][i] > 0) { num_worse += 1; } } num_better_worse[variant][0] = num_better; num_better_worse[variant][1] = num_worse; if ((num_worse == 0) && ((best_variant < 0) || (variant_costs_diff[variant] < variant_costs_diff[variant]))){ if ((num_worse == 0) && (variant_costs_diff[variant] <= dblTriLoss) && // not too worse ((variant_costs_diff[variant] < 0) || (num_better > 0)) && // either ((best_variant < 0) || ( num_better_worse[variant][0] > num_better_worse[best_variant][0]) || (( num_better_worse[variant][0] == num_better_worse[best_variant][0]) && (variant_costs_diff[variant] < variant_costs_diff[best_variant])))){ best_variant = variant; } } if (best_variant < 0){ if (debugLevel > 1){ System.out.println("resolveMultiTriangularConflict(): for tile "+nsTile); } if ((best_variant < 0) || (variant_costs_diff[best_variant] > dblTriLoss)){ if (debugLevel > -1) { System.out.println("resolveMultiTriangularConflict(): FAILED find a sutable solution for tile "+nsTile+ ", nl1 = "+nl1+ Loading @@ -4218,18 +4223,33 @@ public class SuperTiles{ System.out.println("resolveMultiTriangularConflict(): SUCCESS to find a sutable solution for tile "+nsTile+ ", nl1 = "+nl1+ ", nl2 = "+nl2 + ", dir_mask = "+dir_mask+" of "+ neibs_vars.length+" variants - use variant # " + best_variant+ ", dir_mask = "+dir_mask+". Of "+ neibs_vars.length+" variants - use variant # " + best_variant+ " cost difference (negative) = "+variant_costs_diff[best_variant]+" num conflict reductions = "+num_better_worse[best_variant][0]); System.out.print("Conflicts number change per type: "); printConflictSummary(variant_conflicts_stats[best_variant]); System.out.print("Conflicts before resolution: "); printConflictSummary(conflict_stats_old); // update statistics for (int i = 0; i < conflict_stats.length; i++){ conflict_stats[i] += variant_conflicts_stats[best_variant][i]; } // update conflict for (int i = 0; i < nsTiles.length; i++){ conflicts[nsTiles[i]]= variant_conflicts[best_variant][i]; } // apply resolution for (int i = 0; i < mod_supertiles.length; i++){ for (int nl = 0; nl < neibs_vars[best_variant][i].length; nl ++) if (neibs_vars[best_variant][i][nl] != null){ planes[mod_supertiles[i]][nl].setNeibBest(neibs_vars[best_variant][i][nl]); } } } } return true; } // /** * Generate variants for changing connections while preserving number of connections between each pair of tiles * each variant is free of own conflicts, but may lead to conflicts on other layers or tiles Loading Loading @@ -4360,7 +4380,7 @@ public class SuperTiles{ neib_var[4][nl2][dir_f] = selection[dir4][0] ? layers[dir4][0] : other_layer; neib_var[dir4][layers[dir4][0]][dir_r] = selection[dir4][0] ? nl2 : nl1; if (other_layer >= 0) { // only if it is connected neib_vars[var_num][dir4][other_layer][dir_r] = selection[dir4][0] ? nl1 : nl2; neib_var[dir4][other_layer][dir_r] = selection[dir4][0] ? nl1 : nl2; // null } } // diagonal connections - some make this variant invalid Loading Loading @@ -4467,9 +4487,13 @@ public class SuperTiles{ } } // trim neib_vars if (debugLevel > -1){ System.out.println("getTriangularResolutionVariants() nsTile = "+nsTile+" ACTUAL variants: "+var_num); } if (var_num == neib_vars.length) return neib_vars; int [][][][] neib_vars_trimmed = new int [var_num][][][]; for (int i = 0; i < var_num; i++ ) neib_vars_trimmed[i] = neib_vars[i]; return neib_vars_trimmed; } Loading Loading @@ -4971,7 +4995,7 @@ public class SuperTiles{ diagonalWeight, tnSurface, preferDisparity, debugLevel); -1); // debugLevel); } } else { val_weights[isTile][nl] = null; Loading
src/main/java/TileProcessor.java +40 −5 Original line number Diff line number Diff line Loading @@ -3452,7 +3452,19 @@ public class TileProcessor { if (dual_tri_results[0] == 0) break; } */ for (int pass = 0; pass < 1; pass ++) { for (int pass = 0; pass < 10; pass ++) { int [] dual_tri_results = st. resolveDualTriangularConflicts( conflicts0, // int [][][] conflicts, conflicts0_stats, clt_parameters.plMaxEigen, clt_parameters.plStarOrtho, // double orthoWeight, clt_parameters.plStarDiag, // double diagonalWeight, clt_parameters.plDblTriLoss, // double diagonalWeight, clt_parameters.plPreferDisparity, 1, // final int debugLevel) clt_parameters.tileX, clt_parameters.tileY); System.out.println("Pass "+(pass+1)+": dual_tri_results (success/failures) = "+dual_tri_results[0]+" / "+dual_tri_results[1]); int [] conflict_resoultion_results = st.resolveMultiTriangularConflicts( conflicts0, // int [][][] conflicts, conflicts0_stats, Loading @@ -3464,15 +3476,38 @@ public class TileProcessor { 1, // final int debugLevel) clt_parameters.tileX, clt_parameters.tileY); System.out.println("Pass "+(pass+1)+": dual_tri_results (success/failures) = "+conflict_resoultion_results[0]+" / "+conflict_resoultion_results[1]); if (conflict_resoultion_results[0] == 0) break; System.out.println("Pass "+(pass+1)+": multi_tri_results (success/failures) = "+conflict_resoultion_results[0]+" / "+conflict_resoultion_results[1]); if ((dual_tri_results[0] == 0) &&(conflict_resoultion_results[0] == 0)) break; } int [] conflicts1_stats = st.getNumConflicts( conflicts0, -1); // debugLevel); 1); // -1); // debugLevel); st.printConflictSummary(conflicts1_stats); /* for (int pass = 0; pass < 10; pass ++) { int [] dual_tri_results = st. resolveDualTriangularConflicts( conflicts0, // int [][][] conflicts, conflicts0_stats, clt_parameters.plMaxEigen, clt_parameters.plStarOrtho, // double orthoWeight, clt_parameters.plStarDiag, // double diagonalWeight, clt_parameters.plDblTriLoss, // double diagonalWeight, clt_parameters.plPreferDisparity, 1, // final int debugLevel) clt_parameters.tileX, clt_parameters.tileY); System.out.println("Pass "+(pass+1)+": dual_tri_results (success/failures) = "+dual_tri_results[0]+" / "+dual_tri_results[1]); if (dual_tri_results[0] == 0) break; } conflicts1_stats = st.getNumConflicts( conflicts0, 1); // -1); // debugLevel); st.printConflictSummary(conflicts1_stats); */ /* // re-checking conflicts (make sure update is correct) int [][][] conflicts1r = st.detectTriangularConflicts( Loading