Spaces:
Running
on
Zero
Running
on
Zero
| import argparse | |
| import glob | |
| import math | |
| import subprocess | |
| import numpy as np | |
| import os | |
| import tqdm | |
| import torch | |
| import torch.nn as nn | |
| import cv2 | |
| from darkfeat import DarkFeat | |
| from utils import matching | |
| def darkfeat_pre(img, cuda): | |
| H, W = img.shape[0], img.shape[1] | |
| inp = img.copy() | |
| inp = inp.transpose(2, 0, 1) | |
| inp = torch.from_numpy(inp) | |
| inp = torch.autograd.Variable(inp).view(1, 3, H, W) | |
| if cuda: | |
| inp = inp.cuda() | |
| return inp | |
| if __name__ == '__main__': | |
| # Parse command line arguments. | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument('--H', type=int, default=int(640)) | |
| parser.add_argument('--W', type=int, default=int(960)) | |
| parser.add_argument('--histeq', action='store_true') | |
| parser.add_argument('--model_path', type=str) | |
| parser.add_argument('--dataset_dir', type=str, default='/data/hyz/MID/') | |
| opt = parser.parse_args() | |
| sizer = (opt.W, opt.H) | |
| focallength_x = 4.504986436499113e+03/(6744/sizer[0]) | |
| focallength_y = 4.513311442889859e+03/(4502/sizer[1]) | |
| K = np.eye(3) | |
| K[0,0] = focallength_x | |
| K[1,1] = focallength_y | |
| K[0,2] = 3.363322177533149e+03/(6744/sizer[0])# * 0.5 | |
| K[1,2] = 2.291824660547715e+03/(4502/sizer[1])# * 0.5 | |
| Kinv = np.linalg.inv(K) | |
| Kinvt = np.transpose(Kinv) | |
| cuda = True | |
| if cuda: | |
| darkfeat = DarkFeat(opt.model_path).cuda().eval() | |
| for scene in ['Indoor', 'Outdoor']: | |
| base_save = './result/' + scene + '/' | |
| dir_base = opt.dataset_dir + '/' + scene + '/' | |
| pair_list = sorted(os.listdir(dir_base)) | |
| for pair in tqdm.tqdm(pair_list): | |
| opention = 1 | |
| if scene == 'Outdoor': | |
| pass | |
| else: | |
| if int(pair[4::]) <= 17: | |
| opention = 0 | |
| else: | |
| pass | |
| name=[] | |
| files = sorted(os.listdir(dir_base+pair)) | |
| for file_ in files: | |
| if file_.endswith('.cr2'): | |
| name.append(file_[0:9]) | |
| ISO = ['00100', '00200', '00400', '00800', '01600', '03200', '06400', '12800'] | |
| if opention == 1: | |
| Shutter_speed = ['0.005','0.01','0.025','0.05','0.17','0.5'] | |
| else: | |
| Shutter_speed = ['0.01','0.02','0.05','0.1','0.3','1'] | |
| E_GT = np.load(dir_base+pair+'/GT_Correspondence/'+'E_estimated.npy') | |
| F_GT = np.dot(np.dot(Kinvt,E_GT),Kinv) | |
| R_GT = np.load(dir_base+pair+'/GT_Correspondence/'+'R_GT.npy') | |
| t_GT = np.load(dir_base+pair+'/GT_Correspondence/'+'T_GT.npy') | |
| id0, id1 = sorted([ int(i.split('/')[-1]) for i in glob.glob(f'{dir_base+pair}/?????') ]) | |
| cnt = 0 | |
| for iso in ISO: | |
| for ex in Shutter_speed: | |
| dark_name1 = name[0] + iso+'_'+ex+'_'+scene+'.npy' | |
| dark_name2 = name[1] + iso+'_'+ex+'_'+scene+'.npy' | |
| if not opt.histeq: | |
| dst_T1_None = f'{dir_base}{pair}/{id0:05d}-npy-nohisteq/{dark_name1}' | |
| dst_T2_None = f'{dir_base}{pair}/{id1:05d}-npy-nohisteq/{dark_name2}' | |
| img1_orig_None = np.load(dst_T1_None) | |
| img2_orig_None = np.load(dst_T2_None) | |
| dir_save = base_save + pair + '/None/' | |
| img_input1 = darkfeat_pre(img1_orig_None.astype('float32')/255.0, cuda) | |
| img_input2 = darkfeat_pre(img2_orig_None.astype('float32')/255.0, cuda) | |
| else: | |
| dst_T1_histeq = f'{dir_base}{pair}/{id0:05d}-npy/{dark_name1}' | |
| dst_T2_histeq = f'{dir_base}{pair}/{id1:05d}-npy/{dark_name2}' | |
| img1_orig_histeq = np.load(dst_T1_histeq) | |
| img2_orig_histeq = np.load(dst_T2_histeq) | |
| dir_save = base_save + pair + '/HistEQ/' | |
| img_input1 = darkfeat_pre(img1_orig_histeq.astype('float32')/255.0, cuda) | |
| img_input2 = darkfeat_pre(img2_orig_histeq.astype('float32')/255.0, cuda) | |
| result1 = darkfeat({'image': img_input1}) | |
| result2 = darkfeat({'image': img_input2}) | |
| mkpts0, mkpts1, _ = matching.match_descriptors( | |
| cv2.KeyPoint_convert(result1['keypoints'].detach().cpu().float().numpy()), result1['descriptors'].detach().cpu().numpy(), | |
| cv2.KeyPoint_convert(result2['keypoints'].detach().cpu().float().numpy()), result2['descriptors'].detach().cpu().numpy(), | |
| ORB=False | |
| ) | |
| POINT_1_dir = dir_save+f'DarkFeat/POINT_1/' | |
| POINT_2_dir = dir_save+f'DarkFeat/POINT_2/' | |
| subprocess.check_output(['mkdir', '-p', POINT_1_dir]) | |
| subprocess.check_output(['mkdir', '-p', POINT_2_dir]) | |
| np.save(POINT_1_dir+dark_name1[0:-3]+'npy',mkpts0) | |
| np.save(POINT_2_dir+dark_name2[0:-3]+'npy',mkpts1) | |