def test_triangulate_bearings_dlt(): rt1 = np.append(np.identity(3), [[0], [0], [0]], axis=1) rt2 = np.append(np.identity(3), [[-1], [0], [0]], axis=1) b1 = unit_vector([0.0, 0, 1]) b2 = unit_vector([-1.0, 0, 1]) max_reprojection = 0.01 min_ray_angle = np.radians(2.0) res, X = pygeometry.triangulate_bearings_dlt([rt1, rt2], [b1, b2], max_reprojection, min_ray_angle) assert np.allclose(X, [0, 0, 1.0]) assert res is True
def test_triangulate_bearings_dlt() -> None: rt1 = np.append(np.identity(3), [[0], [0], [0]], axis=1) rt2 = np.append(np.identity(3), [[-1], [0], [0]], axis=1) b1 = unit_vector([0.0, 0, 1]) b2 = unit_vector([-1.0, 0, 1]) max_reprojection = 0.01 min_ray_angle = np.radians(2.0) res, X = pygeometry.triangulate_bearings_dlt( # pyre-fixme[6]: For 2nd param expected `ndarray` but got `List[typing.Any]`. [rt1, rt2], [b1, b2], max_reprojection, min_ray_angle) assert np.allclose(X, [0, 0, 1.0]) assert res is True
def triangulate_dlt(self, track, reproj_threshold, min_ray_angle_degrees): """Triangulate track using DLT and add point to reconstruction.""" Rts, bs, ids = [], [], [] for shot_id, obs in self.tracks_manager.get_track_observations(track).items(): if shot_id in self.reconstruction.shots: shot = self.reconstruction.shots[shot_id] Rts.append(self._shot_Rt(shot)) b = shot.camera.pixel_bearing(np.array(obs.point)) bs.append(b) ids.append(shot_id) if len(Rts) >= 2: e, X = pygeometry.triangulate_bearings_dlt( Rts, bs, reproj_threshold, np.radians(min_ray_angle_degrees)) if e: self.reconstruction.create_point(track, X.tolist()) for shot_id in ids: self._add_track_to_reconstruction(track, shot_id)