calib3d_solvePnPRansac_vector

[32/64bit] RANSACスキームを用いて,3D-2Dの点の対応関係から物体のポーズを見つけます.

calib3d_solvePnPRansac_vector p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15

p1 = var : Point3f[] objectPoints
p2 = int : int objectPointsLength
p3 = var : Point2f[] imagePoints
p4 = int : int imagePointsLength
p5 = var : double* cameraMatrix
p6 = var : double[]? distCoeffs
p7 = int : int distCoeffsLength
p8 = var : [Out] double[] rvec
p9 = var : [Out] double[] tvec
p10 = int : int useExtrinsicGuess
p11 = int : int iterationsCount
p12 = float : float reprojectionError
p13 = double : double confidence
p14 = sptr : IntPtr inliers
p15 = int : int flags

(プラグイン / モジュール : OpenCvSharpExtern.dll)

解説

この関数は,オブジェクトポイントの集合と,それに対応する画像投影,さらにカメラの固有行列と歪み係数が与えられた場合に,オブジェクトのポーズを推定します.この関数は,再投影誤差,つまり,観測された投影画像ポイントと,(projectPoints を用いて)投影されたオブジェクトポイントとの間の二乗距離の総和を最小にするようなポーズを求めます.RANSAC を用いることで,外れ値に強い関数となっています.


オブジェクト検出のための solvePNPRansac の使用例は, opencv_source_code/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/ にあります.


Minimal Sample Setsステップのカメラポーズの推定に使用されるデフォルトの方法はSOLVEPNP_EPNPです。例外があります。


SOLVEPNP_P3PまたはSOLVEPNP_AP3Pを選択した場合、これらの方法が使用されます。


入力ポイント数が4に等しい場合、SOLVEPNP_P3Pが使用されます。








すべてのインライアを使用してカメラポーズを推定するために使用される手法は、SOLVEPNP_P3PまたはSOLVEPNP_AP3Pに等しくない限り、フラグパラメータによって定義される。この場合、代わりにSOLVEPNP_EPNP法が使用される。

元関数名(C#): calib3d_solvePnPRansac_vector
元DLLエクスポート名: calib3d_solvePnPRansac_vector
参照元CSファイル: Internal\PInvoke\NativeMethods\calib3d\NativeMethods_calib3d.cs
▼ C言語側関数定義
CVAPI(ExceptionStatus) calib3d_solvePnPRansac_vector(
    cv::Point3f *objectPoints, int objectPointsLength,
    cv::Point2f *imagePoints, int imagePointsLength,
    double *cameraMatrix,
    double *distCoeffs, int distCoeffsLength,
    double *rvec, double *tvec,
    int useExtrinsicGuess, int iterationsCount, float reprojectio_____r, double confidence,
    std::vector<int> *inliers, int flags)
{
    BEGIN_WRAP
    const cv::Mat objectPointsMat(objectPointsLength, 1, CV_64FC3, objectPoints);
    const cv::Mat imagePointsMat(imagePointsLength, 1, CV_64FC2, imagePoints);
    cv::Mat distCoeffsMat;
    if (distCoeffs != nullptr)
        distCoeffsMat = cv::Mat(distCoeffsLength, 1, CV_64FC1, distCoeffs);

    cv::Matx<double, 3, 1> rvecM, tvecM;

    cv::solvePnPRansac(objectPointsMat, imagePointsMat, *cameraMatrix, distCoeffsMat, rvecM, tvecM,
        useExtrinsicGuess != 0, iterationsCount, reprojectio_____r, confidence,
        *inliers, flags);

    memcpy(rvec, rvecM.val, sizeof(double) * 3);
    memcpy(tvec, tvecM.val, sizeof(double) * 3);
    END_WRAP
}

情報

プラグイン / モジュールOpenCvSharpExtern.dll
バージョン1.00
作成日2021/11/30
著作者inovia
URLhttps://hsp.moe/
備考#include "OpenCvSharpExtern32.as"
#include "OpenCvSharpExtern64.as"
使用するHSPランタイムのビット数に合わせたインクルードファイルを使用すること
タイプOpenCVSharpラッパーDLL
グループNativeMethods_calib3d
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\OpenCvSharpExtern.hs