質問編集履歴
1
[R|t]と書いていた部分をA[R|t]に変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
格子状に配置された点群をcv::projectPointsで投影し2次元点群にしたものを2つ用意し、その点対応から元の3次元点群を復元したいのですが、cv::triangulatePointsから誤った出力が返ってきます。
|
2
2
|
|
3
|
-
入力にしている点群は座標(0,0,0)から(9*22,6*22,0)まで格子状に並んだもので、出力も同じ点群になることを期待しているのですが、出力は
|
3
|
+
入力にしている点群は座標(0,0,0)から(9*22,6*22,0)まで格子状に並んだもので、出力も同じ点群になることを期待しているのですが、出力は下記図のようにXY平面に平行でない上、一部が歪んだ格子状の点群になります。
|
4
|
-

|
5
4
|
|
5
|
+

|
6
|
+
|
6
7
|
作成したプログラムを以下に示します。
|
7
8
|
お手数ですが、自分の作成したプログラムの間違いを指摘していただければ幸いです。
|
8
9
|
|
@@ -68,13 +69,15 @@
|
|
68
69
|
projection_points_from_camera2
|
69
70
|
);
|
70
71
|
|
71
|
-
//Create [R|t] projection matrix
|
72
|
+
//Create A[R|t] projection matrix
|
72
73
|
cv::Mat project_mat_1;
|
73
74
|
cv::Mat project_mat_2;
|
74
75
|
cv::Rodrigues(camera1_rot, project_mat_1);
|
75
76
|
cv::Rodrigues(camera2_rot, project_mat_2);
|
76
77
|
cv::hconcat(project_mat_1, camera1_t.t(), project_mat_1);
|
77
78
|
cv::hconcat(project_mat_2, camera2_t.t(), project_mat_2);
|
79
|
+
project_mat_1 = cam_mat * project_mat_1;
|
80
|
+
project_mat_2 = cam_mat * project_mat_2;
|
78
81
|
|
79
82
|
//Convert double to float for cv::triangulatePoints
|
80
83
|
project_mat_1.convertTo(project_mat_1, CV_32F);
|