MCPcopy Create free account
hub / github.com/OpenImagingLab/4DSloMo / readColmapSceneInfo

Function readColmapSceneInfo

scene/dataset_readers.py:150–210  ·  view source on GitHub ↗
(path, images, eval, llffhold=8, num_pts_ratio=1.0)

Source from the content-addressed store, hash-verified

148 ply_data.write(path)
149
150def readColmapSceneInfo(path, images, eval, llffhold=8, num_pts_ratio=1.0):
151 try:
152 cameras_extrinsic_file = os.path.join(path, "sparse/0", "images.bin")
153 cameras_intrinsic_file = os.path.join(path, "sparse/0", "cameras.bin")
154 cam_extrinsics = read_extrinsics_binary(cameras_extrinsic_file)
155 cam_intrinsics = read_intrinsics_binary(cameras_intrinsic_file)
156 except:
157 cameras_extrinsic_file = os.path.join(path, "sparse/0", "images.txt")
158 cameras_intrinsic_file = os.path.join(path, "sparse/0", "cameras.txt")
159 cam_extrinsics = read_extrinsics_text(cameras_extrinsic_file)
160 cam_intrinsics = read_intrinsics_text(cameras_intrinsic_file)
161
162 reading_dir = "images" if images == None else images
163 cam_infos_unsorted = readColmapCameras(cam_extrinsics=cam_extrinsics, cam_intrinsics=cam_intrinsics, images_folder=os.path.join(path, reading_dir))
164 cam_infos = sorted(cam_infos_unsorted.copy(), key = lambda x : x.image_name)
165
166 if eval:
167 train_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold != 0]
168 test_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold == 0]
169 else:
170 train_cam_infos = cam_infos
171 test_cam_infos = []
172
173 nerf_normalization = getNerfppNorm(train_cam_infos)
174
175 ply_path = os.path.join(path, "sparse/0/points3D.ply")
176 bin_path = os.path.join(path, "sparse/0/points3D.bin")
177 txt_path = os.path.join(path, "sparse/0/points3D.txt")
178 if not os.path.exists(ply_path):
179 print("Converting point3d.bin to .ply, will happen only the first time you open the scene.")
180 try:
181 xyz, rgb, _ = read_points3D_binary(bin_path)
182 except:
183 xyz, rgb, _ = read_points3D_text(txt_path)
184 storePly(ply_path, xyz, rgb)
185 try:
186 pcd = fetchPly(ply_path)
187 except:
188 pcd = None
189 if num_pts_ratio > 1.001:
190 num_pts = int((num_pts_ratio - 1) * pcd.points.shape[0])
191 mean_xyz = pcd.points.mean(axis=0)
192 min_rand_xyz = mean_xyz - np.array([0.5, 0.5, 0.5])
193 max_rand_xyz = mean_xyz + np.array([0.5, 2.0, 0.5])
194 xyz = np.concatenate([pcd.points,
195 np.random.random((num_pts, 3)) * (max_rand_xyz - min_rand_xyz) + min_rand_xyz],
196 axis=0)
197 colors = np.concatenate([pcd.colors,
198 SH2RGB(np.random.random((num_pts, 3)) / 255.0)],
199 axis=0)
200 normals = np.concatenate([pcd.normals,
201 np.zeros((num_pts, 3))],
202 axis=0)
203 pcd = BasicPointCloud(points=xyz, colors=colors, normals=normals)
204
205 scene_info = SceneInfo(point_cloud=pcd,
206 train_cameras=train_cam_infos,
207 test_cameras=test_cam_infos,

Callers

nothing calls this directly

Calls 13

read_extrinsics_binaryFunction · 0.90
read_intrinsics_binaryFunction · 0.90
read_extrinsics_textFunction · 0.90
read_intrinsics_textFunction · 0.90
read_points3D_binaryFunction · 0.90
read_points3D_textFunction · 0.90
SH2RGBFunction · 0.90
readColmapCamerasFunction · 0.85
getNerfppNormFunction · 0.85
storePlyFunction · 0.85
fetchPlyFunction · 0.85
BasicPointCloudClass · 0.85

Tested by

no test coverage detected