MCPcopy Index your code
hub / github.com/ActiveVisionLab/DFNet / fix_coord

Function fix_coord

dataset_loaders/load_7Scenes.py:279–344  ·  view source on GitHub ↗

fix coord for 7 Scenes to align with llff style dataset

(args, train_set, val_set, pose_avg_stats_file='', rescale_coord=True)

Source from the content-addressed store, hash-verified

277 return train_set, val_set
278
279def fix_coord(args, train_set, val_set, pose_avg_stats_file='', rescale_coord=True):
280 ''' fix coord for 7 Scenes to align with llff style dataset '''
281 # This is only to store a pre-calculated pose average stats of the dataset
282 if args.save_pose_avg_stats:
283 pdb.set_trace()
284 if pose_avg_stats_file == '':
285 print('pose_avg_stats_file location unspecified, please double check...')
286 sys.exit()
287
288 all_poses = train_set.poses
289 all_poses = all_poses.reshape(all_poses.shape[0], 3, 4)
290 all_poses, pose_avg = center_poses(all_poses)
291
292 # save pose_avg to pose_avg_stats.txt
293 np.savetxt(pose_avg_stats_file, pose_avg)
294 print('pose_avg_stats.txt successfully saved')
295 sys.exit()
296
297 # get all poses (train+val)
298 train_poses = train_set.poses
299 val_poses = val_set.poses
300 all_poses = np.concatenate([train_poses, val_poses])
301
302 # Center the poses for ndc
303 all_poses = all_poses.reshape(all_poses.shape[0], 3, 4)
304
305 # Here we use either pre-stored pose average stats or calculate pose average stats on the flight to center the poses
306 if args.load_pose_avg_stats:
307 pose_avg_from_file = np.loadtxt(pose_avg_stats_file)
308 all_poses, pose_avg = center_poses(all_poses, pose_avg_from_file)
309 else:
310 all_poses, pose_avg = center_poses(all_poses)
311
312 ### args.fix_coord, obsolete flag
313 # Correct axis to LLFF Style y,z -> -y,-z
314 last_row = np.tile(np.array([0, 0, 0, 1]), (len(all_poses), 1, 1)) # (N_images, 1, 4)
315 all_poses = np.concatenate([all_poses, last_row], 1)
316
317 # correct rotation matrix from "up left forward" to "up right backward"
318 flip_M = np.array([[1,0,0,0],[0,-1,0,0],[0,0,-1,0],[0,0,0,1]]) # Mirror matrix that flip y & z direction
319 flip_M = np.repeat(flip_M[None,:], all_poses.shape[0], axis=0)
320
321 # all_poses = flip_M@all_poses@flip_M.transpose((0,2,1)) # This is correct M*[R|T]*M.T
322 all_poses = flip_M@(all_poses@flip_M) # bug here M*([R|T]*M)
323 all_poses = all_poses[:,:3,:4]
324
325 bounds = np.array([train_set.near, train_set.far]) # manual tuned
326
327 if rescale_coord:
328 sc=train_set.pose_scale # manual tuned factor, align with colmap scale
329 all_poses[:,:3,3] *= sc
330
331 ### quite ugly ###
332 # move center of camera pose
333 if train_set.move_all_cam_vec != [0.,0.,0.]:
334 all_poses[:, :3, 3] += train_set.move_all_cam_vec
335
336 if train_set.pose_scale2 != 1.0:

Callers 2

load_7Scenes_dataloaderFunction · 0.70

Calls 1

center_posesFunction · 0.70

Tested by

no test coverage detected