update sfm module

release/4.3a0
Varun Agrawal 2023-06-15 16:30:10 -04:00
parent 7c22b03b9e
commit 5b588f2ea7
3 changed files with 16 additions and 23 deletions

View File

@ -6,15 +6,14 @@ namespace gtsam {
#include <gtsam/sfm/SfmTrack.h> #include <gtsam/sfm/SfmTrack.h>
class SfmTrack2d { class SfmTrack2d {
std::vector<pair<size_t, gtsam::Point2>> measurements; std::vector<gtsam::SfmMeasurement> measurements;
SfmTrack2d(); SfmTrack2d();
SfmTrack2d(const std::vector<gtsam::SfmMeasurement>& measurements); SfmTrack2d(const std::vector<gtsam::SfmMeasurement>& measurements);
size_t numberMeasurements() const; size_t numberMeasurements() const;
pair<size_t, gtsam::Point2> measurement(size_t idx) const; gtsam::SfmMeasurement measurement(size_t idx) const;
pair<size_t, size_t> siftIndex(size_t idx) const; pair<size_t, size_t> siftIndex(size_t idx) const;
void addMeasurement(size_t idx, const gtsam::Point2& m); void addMeasurement(size_t idx, const gtsam::Point2& m);
gtsam::SfmMeasurement measurement(size_t idx) const;
bool hasUniqueCameras() const; bool hasUniqueCameras() const;
Eigen::MatrixX2d measurementMatrix() const; Eigen::MatrixX2d measurementMatrix() const;
Eigen::VectorXi indexVector() const; Eigen::VectorXi indexVector() const;

View File

@ -11,9 +11,3 @@
* mutations on Python side will not be reflected on C++. * mutations on Python side will not be reflected on C++.
*/ */
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::SfmMeasurement>);
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::SfmTrack>);
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::SfmCamera>);
PYBIND11_MAKE_OPAQUE(
std::vector<gtsam::gtsfm::Keypoints>);
PYBIND11_MAKE_OPAQUE(gtsam::gtsfm::MatchIndicesMap);

View File

@ -5,13 +5,13 @@ Authors: John Lambert
import unittest import unittest
import gtsam
import numpy as np import numpy as np
from gtsam import (IndexPair, KeypointsVector, MatchIndicesMap, Point2,
SfmMeasurementVector, SfmTrack2d)
from gtsam.gtsfm import Keypoints from gtsam.gtsfm import Keypoints
from gtsam.utils.test_case import GtsamTestCase from gtsam.utils.test_case import GtsamTestCase
import gtsam
from gtsam import IndexPair, Point2, SfmTrack2d
class TestDsfTrackGenerator(GtsamTestCase): class TestDsfTrackGenerator(GtsamTestCase):
"""Tests for DsfTrackGenerator.""" """Tests for DsfTrackGenerator."""
@ -23,14 +23,14 @@ class TestDsfTrackGenerator(GtsamTestCase):
kps_i1 = Keypoints(np.array([[50.0, 60], [70, 80], [90, 100]])) kps_i1 = Keypoints(np.array([[50.0, 60], [70, 80], [90, 100]]))
kps_i2 = Keypoints(np.array([[110.0, 120], [130, 140]])) kps_i2 = Keypoints(np.array([[110.0, 120], [130, 140]]))
keypoints_list = KeypointsVector() keypoints_list = []
keypoints_list.append(kps_i0) keypoints_list.append(kps_i0)
keypoints_list.append(kps_i1) keypoints_list.append(kps_i1)
keypoints_list.append(kps_i2) keypoints_list.append(kps_i2)
# For each image pair (i1,i2), we provide a (K,2) matrix # For each image pair (i1,i2), we provide a (K,2) matrix
# of corresponding image indices (k1,k2). # of corresponding image indices (k1,k2).
matches_dict = MatchIndicesMap() matches_dict = {}
matches_dict[IndexPair(0, 1)] = np.array([[0, 0], [1, 1]]) matches_dict[IndexPair(0, 1)] = np.array([[0, 0], [1, 1]])
matches_dict[IndexPair(1, 2)] = np.array([[2, 0], [1, 1]]) matches_dict[IndexPair(1, 2)] = np.array([[2, 0], [1, 1]])
@ -81,16 +81,16 @@ class TestDsfTrackGenerator(GtsamTestCase):
np.testing.assert_allclose(track2.indexVector(), [1, 2]) np.testing.assert_allclose(track2.indexVector(), [1, 2])
class TestSfmTrack2d(GtsamTestCase): # class TestSfmTrack2d(GtsamTestCase):
"""Tests for SfmTrack2d.""" # """Tests for SfmTrack2d."""
def test_sfm_track_2d_constructor(self) -> None: # def test_sfm_track_2d_constructor(self) -> None:
"""Test construction of 2D SfM track.""" # """Test construction of 2D SfM track."""
measurements = SfmMeasurementVector() # measurements = []
measurements.append((0, Point2(10, 20))) # measurements.append((0, Point2(10, 20)))
track = SfmTrack2d(measurements=measurements) # track = SfmTrack2d(measurements=measurements)
track.measurement(0) # track.measurement(0)
assert track.numberMeasurements() == 1 # assert track.numberMeasurements() == 1
if __name__ == "__main__": if __name__ == "__main__":