対応点とカメラ位置姿勢の関係
対応点座標CSV出力した対応点座標とカメラ位置・姿勢CSV出力した行列の関係は以下の通りです。
例を元に説明します。
1.
CSV出力の例
対応点CSV出力の例の一部
カメラ位置・姿勢CSV出力の例
2.
対応点座標をカメラの座標系に変換する行列の作成
カメラの姿勢とカメラの位置を元に3行4列の行列を作成し、4行目に(0,0,0,1)を追加し4行4列の行列にします。
0.991162 |
0.053993 |
0.121175 |
0.737965 |
-0.13035 |
0.226834 |
0.96517 |
-1.12E-01 |
0.024626 |
-0.97244 |
0.231868 |
7.12E-03 |
0 |
0 |
0 |
1 |
その行列の逆行列を算出します。
0.991161 |
-0.13035 |
0.024626 |
-0.74615 |
0.053993 |
0.226835 |
-0.97244 |
-0.00763 |
0.121175 |
0.965171 |
0.231867 |
0.016558 |
0 |
0 |
0 |
1 |
3.
対応点座標をカメラの座標系での座標に変換
逆行列の上3行を抽出します。
0.991161 |
-0.13035 |
0.024626 |
-0.74615 |
0.053993 |
0.226835 |
-0.97244 |
-0.00763 |
0.121175 |
0.965171 |
0.231867 |
0.016558 |
対応点の3次元座標を列ベクトルとし4行目に1を設定します。(下の例は対応点番号1のX,Y,Z座標)。
0.484373 |
1.41055 |
0.701542 |
1 |
積を算出しカメラ座標系での座標を得ます。
-0.43266 |
-0.34372 |
1.599339 |
この値はカメラ位置を原点、撮影方向をZ軸にした座標系での対応点座標になります。
4.
3次元座標を2次元座標に変換
X,Y成分をZ成分で割ります。
-0.27052 |
-0.21491 |
この値は倍率1の写真の写真上の対応点の座標となります。なお原点は写真の左右上下の中心です。
5.
写真の倍率をかけ、写真の中心を加える。
-869.362 |
-690.654 |
この値は原点が写真の左右上下の中心としての対応点座標です。
6.
写真の左上隅を原点に移動(写真上の座標は左上隅が原点のため)
画素数の1/2を算出します。
1408 |
1056 |
画素数の1/2を加えて写真左上を原点にした対応点座標を算出します。
538.6379 |
365.3461 |
この値が求めた対応点の3次元座標を再度写真上の座標に変換した座標となります。この座標が写真上に表示される赤の対応点の座標です。
この値が「写真上に設定した対応点座標」と一致する(近づく)ようにSFPは写真の倍率・カメラの位置・カメラの姿勢を計算します。