File size: 5,103 Bytes
437b5f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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)