unittested features in SfmData
parent
bda6222da4
commit
ed387e3817
|
@ -2759,17 +2759,19 @@ virtual class EssentialMatrixFactor : gtsam::NoiseModelFactor {
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <gtsam/slam/dataset.h>
|
#include <gtsam/slam/dataset.h>
|
||||||
|
// Dummy classes, for MATLAB wrappers
|
||||||
class SfmMeasurement{};
|
class SfmMeasurement{};
|
||||||
class SiftIndex{ };
|
class SiftIndex{ };
|
||||||
class SfmMeasurements{};
|
class SfmMeasurements{};
|
||||||
|
class SfmCamera{};
|
||||||
|
|
||||||
class SfmTrack {
|
class SfmTrack {
|
||||||
SfmTrack();
|
SfmTrack();
|
||||||
Point3 point3() const;
|
Point3 point3() const;
|
||||||
size_t number_measurements() const;
|
size_t number_measurements() const;
|
||||||
|
void setP(gtsam::Point3& p_);
|
||||||
gtsam::SfmMeasurement measurement(size_t idx) const;
|
gtsam::SfmMeasurement measurement(size_t idx) const;
|
||||||
gtsam::SiftIndex siftIndex(size_t idx) const;
|
gtsam::SiftIndex siftIndex(size_t idx) const;
|
||||||
// gtsam::Measurements add_measurement(pair<size_t, gtsam::Point2> m);
|
|
||||||
void add_measurement(pair<size_t, gtsam::Point2> m);
|
void add_measurement(pair<size_t, gtsam::Point2> m);
|
||||||
SfmMeasurements& measurements();
|
SfmMeasurements& measurements();
|
||||||
};
|
};
|
||||||
|
@ -2780,9 +2782,8 @@ class SfmData {
|
||||||
size_t number_tracks() const;
|
size_t number_tracks() const;
|
||||||
gtsam::PinholeCamera<gtsam::Cal3Bundler> camera(size_t idx) const;
|
gtsam::PinholeCamera<gtsam::Cal3Bundler> camera(size_t idx) const;
|
||||||
gtsam::SfmTrack track(size_t idx) const;
|
gtsam::SfmTrack track(size_t idx) const;
|
||||||
// std::vector<gtsam::SfmTrack> add_track(gtsam::SfmTrack t);
|
|
||||||
void add_track(gtsam::SfmTrack t);
|
void add_track(gtsam::SfmTrack t);
|
||||||
void delete_track(size_t idx);
|
void add_camera(gtsam::SfmCamera cam);
|
||||||
};
|
};
|
||||||
|
|
||||||
gtsam::SfmData readBal(string filename);
|
gtsam::SfmData readBal(string filename);
|
||||||
|
|
|
@ -227,6 +227,11 @@ struct SfmTrack {
|
||||||
size_t number_measurements() const {
|
size_t number_measurements() const {
|
||||||
return Measurements.size();
|
return Measurements.size();
|
||||||
}
|
}
|
||||||
|
/// Set 3D point
|
||||||
|
void setP(Point3& p_){
|
||||||
|
p = p_;
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the measurement (camera index, Point2) at pose index `idx`
|
/// Get the measurement (camera index, Point2) at pose index `idx`
|
||||||
SfmMeasurement measurement(size_t idx) const {
|
SfmMeasurement measurement(size_t idx) const {
|
||||||
return Measurements[idx];
|
return Measurements[idx];
|
||||||
|
@ -246,10 +251,6 @@ struct SfmTrack {
|
||||||
return Measurements;
|
return Measurements;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear() {
|
|
||||||
Measurements.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -280,9 +281,9 @@ struct SfmData {
|
||||||
void add_track(SfmTrack t) {
|
void add_track(SfmTrack t) {
|
||||||
tracks.push_back(t);
|
tracks.push_back(t);
|
||||||
}
|
}
|
||||||
/// Delete track at `idx`
|
|
||||||
void delete_track(size_t idx){
|
void add_camera(SfmCamera cam){
|
||||||
tracks[idx].clear();
|
cameras.push_back(cam);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ set(ignore
|
||||||
gtsam::Point2Vector
|
gtsam::Point2Vector
|
||||||
gtsam::Pose3Vector
|
gtsam::Pose3Vector
|
||||||
gtsam::SfmMeasurement
|
gtsam::SfmMeasurement
|
||||||
|
gtsam::SfmCamera
|
||||||
gtsam::SiftIndex
|
gtsam::SiftIndex
|
||||||
gtsam::KeyVector
|
gtsam::KeyVector
|
||||||
gtsam::BinaryMeasurementsUnit3
|
gtsam::BinaryMeasurementsUnit3
|
||||||
|
|
|
@ -11,4 +11,5 @@ PYBIND11_MAKE_OPAQUE(std::vector<boost::shared_ptr<gtsam::BetweenFactor<gtsam::P
|
||||||
PYBIND11_MAKE_OPAQUE(std::vector<boost::shared_ptr<gtsam::BetweenFactor<gtsam::Pose2> > >);
|
PYBIND11_MAKE_OPAQUE(std::vector<boost::shared_ptr<gtsam::BetweenFactor<gtsam::Pose2> > >);
|
||||||
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::IndexPair>);
|
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::IndexPair>);
|
||||||
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::SfmMeasurement>);
|
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::SfmMeasurement>);
|
||||||
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::SiftIndex>);
|
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::SiftIndex>);
|
||||||
|
PYBIND11_MAKE_OPAQUE(std::vector<gtsam::SfmCamera>);
|
|
@ -14,4 +14,5 @@ py::bind_map<gtsam::IndexPairSetMap>(m_, "IndexPairSetMap");
|
||||||
py::bind_vector<gtsam::IndexPairVector>(m_, "IndexPairVector");
|
py::bind_vector<gtsam::IndexPairVector>(m_, "IndexPairVector");
|
||||||
py::bind_map<gtsam::KeyPairDoubleMap>(m_, "KeyPairDoubleMap");
|
py::bind_map<gtsam::KeyPairDoubleMap>(m_, "KeyPairDoubleMap");
|
||||||
py::bind_vector<std::vector<gtsam::SfmMeasurement> >(m_, "Measurement");
|
py::bind_vector<std::vector<gtsam::SfmMeasurement> >(m_, "Measurement");
|
||||||
py::bind_vector<std::vector<gtsam::SiftIndex> >(m_, "SiftIndexVector");
|
py::bind_vector<std::vector<gtsam::SiftIndex> >(m_, "SiftIndexVector");
|
||||||
|
py::bind_vector<std::vector<gtsam::SfmCamera> >(m_, "cameras");
|
|
@ -0,0 +1,79 @@
|
||||||
|
"""
|
||||||
|
GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
|
||||||
|
Atlanta, Georgia 30332-0415
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
See LICENSE for the license information
|
||||||
|
|
||||||
|
Unit tests for testing dataset access.
|
||||||
|
Author: Frank Dellaert (Python: Sushmita Warrier)
|
||||||
|
"""
|
||||||
|
# pylint: disable=invalid-name, no-name-in-module, no-member
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
import gtsam
|
||||||
|
#from gtsam import SfmCamera
|
||||||
|
from gtsam.utils.test_case import GtsamTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestSfmData(GtsamTestCase):
|
||||||
|
"""Tests for SfmData and SfmTrack modules."""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
"""Initialize SfmData and SfmTrack"""
|
||||||
|
self.data = gtsam.SfmData()
|
||||||
|
self.tracks = gtsam.SfmTrack()
|
||||||
|
|
||||||
|
def test_tracks(self):
|
||||||
|
"""Test functions in SfmTrack"""
|
||||||
|
# measurement is of format (camera_idx, imgPoint)
|
||||||
|
# create camera indices for two cameras
|
||||||
|
i1, i2 = np.random.randint(5), np.random.randint(5)
|
||||||
|
# create imgPoint for cameras i1 and i2
|
||||||
|
uv_i1 = gtsam.Point2(np.random.randint(5), np.random.randint(5))
|
||||||
|
uv_i2 = gtsam.Point2(np.random.randint(5), np.random.randint(5))
|
||||||
|
m_i1 = (i1, uv_i1)
|
||||||
|
m_i2 = (i2, uv_i2)
|
||||||
|
# add measurements to the track
|
||||||
|
self.tracks.add_measurement(m_i1)
|
||||||
|
self.tracks.add_measurement(m_i2)
|
||||||
|
# Number of measurements in the track is 2
|
||||||
|
self.assertEqual(self.tracks.number_measurements(), 2)
|
||||||
|
# camera_idx in the first measurement of the track corresponds to i1
|
||||||
|
self.assertEqual(self.tracks.measurement(0)[0], i1)
|
||||||
|
# Set arbitrary 3D point corresponding to the track
|
||||||
|
self.tracks.setP(gtsam.Point3(2.5, 3.3, 1.2))
|
||||||
|
np.testing.assert_array_almost_equal(
|
||||||
|
gtsam.Point3(2.5,3.3,1.2),
|
||||||
|
self.tracks.point3()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_data(self):
|
||||||
|
"""Test functions in SfmData"""
|
||||||
|
#cam1 = gtsam.SfmCamera(1500, 1200, 0, 640, 480)
|
||||||
|
# Create new track with 3 measurements
|
||||||
|
track2 = gtsam.SfmTrack()
|
||||||
|
i1, i2, i3 = np.random.randint(5), np.random.randint(5), np.random.randint(5)
|
||||||
|
uv_i1 = gtsam.Point2(np.random.randint(5), np.random.randint(5))
|
||||||
|
uv_i2 = gtsam.Point2(np.random.randint(5), np.random.randint(5))
|
||||||
|
uv_i3 = gtsam.Point2(np.random.randint(5), np.random.randint(5))
|
||||||
|
m_i1, m_i2, m_i3 = (i1, uv_i1), (i2, uv_i2), (i3, uv_i3)
|
||||||
|
# add measurements to the track
|
||||||
|
track2.add_measurement(m_i1)
|
||||||
|
track2.add_measurement(m_i2)
|
||||||
|
track2.add_measurement(m_i3)
|
||||||
|
self.data.add_track(self.tracks)
|
||||||
|
self.data.add_track(track2)
|
||||||
|
# Number of tracks in SfmData is 2
|
||||||
|
self.assertEqual(self.data.number_tracks(), 2)
|
||||||
|
# camera idx of first measurement of second track corresponds to i1
|
||||||
|
self.assertEqual(self.data.track(1).measurement(0)[0], i1)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
Loading…
Reference in New Issue