PnP (Perspective-n-Point) |
2019-02-28 - 2019-04-28 (update) |
|
|
*PnP とは
図1に示すように,3次元空間中にある点群Aiと,2次元の画像上にある点群Biの関係から,カメラの位置姿勢を推定する問題設定や解法を指す言葉です.利用する点数に応じて,P3P,P4Pのように呼ぶ場合があります.
[img:5sdz]
{{small:図1 PnPに利用する3次元と2次元の点群}}
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/sp/pose
シミュレーションにより設定した3次元と2次元の点群を入力として,カメラの位置姿勢を推定します.
P3P,P4P,に加え[link:RANSAC]を利用した方法などを実装しています.
*P3P
画像だけを利用する場合,最小で3つの点が必要になります.ただし,P3Pは途中4次方程式を解く都合から,解が最大4つ算出されます.なお,IMUなど追加のセンサや何かしらの前提条件を利用すれば解を絞ることができる場合があります.P3Pについては,下記の論文[1]が参考になります.
{{small:[1]出口, "コンピュータビジョン,グラフィックスのための射影幾何学Ⅳ", 1991}}
{{small:[link:https://www.jstage.jst.go.jp/article/sicejl1962/30/3/30_3_241/_pdf] }}
*P4P
4つの点を利用することで位置姿勢の解を一意に特定して算出することができます.P4Pも幾つか解き方がありますが,例えばP3Pで計算した解の候補のうち,4つ目の点を利用した再投影誤差が最小となる解を選ぶことで計算できます.
*P2P
IMUなど追加のセンサを利用して,2点で解を計算できる場合があります.[2]
{{small:[2]L.D'Alfonso, E.Garone, P.Muraca, P.Pugliese, "P3P and P2P problems with known camera and object vertical directions", Mediterranean Conferenceon Control and Automation (MED), 2013}}
{{small:[link:http://www.gprix.it/TN02.pdf] }}
*EPnP
OpenCVでも利用されている,効果的にPnPを解く方法です.[3]
{{small:[3]V.Lepetit, F.Moreno-Noguer, P.Fua, "EPnP: An accurate O(n) solution to the PnP problem", International Journal of Computer Vision(IJCV), 2008}}
{{small:[link:https://icwww.epfl.ch/~lepetit/papers/lepetit_ijcv08.pdf] }}
{#
// OpenCV の関数
void solvePnP(const Mat& objectPoints, const Mat& imagePoints,
const Mat& cameraMatrix, const Mat& distCoeffs, Mat& rvec, Mat& tvec, bool useExtrinsicGuess=false)
#}
{{small:[link:http://opencv.jp/opencv-2svn/cpp/camera_calibration_and_3d_reconstruction.html] }}
>> ご意見・ご質問など お気軽にご連絡ください.info