def pointing_correction(tile, i): """ Compute the translation that corrects the pointing error on a pair of tiles. Args: tile: dictionary containing the information needed to process the tile i: index of the processed pair """ x, y, w, h = tile['coordinates'] out_dir = os.path.join(tile['dir'], 'pair_{}'.format(i)) img1 = cfg['images'][0]['img'] rpc1 = cfg['images'][0]['rpc'] img2 = cfg['images'][i]['img'] rpc2 = cfg['images'][i]['rpc'] if cfg['skip_existing'] and os.path.isfile( os.path.join(out_dir, 'pointing.txt')): print('pointing correction done on tile {} {} pair {}'.format(x, y, i)) return # correct pointing error print('correcting pointing on tile {} {} pair {}...'.format(x, y, i)) try: if (('pointing_error_correction_method' in cfg) and ('pointing_error_correction_degree' in cfg)): pec_degree = cfg['pointing_error_correction_degree'] pec_method = cfg['pointing_error_correction_method'] apply_rectification = cfg['apply_rectification'] else: pec_degree = 'analytic' pec_method = 1 apply_rectification = True A, m, F = pointing_accuracy.compute_correction(img1, rpc1, img2, rpc2, x, y, w, h, pec_method, pec_degree, apply_rectification) except common.RunFailure as e: stderr = os.path.join(out_dir, 'stderr.log') with open(stderr, 'w') as f: f.write('ERROR during pointing correction with cmd: %s\n' % e[0]['command']) f.write('Stop processing this pair\n') return if A is not None: # A is the correction matrix np.savetxt(os.path.join(out_dir, 'pointing.txt'), A, fmt='%6.12f') if m is not None: # m is the list of sift matches np.savetxt(os.path.join(out_dir, 'sift_matches.txt'), m, fmt='%9.3f') np.savetxt(os.path.join(out_dir, 'center_keypts_sec.txt'), np.mean(m[:, 2:], 0), fmt='%9.3f') if cfg['debug']: visualisation.plot_matches( img1, img2, rpc1, rpc2, m, x, y, w, h, os.path.join(out_dir, 'sift_matches_pointing.png')) if F is not None: # A is the correction matrix np.savetxt(os.path.join(out_dir, 'affine_fundamental_matrix.txt'), F, fmt='%6.12f')
def pointing_correction(tile, i): """ Compute the translation that corrects the pointing error on a pair of tiles. Args: tile: dictionary containing the information needed to process the tile i: index of the processed pair """ x, y, w, h = tile['coordinates'] out_dir = os.path.join(tile['dir'], 'pair_{}'.format(i)) img1 = cfg['images'][0]['img'] rpc1 = cfg['images'][0]['rpc'] img2 = cfg['images'][i]['img'] rpc2 = cfg['images'][i]['rpc'] if cfg['skip_existing'] and os.path.isfile(os.path.join(out_dir, 'pointing.txt')): print('pointing correction done on tile {} {} pair {}'.format(x, y, i)) return # correct pointing error print('correcting pointing on tile {} {} pair {}...'.format(x, y, i)) try: A, m = pointing_accuracy.compute_correction(img1, rpc1, img2, rpc2, x, y, w, h) except common.RunFailure as e: stderr = os.path.join(out_dir, 'stderr.log') with open(stderr, 'w') as f: f.write('ERROR during pointing correction with cmd: %s\n' % e[0]['command']) f.write('Stop processing this pair\n') return if A is not None: # A is the correction matrix np.savetxt(os.path.join(out_dir, 'pointing.txt'), A, fmt='%6.3f') if m is not None: # m is the list of sift matches np.savetxt(os.path.join(out_dir, 'sift_matches.txt'), m, fmt='%9.3f') np.savetxt(os.path.join(out_dir, 'center_keypts_sec.txt'), np.mean(m[:, 2:], 0), fmt='%9.3f') if cfg['debug']: visualisation.plot_matches(img1, img2, rpc1, rpc2, m, x, y, w, h, os.path.join(out_dir, 'sift_matches_pointing.png'))
def pointing_correction(tile, i): """ Compute the translation that corrects the pointing error on a pair of tiles. Args: tile: dictionary containing the information needed to process the tile i: index of the processed pair """ x, y, w, h = tile['coordinates'] out_dir = os.path.join(tile['dir'], 'pair_{}'.format(i)) img1 = cfg['images'][0]['img'] rpc1 = cfg['images'][0]['rpc'] img2 = cfg['images'][i]['img'] rpc2 = cfg['images'][i]['rpc'] # correct pointing error print('correcting pointing on tile {} {} pair {}...'.format(x, y, i)) try: A, m = pointing_accuracy.compute_correction(img1, rpc1, img2, rpc2, x, y, w, h) except common.RunFailure as e: stderr = os.path.join(out_dir, 'stderr.log') with open(stderr, 'w') as f: f.write('ERROR during pointing correction with cmd: %s\n' % e[0]['command']) f.write('Stop processing this pair\n') return if A is not None: # A is the correction matrix np.savetxt(os.path.join(out_dir, 'pointing.txt'), A, fmt='%6.3f') if m is not None: # m is the list of sift matches np.savetxt(os.path.join(out_dir, 'sift_matches.txt'), m, fmt='%9.3f') np.savetxt(os.path.join(out_dir, 'center_keypts_sec.txt'), np.mean(m[:, 2:], 0), fmt='%9.3f') if cfg['debug']: visualisation.plot_matches( img1, img2, rpc1, rpc2, m, x, y, w, h, os.path.join(out_dir, 'sift_matches_pointing.png'))
def pointing_correction(tile, i): """ Compute the translation that corrects the pointing error on a pair of tiles. Args: tile: dictionary containing the information needed to process the tile i: index of the processed pair """ x, y, w, h = tile['coordinates'] out_dir = os.path.join(tile['dir'], 'pair_{}'.format(i)) img1 = cfg['images'][0]['img'] rpc1 = cfg['images'][0]['rpc'] img2 = cfg['images'][i]['img'] rpc2 = cfg['images'][i]['rpc'] if cfg['skip_existing'] and os.path.isfile( os.path.join(out_dir, 'pointing.txt')): print('pointing correction done on tile {} {} pair {}'.format(x, y, i)) return # correct pointing error print('correcting pointing on tile {} {} pair {}...'.format(x, y, i)) A, m = pointing_accuracy.compute_correction(img1, rpc1, img2, rpc2, x, y, w, h) if A is not None: # A is the correction matrix np.savetxt(os.path.join(out_dir, 'pointing.txt'), A, fmt='%6.3f') if m is not None: # m is the list of sift matches np.savetxt(os.path.join(out_dir, 'sift_matches.txt'), m, fmt='%9.3f') np.savetxt(os.path.join(out_dir, 'center_keypts_sec.txt'), np.mean(m[:, 2:], 0), fmt='%9.3f') if cfg['debug']: visualisation.plot_matches( img1, img2, rpc1, rpc2, m, x, y, w, h, os.path.join(out_dir, 'sift_matches_pointing.png'))