(args, pair_folder, scan_folder, out_folder, plyfilename)
| 242 | return mask, depth_reprojected, x2d_src, y2d_src |
| 243 | |
| 244 | def filter_depth(args, pair_folder, scan_folder, out_folder, plyfilename): |
| 245 | num_stage = len(args.ndepths) |
| 246 | |
| 247 | # the pair file |
| 248 | pair_file = os.path.join(pair_folder, "pair.txt") |
| 249 | # for the final point cloud |
| 250 | vertexs = [] |
| 251 | vertex_colors = [] |
| 252 | |
| 253 | pair_data = read_pair_file(pair_file) |
| 254 | nviews = len(pair_data) |
| 255 | |
| 256 | for ref_view, src_views in pair_data: |
| 257 | |
| 258 | # src_views = src_views[:args.num_view] |
| 259 | # load the camera parameters |
| 260 | ref_intrinsics, ref_extrinsics = read_camera_parameters( |
| 261 | os.path.join(scan_folder, 'cams/{:0>8}_cam.txt'.format(ref_view))) |
| 262 | # load the reference image |
| 263 | ref_img = read_img(os.path.join(scan_folder, 'images/{:0>8}.jpg'.format(ref_view))) |
| 264 | # load the estimated depth of the reference view |
| 265 | ref_depth_est = read_pfm(os.path.join(out_folder, 'depth_est/{:0>8}.pfm'.format(ref_view)))[0] |
| 266 | |
| 267 | # load the photometric mask of the reference view |
| 268 | confidence = read_pfm(os.path.join(out_folder, 'confidence/{:0>8}.pfm'.format(ref_view)))[0] |
| 269 | if os.path.exists(os.path.join(out_folder, 'confidence/{:0>8}_stage2.pfm'.format(ref_view))): |
| 270 | confidence2 = read_pfm(os.path.join(out_folder, 'confidence/{:0>8}_stage2.pfm'.format(ref_view)))[0] |
| 271 | confidence1 = read_pfm(os.path.join(out_folder, 'confidence/{:0>8}_stage1.pfm'.format(ref_view)))[0] |
| 272 | else: |
| 273 | confidence2=confidence1=confidence |
| 274 | photo_mask = np.logical_and(np.logical_and(confidence > args.conf[2], confidence2 > args.conf[1]), confidence1 > args.conf[0]) |
| 275 | |
| 276 | all_srcview_depth_ests = [] |
| 277 | all_srcview_x = [] |
| 278 | all_srcview_y = [] |
| 279 | all_srcview_geomask = [] |
| 280 | |
| 281 | # compute the geometric mask |
| 282 | geo_mask_sum = 0 |
| 283 | for src_view in src_views: |
| 284 | # camera parameters of the source view |
| 285 | src_intrinsics, src_extrinsics = read_camera_parameters( |
| 286 | os.path.join(scan_folder, 'cams/{:0>8}_cam.txt'.format(src_view))) |
| 287 | # the estimated depth of the source view |
| 288 | src_depth_est = read_pfm(os.path.join(out_folder, 'depth_est/{:0>8}.pfm'.format(src_view)))[0] |
| 289 | |
| 290 | geo_mask, depth_reprojected, x2d_src, y2d_src = check_geometric_consistency(ref_depth_est, ref_intrinsics, ref_extrinsics, |
| 291 | src_depth_est, |
| 292 | src_intrinsics, src_extrinsics) |
| 293 | geo_mask_sum += geo_mask.astype(np.int32) |
| 294 | all_srcview_depth_ests.append(depth_reprojected) |
| 295 | all_srcview_x.append(x2d_src) |
| 296 | all_srcview_y.append(y2d_src) |
| 297 | all_srcview_geomask.append(geo_mask) |
| 298 | |
| 299 | depth_est_averaged = (sum(all_srcview_depth_ests) + ref_depth_est) / (geo_mask_sum + 1) |
| 300 | |
| 301 | # at least args.thres_view source views matched |
no test coverage detected