teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

[R|t]と書いていた部分をA[R|t]に変更

2020/12/04 05:31

投稿

s.s.
s.s.

スコア1

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)まで格子状に並んだもので、出力も同じ点群になることを期待しているのですが、出力は(-1219, -678, 292)から(-1198, -640, 337)までの下記図のような格子状の点群になっています。
3
+ 入力にしている点群は座標(0,0,0)から(9*22,6*22,0)まで格子状に並んだもので、出力も同じ点群になることを期待しているのですが、出力は下記図のようにXY平面に平行でい上、一部が歪んだ格子状の点群になます。
4
- ![出力点群](a38627f154850e046def07bfb5f4393d.png)
5
4
 
5
+ ![出力点群](29d749360a86185e704f2fca48aea7a6.png)
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);