MCPcopy Create free account
hub / github.com/ActiveVisionLab/DFNet / fix_coord

Function fix_coord

dataset_loaders/load_Cambridge.py:277–347  ·  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

275 return train_set, val_set
276
277def fix_coord(args, train_set, val_set, pose_avg_stats_file='', rescale_coord=True):
278 ''' fix coord for 7 Scenes to align with llff style dataset '''
279
280 # This is only to store a pre-calculated pose average stats of the dataset
281 if args.save_pose_avg_stats:
282 pdb.set_trace()
283 if pose_avg_stats_file == '':
284 print('pose_avg_stats_file location unspecified, please double check...')
285 sys.exit()
286
287 all_poses = train_set.poses
288 all_poses = all_poses.reshape(all_poses.shape[0], 3, 4)
289 all_poses, pose_avg = center_poses(all_poses)
290
291 # save pose_avg to pose_avg_stats.txt
292 np.savetxt(pose_avg_stats_file, pose_avg)
293 print('pose_avg_stats.txt successfully saved')
294 sys.exit()
295
296 # get all poses (train+val)
297 train_poses = train_set.poses
298
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 # Correct axis to LLFF Style y,z -> -y,-z
313 last_row = np.tile(np.array([0, 0, 0, 1]), (len(all_poses), 1, 1)) # (N_images, 1, 4)
314 all_poses = np.concatenate([all_poses, last_row], 1)
315
316 # rotate tpose 90 degrees at x axis # only corrected translation position
317 all_poses = rot_phi(180/180.*np.pi) @ all_poses
318
319 # correct view direction except mirror with gt view
320 all_poses[:,:3,:3] = -all_poses[:,:3,:3]
321
322 # camera direction mirror at x axis mod1 R' = R @ mirror matrix
323 # ref: https://gamedev.stackexchange.com/questions/149062/how-to-mirror-reflect-flip-a-4d-transformation-matrix
324 all_poses[:,:3,:3] = all_poses[:,:3,:3] @ np.array([[-1,0,0],[0,1,0],[0,0,1]])
325
326 all_poses = all_poses[:,:3,:4]
327
328 bounds = np.array([train_set.near, train_set.far]) # manual tuned
329
330 if rescale_coord:
331 sc=train_set.pose_scale # manual tuned factor, align with colmap scale
332 all_poses[:,:3,3] *= sc
333
334 ### quite ugly ###

Callers 2

Calls 1

center_posesFunction · 0.70

Tested by

no test coverage detected