Skip to content

Commit f1f5a6e

Browse files
committed
Show Base Camera Reprojected Points
1 parent 32e3c75 commit f1f5a6e

File tree

5 files changed

+121
-58
lines changed

5 files changed

+121
-58
lines changed

Common/Correspondence/test2/Camera_Transform.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
<cols>1</cols>
1818
<dt>d</dt>
1919
<data>
20-
-7.2324845629976139e-02 -3.9142336638089262e-02
21-
6.1135124121830288e-03</data></R1>
20+
-2.5000198851341271e-01 3.8329953249649891e-02
21+
8.3816804829036501e-03</data></R1>
2222
<t1 type_id="opencv-matrix">
2323
<rows>3</rows>
2424
<cols>1</cols>
2525
<dt>d</dt>
2626
<data>
27-
1.5376839119543745e-01 -9.1043479526995118e-03
28-
3.4149801732138363e-03</data></t1>
27+
1.3414331953572689e-01 -6.5430910963729716e-02
28+
-1.3773779290331608e-02</data></t1>
2929
</opencv_storage>
+33-17
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,33 @@
1-
16
2-
-0.140011 -0.0207075 0.313244
3-
-0.108098 -0.0207466 0.310889
4-
-0.109063 0.00822113 0.297327
5-
-0.140976 0.00826023 0.299682
6-
-0.0738667 -0.0213791 0.30834
7-
-0.0420502 -0.021456 0.304919
8-
-0.0433975 0.00767033 0.291734
9-
-0.075214 0.00774727 0.295156
10-
-0.141312 0.0155673 0.295765
11-
-0.109348 0.0158015 0.294273
12-
-0.110199 0.0447066 0.28057
13-
-0.142164 0.0444724 0.282062
14-
-0.074936 0.0151192 0.292574
15-
-0.043024 0.0152506 0.290206
16-
-0.0441224 0.0443856 0.277017
17-
-0.0760344 0.0442542 0.279385
1+
32
2+
-0.14473 -0.0228553 0.322448
3+
-0.112737 -0.02284 0.321793
4+
-0.112922 0.00805029 0.31344
5+
-0.144916 0.00803501 0.314096
6+
-0.0783766 -0.0241174 0.325577
7+
-0.0463961 -0.0244417 0.324508
8+
-0.0463221 0.00672937 0.317272
9+
-0.0783026 0.00705359 0.318341
10+
-0.14457 0.0159571 0.312138
11+
-0.112576 0.0160648 0.311562
12+
-0.112853 0.0465525 0.301845
13+
-0.144848 0.0464448 0.302421
14+
-0.0787003 0.0145954 0.313841
15+
-0.0467259 0.0141964 0.315058
16+
-0.046094 0.045559 0.308734
17+
-0.0780684 0.0459579 0.307517
18+
-0.14473 -0.0228553 0.322448
19+
-0.112737 -0.02284 0.321793
20+
-0.112922 0.00805029 0.31344
21+
-0.144916 0.00803501 0.314096
22+
-0.0783766 -0.0241174 0.325577
23+
-0.0463961 -0.0244417 0.324508
24+
-0.0463221 0.00672937 0.317272
25+
-0.0783026 0.00705359 0.318341
26+
-0.14457 0.0159571 0.312138
27+
-0.112576 0.0160648 0.311562
28+
-0.112853 0.0465525 0.301845
29+
-0.144848 0.0464448 0.302421
30+
-0.0787003 0.0145954 0.313841
31+
-0.0467259 0.0141964 0.315058
32+
-0.046094 0.045559 0.308734
33+
-0.0780684 0.0459579 0.307517

Test2_BundleAdjustment/bundle_adjustmenter.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class BALProblem
7171

