1+ import os
2+ import pathlib
3+ import argparse
4+ import glob
5+ import numpy as np
6+ from termcolor import cprint
7+ import open3d as o3d
8+
9+ from sogmm_py .sogmm import SOGMM
10+ from sogmm_py .utils import ImageUtils , read_log_trajectory , np_to_o3d
11+
12+ if __name__ == "__main__" :
13+ parser = argparse .ArgumentParser (description = "mean shift approach py" )
14+ parser .add_argument ('--datasetname' , type = str )
15+ parser .add_argument ('--datasetroot' , type = str )
16+ parser .add_argument ('--resultsroot' , type = str )
17+ parser .add_argument ('--decimate' , type = int )
18+ parser .add_argument ('--frames' , nargs = '+' , type = int )
19+ parser .add_argument ('--tikz' , type = bool )
20+
21+ args = parser .parse_args ()
22+
23+ decimate_factor = args .decimate
24+ datasets_root = args .datasetroot
25+ dataset_name = args .datasetname
26+ results_root = args .resultsroot
27+
28+ bandwidths = np .linspace (0.01 , 0.05 , 10 )
29+ cprint (bandwidths , 'red' )
30+
31+ K = np .eye (3 )
32+ K [0 , 0 ] = 525.0 / decimate_factor
33+ K [1 , 1 ] = 525.0 / decimate_factor
34+ K [0 , 2 ] = 319.5 / decimate_factor
35+ K [1 , 2 ] = 239.5 / decimate_factor
36+
37+ W = (int )(640 / decimate_factor )
38+ H = (int )(480 / decimate_factor )
39+
40+ iu = ImageUtils (K )
41+
42+ rgb_glob_string = os .path .join (
43+ datasets_root , dataset_name + '-color/*.jpg' )
44+ cprint ('rgb glob string %s' % (rgb_glob_string ), 'green' )
45+ depth_glob_string = os .path .join (
46+ datasets_root , dataset_name + '-depth/*.png' )
47+ cprint ('depth glob string %s' % (depth_glob_string ), 'green' )
48+ traj_string = os .path .join (datasets_root , dataset_name + '-traj.log' )
49+ cprint ('traj path %s' % (traj_string ), 'green' )
50+
51+ rgb_paths = sorted (glob .glob (rgb_glob_string ))
52+ depth_paths = sorted (glob .glob (depth_glob_string ))
53+ traj = read_log_trajectory (traj_string )
54+
55+ for i , fr in enumerate (args .frames ):
56+ cprint ('processing frame %s in dataset %s' % (fr , args .datasetname ), 'grey' )
57+
58+ for b in bandwidths :
59+ results_path = os .path .join (results_root , dataset_name + '_sogmm/' + dataset_name + '_' + str (b ))
60+
61+ local_pcd_path = os .path .join (results_path , 'local_pcd_' + str (fr ) + '.pcd' )
62+ pcld_gt , _ = iu .generate_pcld_wf (traj [fr ].pose , rgb_path = rgb_paths [fr ],
63+ depth_path = depth_paths [fr ],
64+ size = (W , H ))
65+ pathlib .Path (results_path ).mkdir (parents = True , exist_ok = True )
66+
67+ sg = SOGMM (b )
68+ local_model_path = os .path .join (results_path , 'local_model_' + str (fr ) + '.pkl' )
69+ local_model = sg .fit (pcld_gt )
70+ sg .pickle_local_model (local_model , local_model_path )
71+ o3d .io .write_point_cloud (local_pcd_path , np_to_o3d (pcld_gt ))
0 commit comments