Blender
V4.3
intern
libmv
libmv
autotrack
predict_tracks_test.cc
Go to the documentation of this file.
1
// Copyright (c) 2014 libmv authors.
2
//
3
// Permission is hereby granted, free of charge, to any person obtaining a copy
4
// of this software and associated documentation files (the "Software"), to
5
// deal in the Software without restriction, including without limitation the
6
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
// sell copies of the Software, and to permit persons to whom the Software is
8
// furnished to do so, subject to the following conditions:
9
//
10
// The above copyright notice and this permission notice shall be included in
11
// all copies or substantial portions of the Software.
12
//
13
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
// IN THE SOFTWARE.
20
//
21
// Author: mierle@gmail.com (Keir Mierle)
22
23
#include "
libmv/autotrack/predict_tracks.h
"
24
25
#include "
libmv/autotrack/marker.h
"
26
#include "
libmv/autotrack/tracks.h
"
27
#include "
libmv/logging/logging.h
"
28
#include "testing/testing.h"
29
30
namespace
mv
{
31
32
static
void
AddMarker
(
int
frame,
float
x,
float
y,
Tracks
* tracks) {
33
Marker
marker;
34
marker.
clip
= marker.
track
= 0;
35
marker.
frame
= frame;
36
marker.
center
.x() =
x
;
37
marker.
center
.y() =
y
;
38
marker.
patch
.
coordinates
<< x - 1, y - 1, x + 1, y - 1, x + 1, y + 1, x - 1,
39
y + 1;
40
tracks->AddMarker(marker);
41
}
42
43
TEST
(
PredictMarkerPosition
, EasyLinearMotion) {
44
Tracks
tracks
;
45
AddMarker
(0, 1.0, 0.0, &tracks);
46
AddMarker
(1, 2.0, 5.0, &tracks);
47
AddMarker
(2, 3.0, 10.0, &tracks);
48
AddMarker
(3, 4.0, 15.0, &tracks);
49
AddMarker
(4, 5.0, 20.0, &tracks);
50
AddMarker
(5, 6.0, 25.0, &tracks);
51
AddMarker
(6, 7.0, 30.0, &tracks);
52
AddMarker
(7, 8.0, 35.0, &tracks);
53
54
Marker
predicted;
55
predicted.
clip
= 0;
56
predicted.
track
= 0;
57
predicted.
frame
= 8;
58
59
PredictMarkerPosition
(tracks,
PredictDirection::AUTO
, &predicted);
60
double
error
= (
libmv::Vec2f
(9.0, 40.0) - predicted.
center
).
norm
();
61
LG
<<
"Got error: "
<<
error
;
62
EXPECT_LT(
error
, 0.1);
63
64
// Check the patch coordinates as well.
65
double
x = 9, y = 40.0;
66
Quad2Df
expected_patch;
67
expected_patch.
coordinates
<< x - 1, y - 1, x + 1, y - 1, x + 1, y + 1, x - 1,
68
y + 1;
69
70
error
= (expected_patch.
coordinates
- predicted.
patch
.
coordinates
).
norm
();
71
LG
<<
"Patch error: "
<<
error
;
72
EXPECT_LT(
error
, 0.1);
73
}
74
75
TEST
(
PredictMarkerPosition
, EasyBackwardLinearMotion) {
76
Tracks
tracks
;
77
AddMarker
(8, 1.0, 0.0, &tracks);
78
AddMarker
(7, 2.0, 5.0, &tracks);
79
AddMarker
(6, 3.0, 10.0, &tracks);
80
AddMarker
(5, 4.0, 15.0, &tracks);
81
AddMarker
(4, 5.0, 20.0, &tracks);
82
AddMarker
(3, 6.0, 25.0, &tracks);
83
AddMarker
(2, 7.0, 30.0, &tracks);
84
AddMarker
(1, 8.0, 35.0, &tracks);
85
86
Marker
predicted;
87
predicted.
clip
= 0;
88
predicted.
track
= 0;
89
predicted.
frame
= 0;
90
91
PredictMarkerPosition
(tracks,
PredictDirection::AUTO
, &predicted);
92
LG
<< predicted;
93
double
error
= (
libmv::Vec2f
(9.0, 40.0) - predicted.
center
).
norm
();
94
LG
<<
"Got error: "
<<
error
;
95
EXPECT_LT(
error
, 0.1);
96
97
// Check the patch coordinates as well.
98
double
x = 9.0, y = 40.0;
99
Quad2Df
expected_patch;
100
expected_patch.
coordinates
<< x - 1, y - 1, x + 1, y - 1, x + 1, y + 1, x - 1,
101
y + 1;
102
103
error
= (expected_patch.
coordinates
- predicted.
patch
.
coordinates
).
norm
();
104
LG
<<
"Patch error: "
<<
error
;
105
EXPECT_LT(
error
, 0.1);
106
}
107
108
TEST
(
PredictMarkerPosition
, TwoFrameGap) {
109
Tracks
tracks
;
110
AddMarker
(0, 1.0, 0.0, &tracks);
111
AddMarker
(1, 2.0, 5.0, &tracks);
112
AddMarker
(2, 3.0, 10.0, &tracks);
113
AddMarker
(3, 4.0, 15.0, &tracks);
114
AddMarker
(4, 5.0, 20.0, &tracks);
115
AddMarker
(5, 6.0, 25.0, &tracks);
116
AddMarker
(6, 7.0, 30.0, &tracks);
117
// Missing frame 7!
118
119
Marker
predicted;
120
predicted.
clip
= 0;
121
predicted.
track
= 0;
122
predicted.
frame
= 8;
123
124
PredictMarkerPosition
(tracks,
PredictDirection::AUTO
, &predicted);
125
double
error
= (
libmv::Vec2f
(9.0, 40.0) - predicted.
center
).
norm
();
126
LG
<<
"Got error: "
<<
error
;
127
EXPECT_LT(
error
, 0.1);
128
}
129
130
TEST
(
PredictMarkerPosition
, FourFrameGap) {
131
Tracks
tracks
;
132
AddMarker
(0, 1.0, 0.0, &tracks);
133
AddMarker
(1, 2.0, 5.0, &tracks);
134
AddMarker
(2, 3.0, 10.0, &tracks);
135
AddMarker
(3, 4.0, 15.0, &tracks);
136
// Missing frames 4, 5, 6, 7.
137
138
Marker
predicted;
139
predicted.
clip
= 0;
140
predicted.
track
= 0;
141
predicted.
frame
= 8;
142
143
PredictMarkerPosition
(tracks,
PredictDirection::AUTO
, &predicted);
144
double
error
= (
libmv::Vec2f
(9.0, 40.0) - predicted.
center
).
norm
();
145
LG
<<
"Got error: "
<<
error
;
146
EXPECT_LT(
error
, 2.0);
// Generous error due to larger prediction window.
147
}
148
149
TEST
(
PredictMarkerPosition
, MultipleGaps) {
150
Tracks
tracks
;
151
AddMarker
(0, 1.0, 0.0, &tracks);
152
AddMarker
(1, 2.0, 5.0, &tracks);
153
AddMarker
(2, 3.0, 10.0, &tracks);
154
// AddMarker(3, 4.0, 15.0, &tracks); // Note the 3-frame gap.
155
// AddMarker(4, 5.0, 20.0, &tracks);
156
// AddMarker(5, 6.0, 25.0, &tracks);
157
AddMarker
(6, 7.0, 30.0, &tracks);
// Intermediate measurement.
158
// AddMarker(7, 8.0, 35.0, &tracks);
159
160
Marker
predicted;
161
predicted.
clip
= 0;
162
predicted.
track
= 0;
163
predicted.
frame
= 8;
164
165
PredictMarkerPosition
(tracks,
PredictDirection::AUTO
, &predicted);
166
double
error
= (
libmv::Vec2f
(9.0, 40.0) - predicted.
center
).
norm
();
167
LG
<<
"Got error: "
<<
error
;
168
EXPECT_LT(
error
, 1.0);
// Generous error due to larger prediction window.
169
}
170
171
TEST
(
PredictMarkerPosition
, MarkersInRandomOrder) {
172
Tracks
tracks
;
173
174
// This is the same as the easy, except that the tracks are randomly ordered.
175
AddMarker
(0, 1.0, 0.0, &tracks);
176
AddMarker
(2, 3.0, 10.0, &tracks);
177
AddMarker
(7, 8.0, 35.0, &tracks);
178
AddMarker
(5, 6.0, 25.0, &tracks);
179
AddMarker
(4, 5.0, 20.0, &tracks);
180
AddMarker
(3, 4.0, 15.0, &tracks);
181
AddMarker
(6, 7.0, 30.0, &tracks);
182
AddMarker
(1, 2.0, 5.0, &tracks);
183
184
Marker
predicted;
185
predicted.
clip
= 0;
186
predicted.
track
= 0;
187
predicted.
frame
= 8;
188
189
PredictMarkerPosition
(tracks,
PredictDirection::AUTO
, &predicted);
190
double
error
= (
libmv::Vec2f
(9.0, 40.0) - predicted.
center
).
norm
();
191
LG
<<
"Got error: "
<<
error
;
192
EXPECT_LT(
error
, 0.1);
193
}
194
195
}
// namespace mv
x
x
Definition
BLI_expr_pylike_eval_test.cc:345
norm
SIMD_FORCE_INLINE btScalar norm() const
Return the norm (length) of the vector.
Definition
btVector3.h:263
mv::Tracks
Definition
libmv/autotrack/tracks.h:34
y
y
Definition
compositor_morphological_blur_info.hh:15
tracks.h
logging.h
LG
#define LG
Definition
libmv/logging/logging.h:40
marker.h
error
static void error(const char *str)
Definition
meshlaplacian.cc:45
libmv::Vec2f
Eigen::Vector2f Vec2f
Definition
numeric.h:125
mv
Definition
libmv/autotrack/autotrack.cc:31
mv::PredictMarkerPosition
bool PredictMarkerPosition(const Tracks &tracks, const PredictDirection direction, Marker *marker)
Definition
predict_tracks.cc:228
mv::AddMarker
static void AddMarker(int frame, float x, float y, Tracks *tracks)
Definition
predict_tracks_test.cc:32
mv::TEST
TEST(PredictMarkerPosition, EasyLinearMotion)
Definition
predict_tracks_test.cc:43
mv::PredictDirection::AUTO
@ AUTO
predict_tracks.h
mv::Marker
Definition
marker.h:40
mv::Marker::frame
int frame
Definition
marker.h:42
mv::Marker::clip
int clip
Definition
marker.h:41
mv::Marker::center
Vec2f center
Definition
marker.h:47
mv::Marker::patch
Quad2Df patch
Definition
marker.h:51
mv::Marker::track
int track
Definition
marker.h:43
mv::Quad< float, 2 >
mv::Quad::coordinates
Eigen::Matrix< T, 4, D > coordinates
Definition
quad.h:50
tracks
ListBase tracks
Definition
tracking.cc:70
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0