7272
void getPoint3dCoordinates(vector<Point3d>& points)
7373
{
74-
for (int i = num_base_camera_observations(); i < num_observations(); i++)
74+
for (int i = 0; i < num_observations(); i++)
7575
{
7676
double* base_marker_transform = mutable_base_marker_transform_from_base_camera(i);
7777
double* marker_transform = mutable_marker_transform_from_base_marker(i);

Test2_BundleAdjustment/main.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ int main(int argc, char** argv)
8585
bal_problem.mutable_camera_transform_from_base_camera(i),
8686
bal_problem.mutable_base_marker_transform_from_base_camera(i),
8787
bal_problem.mutable_marker_transform_from_base_marker(i));
88-
88+
/*
8989
for (int j = 0; j < num_base_camera_observation; j++)
9090
{
9191
CostFunction* base_camera_cost_function =
@@ -99,7 +99,7 @@ int main(int argc, char** argv)
9999
NULL,
100100
bal_problem.mutable_base_marker_transform_from_base_camera(j),
101101
bal_problem.mutable_marker_transform_from_base_marker(j));
102-
}
102+
}*/
103103
}
104104

105105
Solver::Options options;

Test2_ReprojectionCheck/main.cpp

+81-34
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,47 @@
1111
#include <opencv2/aruco.hpp>
1212

1313
#define MARKER_SIDE 0.032
14+
#define CAMERAS 2
1415

1516
using namespace std;
1617
using namespace cv;
1718

19+
vector<Point3d> getCornersInCameraWorld(double side, Vec3d rvec, Vec3d tvec)
20+
{
21+
double half_side = side / 2;
22+
23+
// compute rot_mat
24+
Mat rot_mat;
25+
Rodrigues(rvec, rot_mat);
26+
27+
// transpose of rot_mat for easy columns extraction
28+
Mat rot_mat_t = rot_mat.t();
29+
30+
// the two E-O and F-O vectors
31+
double * tmp = rot_mat_t.ptr<double>(0);
32+
Point3d camWorldE(tmp[0] * half_side,
33+
tmp[1] * half_side,
34+
tmp[2] * half_side);
35+
36+
tmp = rot_mat_t.ptr<double>(1);
37+
Point3d camWorldF(tmp[0] * half_side,
38+
tmp[1] * half_side,
39+
tmp[2] * half_side);
40+
41+
// convert tvec to point
42+
Point3d tvec_3d(tvec[0], tvec[1], tvec[2]);
43+
44+
// return vector:
45+
vector<Point3d> ret(4, tvec_3d);
46+
47+
ret[0] += -camWorldE + camWorldF; //top left
48+
ret[1] += camWorldE + camWorldF; //top right
49+
ret[2] += camWorldE - camWorldF; //bottom right
50+
ret[3] += -camWorldE - camWorldF; //bottom left
51+
52+
return ret;
53+
}
54+
1855
int main()
1956
{
2057
//get intrinsics
@@ -51,13 +88,14 @@ int main()
5188
//get marker points
5289
Ptr<aruco::Dictionary> dictionary = aruco::getPredefinedDictionary(aruco::DICT_4X4_100);
5390
//vector<Point3d> object_points;
54-
vector<Point2f> image_points;
91+
vector<Point2f> image_points[CAMERAS];
5592

5693
map<string, Mat> images;
5794

5895

59-
for_each(begin(serial_numbers), end(serial_numbers), [&dictionary, /*&object_points,*/ &image_points, &serial_numbers, &camera_matrix_map, &dist_coeffs_map, &images](string sn)
96+
for(int camera_idx=0; camera_idx<CAMERAS; camera_idx++)
6097
{
98+
string sn = serial_numbers[camera_idx];
6199
string file_name = "../Common/Image/IR/" + sn + ".png";
62100
Mat image = imread(file_name);
63101
images[sn] = image;
@@ -98,16 +136,19 @@ int main()
98136

99137
for (int i = 0; i < ids.size(); i++)
100138
{
101-
if (sn == serial_numbers[1])
139+
if (sn == serial_numbers[0])
102140
{
103-
for (int j = 0; j < 4; j++)
104-
{
105-
image_points.push_back(corners[indices[i]][j]);
106-
}
141+
//vector<Point3d> corners3D = getCornersInCameraWorld(MARKER_SIDE, rvecs[indices[i]], tvecs[indices[i]]);
142+
//object_points.insert(object_points.end(), corners3D.begin(), corners3D.end());
143+
}
144+
145+
for (int j = 0; j < 4; j++)
146+
{
147+
image_points[camera_idx].push_back(corners[indices[i]][j]);
107148
}
108149
}
109150
}
110-
});
151+
}
111152

112153
Mat camera_rvec, camera_rot, camera_tvec;
113154

