diff --git a/app.py b/app.py index fb94638..bd4fc0b 100644 --- a/app.py +++ b/app.py @@ -177,6 +177,9 @@ def get_frame_data(): frame_data['new_point_cloud'] = sampled_point_cloud.tolist() frame_data['combined_point_cloud'] = combined_point_cloud.tolist() + new_added_pts = ReconstructionUtil.get_new_added_points(combined_point_cloud, sampled_point_cloud) + frame_data["new_added_pts"] = new_added_pts.tolist() + combined_point_cloud = np.concatenate([combined_point_cloud, sampled_point_cloud], axis=0) combined_point_cloud = PtsUtil.voxel_downsample_point_cloud(combined_point_cloud, 0.01) @@ -218,6 +221,8 @@ def parse_to_frame_data(inference_result): coverage_rate = inference_result["coverage_rate_seq"][idx] frame_data['new_point_cloud'] = target_pts.tolist() frame_data['combined_point_cloud'] = combined_point_cloud.tolist() + new_added_pts = ReconstructionUtil.get_new_added_points(combined_point_cloud, target_pts) + frame_data["new_added_pts"] = new_added_pts.tolist() combined_point_cloud = np.concatenate([combined_point_cloud, target_pts], axis=0) frame_data["coverage_rate"] = float(coverage_rate) delta_CR = frame_data["coverage_rate"] - last_CR diff --git a/pts.py b/pts.py index c15554a..03bbf88 100644 --- a/pts.py +++ b/pts.py @@ -19,6 +19,8 @@ class PtsUtil: @staticmethod def random_downsample_point_cloud(point_cloud, num_points): + if point_cloud.shape[0] == 0: + return point_cloud idx = np.random.choice(len(point_cloud), num_points, replace=True) return point_cloud[idx] diff --git a/reconstruction.py b/reconstruction.py index 8082370..7b45127 100644 --- a/reconstruction.py +++ b/reconstruction.py @@ -31,6 +31,18 @@ class ReconstructionUtil: return filtered_sampled_points[:, :3] + @staticmethod + def get_new_added_points(old_combined_pts, new_pts, threshold=0.005): + if old_combined_pts.size == 0: + return new_pts + if new_pts.size == 0: + return np.array([]) + + tree = cKDTree(old_combined_pts) + distances, _ = tree.query(new_pts, k=1) + new_added_points = new_pts[distances > threshold] + return new_added_points + if __name__ == "__main__": import os root = "/media/hofee/data/project/python/nbv_reconstruction/nbv_rec_visualize/data/sample/"