# checkWDT.py : comparisons of parallel vs sequential DTs with weighted masks in 2D # # CC-BY Edouard.Thiel@univ-amu.fr - 10/07/2022 from chamfer2D import * import sys #------------------------------------------------------------------------------ def compare_parall_seq_DTs (img, half_mask, mask_str, multi=False, show=False) : img.init_center() img1 = img.duplicate() compute_DT_parallel (img1, half_mask) img2 = img.duplicate() if multi : scan_num = compute_sequential_DT_multi_scans (img2, half_mask) else : compute_sequential_DT_in_two_scans (img2, half_mask) equal = img1.is_equal (img2) homog = check_homogeneity_from_center (img1) print ("Image", img.m, "x", img.n, " mask", mask_str, " equal:", equal, " homog:", homog, " scan_num: "+str(scan_num) if multi else "") if show and not equal: print ("Parallel DT:") img1.show_values() if multi : compute_sequential_DT_multi_scans (img2, half_mask, show=True) else : compute_sequential_DT_in_two_scans (img2, half_mask, show=True) print("Differences with parallel DT:") img2.show_diffs (img1) print() def compare_DTs_for_masks (img_m, img_n, w_min, w_max, names, multi=False, show=False) : img = Image2D (img_m, img_n) v_coords = get_visible_coords_from_names (names) n = len(names) for v in multi_loop (n, w_min, w_max) : half_mask = HalfMask() mask_str = "" for k in range (n) : i, j = v_coords[k] half_mask.add_weighting_gsym (i, j, v[k]) if mask_str : mask_str += ", " mask_str += f"{names[k]}={v[k]}" mask_str = f"< {mask_str} >" compare_parall_seq_DTs (img, half_mask, mask_str, multi, show) #------------------------------------------------------------------------------ if __name__ == "__main__" : print (""" checkWDT.py - CC-BY Edouard.Thiel@univ-amu.fr Comparisons of parallel vs sequential DTs with weighted masks in 2D https://pageperso.lis-lab.fr/~edouard.thiel/DGMM2022/ Usage: python3 checkWDT.py [options] options: -i m_min m_max image height min and max -j n_min n_max image width min and max -w w_min w_max weight min and max -v names visible points names, e.g "abc" -h print visible point names and exit -m multi passes, default 2 passes -s show image values when differences Example: python3 checkWDT.py -v ac -s | more """) if len(sys.argv) == 1 : exit(0) m_min = 3 ; m_max = 6 n_min = 3 ; n_max = 6 w_min = 1 ; w_max = 5 names = "c" multi = False show = False try : k = 1; while k < len(sys.argv) : if sys.argv[k] == "-i" : m_min = int(sys.argv[k+1]) ; m_max = int(sys.argv[k+2]) ; k += 2 elif sys.argv[k] == "-j" : n_min = int(sys.argv[k+1]) ; n_max = int(sys.argv[k+2]) ; k += 2 elif sys.argv[k] == "-w" : w_min = int(sys.argv[k+1]) ; w_max = int(sys.argv[k+2]) ; k += 2 elif sys.argv[k] == "-v" : names = sys.argv[k+1] ; k += 1 elif sys.argv[k] == "-m" : multi = True elif sys.argv[k] == "-s" : show = True elif sys.argv[k] == "-h" : show_visible_point_names() exit (0) else : print ("Error: bad option:", sys.argv[k]) exit (1) k += 1 except IndexError: print ("Error: missing parameters") exit (1) except ValueError: exit (1) if m_min < 3 or m_max > 1000 or n_min < 3 or n_max > 1000 : print ("Error: bad image sizes, 3..1000 expected") exit (1) if w_min < 1 or w_max > 1000 : print ("Error: bad weights, 1..1000 expected") exit (1) if len(names) == 0 : print ("Error: empty visible points names") exit (1) print ("Parameters :", f"m=[{m_min}..{m_max}[,", f"n=[{n_min}..{n_max}[,", f"w=[{w_min}..{w_max}[,", f"names={names},", f"multi={multi},", f"show={show}") s = "multi" if multi else "in two" print (f"Parallel vs sequential DT {s} passes ...\n") for m in range (m_min, m_max) : for n in range (n_min, n_max) : compare_DTs_for_masks (m, n, w_min, w_max, names, multi, show)