def rectification_pair(tile, i): """ Rectify a pair of images on a given tile. Args: tile: dictionary containing the information needed to process a tile. i: index of the processed pair """ out_dir = os.path.join(tile['dir'], 'pair_{}'.format(i)) x, y, w, h = tile['coordinates'] img1 = cfg['images'][0]['img'] rpc1 = cfg['images'][0]['rpc'] img2 = cfg['images'][i]['img'] rpc2 = cfg['images'][i]['rpc'] pointing = os.path.join(cfg['out_dir'], 'global_pointing_pair_{}.txt'.format(i)) outputs = ['disp_min_max.txt', 'rectified_ref.tif', 'rectified_sec.tif'] if cfg['skip_existing'] and all( os.path.isfile(os.path.join(out_dir, f)) for f in outputs): print('rectification done on tile {} {} pair {}'.format(x, y, i)) return print('rectifying tile {} {} pair {}...'.format(x, y, i)) try: A = np.loadtxt(os.path.join(out_dir, 'pointing.txt')) except IOError: A = np.loadtxt(pointing) try: m = np.loadtxt(os.path.join(out_dir, 'sift_matches.txt')) except IOError: m = None rect1 = os.path.join(out_dir, 'rectified_ref.tif') rect2 = os.path.join(out_dir, 'rectified_sec.tif') H1, H2, disp_min, disp_max = rectification.rectify_pair( img1, img2, rpc1, rpc2, x, y, w, h, rect1, rect2, A, m, hmargin=cfg['horizontal_margin'], vmargin=cfg['vertical_margin']) np.savetxt(os.path.join(out_dir, 'H_ref.txt'), H1, fmt='%12.6f') np.savetxt(os.path.join(out_dir, 'H_sec.txt'), H2, fmt='%12.6f') np.savetxt(os.path.join(out_dir, 'disp_min_max.txt'), [disp_min, disp_max], fmt='%3.1f') if cfg['clean_intermediate']: common.remove(os.path.join(out_dir, 'pointing.txt')) common.remove(os.path.join(out_dir, 'sift_matches.txt'))
def rectification_pair(tile, i): """ Rectify a pair of images on a given tile. Args: tile: dictionary containing the information needed to process a tile. i: index of the processed pair """ out_dir = os.path.join(tile['dir'], 'pair_{}'.format(i)) x, y, w, h = tile['coordinates'] img1 = cfg['images'][0]['img'] rpc1 = cfg['images'][0]['rpc'] img2 = cfg['images'][i]['img'] rpc2 = cfg['images'][i]['rpc'] pointing = os.path.join(cfg['out_dir'], 'global_pointing_pair_{}.txt'.format(i)) outputs = ['disp_min_max.txt', 'rectified_ref.tif', 'rectified_sec.tif'] if os.path.exists(os.path.join(out_dir, 'stderr.log')): print('rectification: stderr.log exists') print('pair_{} not processed on tile {} {}'.format(i, x, y)) return if cfg['skip_existing'] and all( os.path.isfile(os.path.join(out_dir, f)) for f in outputs): print('rectification done on tile {} {} pair {}'.format(x, y, i)) return print('rectifying tile {} {} pair {}...'.format(x, y, i)) try: A = np.loadtxt(os.path.join(out_dir, 'pointing.txt')) except IOError: A = np.loadtxt(pointing) try: m = np.loadtxt(os.path.join(out_dir, 'sift_matches.txt')) except IOError: m = None x, y, w, h = tile['coordinates'] cur_dir = os.path.join(tile['dir'], 'pair_{}'.format(i)) for n in tile['neighborhood_dirs']: nei_dir = os.path.join(tile['dir'], n, 'pair_{}'.format(i)) if os.path.exists(nei_dir) and not os.path.samefile(cur_dir, nei_dir): sift_from_neighborhood = os.path.join(nei_dir, 'sift_matches.txt') try: m_n = np.loadtxt(sift_from_neighborhood) # added sifts in the ellipse of semi axes : (3*w/4, 3*h/4) m_n = m_n[np.where( np.linalg.norm([(m_n[:, 0] - (x + w / 2)) / w, (m_n[:, 1] - (y + h / 2)) / h], axis=0) < 3.0 / 4)] if m is None: m = m_n else: m = np.concatenate((m, m_n)) except IOError: print('%s does not exist' % sift_from_neighborhood) rect1 = os.path.join(out_dir, 'rectified_ref.tif') rect2 = os.path.join(out_dir, 'rectified_sec.tif') H1, H2, disp_min, disp_max = rectification.rectify_pair( img1, img2, rpc1, rpc2, x, y, w, h, rect1, rect2, A, m, hmargin=cfg['horizontal_margin'], vmargin=cfg['vertical_margin']) np.savetxt(os.path.join(out_dir, 'H_ref.txt'), H1, fmt='%12.6f') np.savetxt(os.path.join(out_dir, 'H_sec.txt'), H2, fmt='%12.6f') np.savetxt(os.path.join(out_dir, 'disp_min_max.txt'), [disp_min, disp_max], fmt='%3.1f') if cfg['clean_intermediate']: common.remove(os.path.join(out_dir, 'pointing.txt')) common.remove(os.path.join(out_dir, 'sift_matches.txt'))
def rectification_pair(tile, i): """ Rectify a pair of images on a given tile. Args: tile: dictionary containing the information needed to process a tile. i: index of the processed pair """ out_dir = os.path.join(tile['dir'], 'pair_{}'.format(i)) x, y, w, h = tile['coordinates'] img1 = cfg['images'][0]['img'] rpc1 = cfg['images'][0]['rpc'] img2 = cfg['images'][i]['img'] rpc2 = cfg['images'][i]['rpc'] pointing = os.path.join(cfg['out_dir'], 'global_pointing_pair_{}.txt'.format(i)) outputs = ['disp_min_max.txt', 'rectified_ref.tif', 'rectified_sec.tif'] if os.path.exists(os.path.join(out_dir, 'stderr.log')): print('rectification: stderr.log exists') print('pair_{} not processed on tile {} {}'.format(i, x, y)) return if cfg['skip_existing'] and all(os.path.isfile(os.path.join(out_dir, f)) for f in outputs): print('rectification done on tile {} {} pair {}'.format(x, y, i)) return print('rectifying tile {} {} pair {}...'.format(x, y, i)) try: A = np.loadtxt(os.path.join(out_dir, 'pointing.txt')) except IOError: A = np.loadtxt(pointing) try: m = np.loadtxt(os.path.join(out_dir, 'sift_matches.txt')) except IOError: m = None x, y, w, h = tile['coordinates'] cur_dir = os.path.join(tile['dir'],'pair_{}'.format(i)) for n in tile['neighborhood_dirs']: nei_dir = os.path.join(tile['dir'], n, 'pair_{}'.format(i)) if os.path.exists(nei_dir) and not os.path.samefile(cur_dir, nei_dir): sift_from_neighborhood = os.path.join(nei_dir, 'sift_matches.txt') try: m_n = np.loadtxt(sift_from_neighborhood) # added sifts in the ellipse of semi axes : (3*w/4, 3*h/4) m_n = m_n[np.where(np.linalg.norm([(m_n[:,0]-(x+w/2))/w, (m_n[:,1]-(y+h/2))/h], axis=0) < 3.0/4)] if m is None: m = m_n else: m = np.concatenate((m, m_n)) except IOError: print('%s does not exist' % sift_from_neighborhood) rect1 = os.path.join(out_dir, 'rectified_ref.tif') rect2 = os.path.join(out_dir, 'rectified_sec.tif') H1, H2, disp_min, disp_max = rectification.rectify_pair(img1, img2, rpc1, rpc2, x, y, w, h, rect1, rect2, A, m, hmargin=cfg['horizontal_margin'], vmargin=cfg['vertical_margin']) np.savetxt(os.path.join(out_dir, 'H_ref.txt'), H1, fmt='%12.6f') np.savetxt(os.path.join(out_dir, 'H_sec.txt'), H2, fmt='%12.6f') np.savetxt(os.path.join(out_dir, 'disp_min_max.txt'), [disp_min, disp_max], fmt='%3.1f') if cfg['clean_intermediate']: common.remove(os.path.join(out_dir,'pointing.txt')) common.remove(os.path.join(out_dir,'sift_matches.txt'))