32 markers_ = other.markers_;
38void Tracks::Insert(
int image,
int track,
double x,
double y,
double weight) {
41 for (
int i = 0; i < markers_.size(); ++i) {
42 if (markers_[i].image == image && markers_[i].track == track) {
49 markers_.push_back(marker);
58 for (
int i = 0; i < markers_.size(); ++i) {
59 if (image == markers_[i].image) {
68 for (
int i = 0; i < markers_.size(); ++i) {
69 if (track == markers_[i].track) {
78 for (
int i = 0; i < markers_.size(); ++i) {
79 int image = markers_[i].image;
80 if (image == image1 || image == image2) {
89 std::vector<int> image1_tracks;
90 std::vector<int> image2_tracks;
92 for (
int i = 0; i < markers_.size(); ++i) {
93 int image = markers_[i].image;
94 if (image == image1) {
95 image1_tracks.push_back(markers_[i].track);
96 }
else if (image == image2) {
97 image2_tracks.push_back(markers_[i].track);
101 std::sort(image1_tracks.begin(), image1_tracks.end());
102 std::sort(image2_tracks.begin(), image2_tracks.end());
104 std::vector<int> intersection;
105 std::set_intersection(image1_tracks.begin(),
107 image2_tracks.begin(),
109 std::back_inserter(intersection));
112 for (
int i = 0; i < markers_.size(); ++i) {
113 if ((markers_[i].image == image1 || markers_[i].image == image2) &&
115 intersection.begin(), intersection.end(), markers_[i].track)) {
116 markers.push_back(markers_[i]);
123 for (
int i = 0; i < markers_.size(); ++i) {
124 if (markers_[i].image == image && markers_[i].track == track) {
128 Marker null = {-1, -1, -1, -1, 0.0};
134 for (
int i = 0; i < markers_.size(); ++i) {
135 if (markers_[i].track != track) {
136 markers_[size++] = markers_[i];
139 markers_.resize(size);
144 for (
int i = 0; i < markers_.size(); ++i) {
145 if (markers_[i].image != image || markers_[i].track != track) {
146 markers_[size++] = markers_[i];
149 markers_.resize(size);
155 for (
int i = 0; i < markers_.size(); ++i) {
156 max_image = std::max(markers_[i].image, max_image);
164 for (
int i = 0; i < markers_.size(); ++i) {
165 max_track = std::max(markers_[i].track, max_track);
171 return markers_.size();
178 for (
int i = 0; i <
markers.size(); ++i) {
180 if (
markers[i].image == image) {
181 coords.push_back(
Vec2(marker.
x, marker.
y));
184 coordinates->resize(2, coords.size());
185 for (
int i = 0; i < coords.size(); i++) {
186 coordinates->col(i) = coords[i];
void RemoveMarker(int image, int track)
Removes the marker in image belonging to track.
vector< Marker > MarkersInImage(int image) const
Returns all the markers visible in image.
vector< Marker > MarkersInBothImages(int image1, int image2) const
Returns all the markers visible in image1 and image2.
void RemoveMarkersForTrack(int track)
Removes all the markers belonging to track.
int MaxTrack() const
Returns the maximum track identifier used.
vector< Marker > AllMarkers() const
Returns all the markers.
vector< Marker > MarkersForTracksInBothImages(int image1, int image2) const
int MaxImage() const
Returns the maximum image identifier used.
void Insert(int image, int track, double x, double y, double weight=1.0)
vector< Marker > MarkersForTrack(int track) const
Returns all the markers belonging to a track.
int NumMarkers() const
Returns the number of markers.
Marker MarkerInImageForTrack(int image, int track) const
Returns the marker in image belonging to track.
input_tx image(0, GPU_RGBA16F, Qualifier::WRITE, ImageType::FLOAT_2D, "preview_img") .compute_source("compositor_compute_preview.glsl") .do_static_compilation(true)
const vector< Marker > & markers
void CoordinatesForMarkersInImage(const vector< Marker > &markers, int image, Mat *coordinates)