def compute_pose(self, view1, view2=None, is_baseline=False): """Computes the pose of the new view""" # procedure for baseline pose estimation if is_baseline and view2: match_object = self.matches[(view1.name, view2.name)] baseline_pose = Baseline(view1, view2, match_object) view2.R, view2.t = baseline_pose.get_pose(self.K) rpe1, rpe2 = self.triangulate(view1, view2) self.errors.append(np.mean(rpe1)) self.errors.append(np.mean(rpe2)) self.done.append(view1) self.done.append(view2) # procedure for estimating the pose of all other views else: view1.R, view1.t = self.compute_pose_PNP(view1) errors = [] # reconstruct unreconstructed points from all of the previous views for i, old_view in enumerate(self.done): match_object = self.matches[(old_view.name, view1.name)] _ = remove_outliers_using_F(old_view, view1, match_object) self.remove_mapped_points(match_object, i) _, rpe = self.triangulate(old_view, view1) errors += rpe self.done.append(view1) self.errors.append(np.mean(errors))