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]['rpcm'] img2 = cfg['images'][i]['img'] rpc2 = cfg['images'][i]['rpcm'] # correct pointing error print('correcting pointing on tile {} {} pair {}...'.format(x, y, i)) method = 'relative' if cfg[ 'relative_sift_match_thresh'] is True else 'absolute' A, m = pointing_accuracy.compute_correction(img1, img2, rpc1, rpc2, x, y, w, h, method, cfg['sift_match_thresh'], cfg['max_pointing_error']) 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, os.path.join(out_dir, 'sift_matches_pointing.png'), x, y, w, h)
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'))