@@ -118,10 +159,7 @@ int main()
118159
return -1;
119160
}
120161

121-
fs2["R1"] >> camera_rvec;
122-
fs2["t1"] >> camera_tvec;
123-
124-
fs2.release();
162+
125163

126164
vector<Point3d> object_points;
127165
FILE* fptr = fopen("../Common/Correspondence/test2/point3d.txt", "r");
@@ -131,36 +169,45 @@ int main()
131169
exit(1);
132170
};
133171

134-
int num_points;
135-
fscanf(fptr, "%d", &num_points);
172+
int num_points_all;
173+
fscanf(fptr, "%d", &num_points_all);
174+
int num_points_per_camera = num_points_all / 2;
136175

137-
for (int i = 0; i < num_points; i++)
176+
for (int camera_idx = 0; camera_idx < CAMERAS; camera_idx++)
138177
{
139-
Point3d point;
140-
fscanf(fptr, "%lf", &point.x);
141-
fscanf(fptr, "%lf", &point.y);
142-
fscanf(fptr, "%lf", &point.z);
143-
object_points.emplace_back(point);
144-
}
145-
fclose(fptr);
178+
object_points.clear();
146179

180+
for (int i = 0; i < num_points_per_camera; i++)
181+
{
182+
Point3d point;
183+
fscanf(fptr, "%lf", &point.x);
184+
fscanf(fptr, "%lf", &point.y);
185+
fscanf(fptr, "%lf", &point.z);
186+
object_points.emplace_back(point);
187+
}
147188

148-
vector<Point2d> reprojected_points;
149-
projectPoints(object_points, camera_rvec, camera_tvec, camera_matrix_map[serial_numbers[1]], dist_coeffs_map[serial_numbers[1]], reprojected_points);
189+
fs2["R" + to_string(camera_idx)] >> camera_rvec;
190+
fs2["t" + to_string(camera_idx)] >> camera_tvec;
150191

151-
//visualization
152-
Mat reprojection_image = images[serial_numbers[1]];
153-
for (int i = 0; i < reprojected_points.size(); i++)
154-
{
155-
drawMarker(reprojection_image, image_points[i], Scalar(255, 0, 0), MARKER_CROSS, 10, 2);
156-
drawMarker(reprojection_image, reprojected_points[i], Scalar(0, 255, 0), MARKER_CROSS, 10, 2);
157-
}
192+
vector<Point2d> reprojected_points;
193+
projectPoints(object_points, camera_rvec, camera_tvec, camera_matrix_map[serial_numbers[camera_idx]], dist_coeffs_map[serial_numbers[camera_idx]], reprojected_points);
158194

159-
putText(reprojection_image, "BLUE : Marker Points (t+1)", Point{ 10,20 }, FONT_HERSHEY_SIMPLEX, 0.7, Scalar(255, 0, 0), 2);
160-
putText(reprojection_image, "GREEN : Reprojected Points (t -> t+1)", Point{ 10,45 }, FONT_HERSHEY_SIMPLEX, 0.7, Scalar(0, 255, 0), 2);
195+
//visualization
196+
Mat reprojection_image = images[serial_numbers[camera_idx]];
197+
for (int i = 0; i < reprojected_points.size(); i++)
198+
{
199+
drawMarker(reprojection_image, image_points[camera_idx][i], Scalar(255, 0, 0), MARKER_CROSS, 10, 2);
200+
drawMarker(reprojection_image, reprojected_points[i], Scalar(0, 255, 0), MARKER_CROSS, 10, 2);
201+
}
161202

162-
imshow("Reprojection", reprojection_image);
203+
putText(reprojection_image, "BLUE : Marker Points (t+1)", Point{ 10,20 }, FONT_HERSHEY_SIMPLEX, 0.7, Scalar(255, 0, 0), 2);
204+
putText(reprojection_image, "GREEN : Reprojected Points (t -> t+1)", Point{ 10,45 }, FONT_HERSHEY_SIMPLEX, 0.7, Scalar(0, 255, 0), 2);
163205

206+
imshow("Reprojection: " + serial_numbers[camera_idx], reprojection_image);
207+
}
208+
209+
fclose(fptr);
210+
fs2.release();
164211

165212
while (true)
166213
{

0 commit comments

Comments
 (0)