[32/64bit] 3次元と2次元の点の対応関係から,物体の姿勢を見つけます.この関数は,オブジェクト座標フレームで表現された3次元点を,カメラ座標フレームに変換するための回転ベクトルと並進ベクトルを,それぞれ異なる方法で返します.
calib3d_solvePnP_InputArray p1,p2,p3,p4,p5,p6,p7,p8
p1 = sptr : IntPtr selfectPoints p2 = sptr : IntPtr imagePoints p3 = sptr : IntPtr cameraMatrix p4 = sptr : IntPtr distCoeffs p5 = sptr : IntPtr rvec p6 = sptr : IntPtr tvec p7 = int : int useExtrinsicGuess p8 = int : int flags
(プラグイン / モジュール : OpenCvSharpExtern.dll)
P3Pメソッド(SOLVEPNP_P3P、SOLVEPNP_AP3P):唯一の解を返すために4つの入力点を必要とする。 SOLVEPNP_IPPE 入力点は >= 4 でなければならず、オブジェクト点は同一平面上になければならない。 SOLVEPNP_IPPE_SQUARE マーカーのポーズ推定に適した特殊なケース。入力点の数は4でなければなりません。オブジェクトポイントは以下の順序で定義する必要があります。 点0: [-squareLength / 2, squareLength / 2, 0] 。 point 1: [ squareLength / 2, squareLength / 2, 0]の順に定義される。 ポイント2:[ squareLength / 2, -squareLength / 2, 0]の順になります。 点3:[-squareLength / 2, -squareLength / 2, 0]。 この関数は,オブジェクトポイントの集合と,それに対応する画像投影,カメラの固有行列と歪み係数が与えられた場合に,オブジェクトの姿勢を推定します(より正確には,カメラフレームのX軸は右向き,Y軸は下向き,Z軸は前向き).ワールドフレームで表現された点は、透視投影モデルとカメラ固有のパラメータマトリクスを用いて、画像平面に投影されます。\♪ u ♪ v ♪ 1 ♪ end{bmatrix} &= ??? -? ????\0.1em\\\\^{c}\\{T}_wX_{w}\\ Y_{w}\\ ♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪\\ ♪♪♪♪♪~\\ ♪♪♪♪♪♪♪♪~\♪♪~♪ 1 & 0 & 0 & 0 ♪ 0 & 0 & 1 & 0 ♪ END\r_{11} & r_{12} & r_{13} & t_x ¶ r_{21} & r_{22} & r_{23} & t_y ¶ r_{31} & r_{32} & r_{33} & t_z ¶ 0 & 0 & 1 ¶ end{bmatrix}.\♪♪♪♪♪♪♪~X_{w}\\ X_{w}/Y_{w}\\ ♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪\\\\\♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪\推定されたポーズは、ワールドフレームで表現された3Dポイントをカメラフレームに変換するための回転(rvec)と平行移動(tvec)のベクトルとなります。\\\\X_c ¶ Y_c ¶ Z_c ¶ 1 ¶end{bmatrix} &= ¶hspace{0.2em}.^{c}\\{T}_wX_{w}\\ Y_{w}\\ ♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪\\ ♪♪♪♪♪~\\\\♪ X, Y, Z\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\♪♪♪♪♪♪♪~X_{w}\\ X_{w}/Y_{w}\\ ♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪\\\\\♪♪♪♪end{align*}\Note 平面型拡張現実感に対する solvePnP の使用例は opencv_source_code/samples/python/plane_ar.py にあります。 Pythonをお使いの方へ。 solvePnP は連続した配列を必要とするので,Numpy 配列スライスは入力として動作しません(modules/calib3d/src/solvepnp.cpp version 2.4.9 の 55 行目あたりで cv::Mat::checkVector() を用いたアサーションにより強制されています). P3P アルゴリズムでは,2 チャンネルの情報を必要とする undistortPoints の呼び出し(modules/calib3d/src/solvepnp.cpp version 2.4.9 の 75 行目付近)のために,画像ポイントが (N,1,2) の形をした配列になっている必要があります. したがって,あるデータ D = np.array(...) (D.shape = (N,M)) が与えられた場合,そのサブセットを例えば imagePoints として使用するためには,それを新しい配列に効果的にコピーしなければなりません: imagePoints = np.ascontiguousarray(D[:,:2]).reshape((N,1,2)) SOLVEPNP_DLSおよびSOLVEPNP_UPNPメソッドは、現在の実装が不安定で、完全に間違った結果を与えることがあるため、使用できません。これら2つのフラグのいずれかを渡すと、代わりにSOLVEPNP_EPNPメソッドが使用されます。 一般的なケースでは、最小ポイント数は4である。SOLVEPNP_P3PおよびSOLVEPNP_AP3P法の場合、正確に4点を使用することが必要である(最初の3点はP3P問題のすべての解を推定するために使用され、最後の1点は再投影誤差を最小化する最良の解を保持するために使用される)。 SOLVEPNP_ITERATIVEメソッドとuseExtrinsicGuess=trueを使用した場合、最小のポイント数は3です(ポーズを計算するには3ポイントで十分ですが、最大で4つの解があります)。収束させるためには、初期解をグローバル解に近づける必要があります。 SOLVEPNP_IPPEの場合、入力ポイントは≧4でなければならず、オブジェクトポイントはコプラナーでなければなりません。 SOLVEPNP_IPPE_SQUARE の場合、これはマーカーのポーズ推定に適した特殊なケースです。入力点の数は 4 でなければなりません。オブジェクトポイントは以下の順序で定義しなければならない。 点0: [-squareLength / 2, squareLength / 2, 0] 。 point 1: [ squareLength / 2, squareLength / 2, 0]の順に定義される。 ポイント2:[ squareLength / 2, -squareLength / 2, 0]の順になります。 point 3: [-squareLength / 2, -squareLength / 2, 0]SOLVEPNP_SQPNPの場合、入力ポイントは≧3でなければなりませんサンプル:samples/cpp/tutorial_code/features2D/Homography/decompose_homography.cpp、samples/cpp/tutorial_code/features2D/Homography/homography_from_camera_displacement.cpp。 元関数名(C#): calib3d_solvePnP_InputArray 元DLLエクスポート名: calib3d_solvePnP_InputArray 参照元CSファイル: Internal\PInvoke\NativeMethods\calib3d\NativeMethods_calib3d.cs ▼ C言語側関数定義
CVAPI(ExceptionStatus) calib3d_solvePnP_InputArray( cv::_InputArray *objectPoints, cv::_InputArray *imagePoints, cv::_InputArray *cameraMatrix, cv::_InputArray *distCoeffs, cv::_OutputArray *rvec, cv::_OutputArray *tvec, int useExtrinsicGuess, int flags) { BEGIN_WRAP cv::solvePnP(*objectPoints, *imagePoints, *cameraMatrix, entity(distCoeffs), *rvec, *tvec, useExtrinsicGuess != 0, flags); END_WRAP }
プラグイン / モジュール | OpenCvSharpExtern.dll |
バージョン | 1.00 |
作成日 | 2021/11/30 |
著作者 | inovia |
URL | https://hsp.moe/ |
備考 | #include "OpenCvSharpExtern32.as"
#include "OpenCvSharpExtern64.as" 使用するHSPランタイムのビット数に合わせたインクルードファイルを使用すること |
タイプ | OpenCVSharpラッパーDLL |
グループ | NativeMethods_calib3d |
対応環境 |
|
hs ファイル | hsphelp\OpenCvSharpExtern.hs |