calib3d_calibrateCamera_InputArray

[32bit] キャリブレーションパターンの複数のビューから、カメラの内在的および外在的パラメータを見つけます。

calib3d_calibrateCamera_InputArray p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12

p1 = sptr : IntPtr[] objectPoints
p2 = int : int objectPointsSize
p3 = sptr : IntPtr[] imagePoints
p4 = int : int imagePointsSize
p5 = ARGS_SIZE : Size imageSize
p6 = sptr : IntPtr cameraMatrix
p7 = sptr : IntPtr distCoeffs
p8 = sptr : IntPtr rvecs
p9 = sptr : IntPtr tvecs
p10 = int : int flags
p11 = ARGS_TERMCRITERIA : TermCriteria criteria
p12 = var : out double returnValue

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

解説

この関数は,カメラの内部パラメータと,各ビューの外部パラメータを推定します.このアルゴリズムは, [293] と [31] に基づいています.各ビューにおける3次元オブジェクトポイントの座標と,それに対応する2次元射影を指定する必要があります.これは、既知のジオメトリと簡単に検出できる特徴点を持つオブジェクトを使用することで実現できます。このようなオブジェクトは,キャリブレーションリグやキャリブレーションパターンと呼ばれます.OpenCVは,キャリブレーションリグとしてチェスボードをビルトインでサポートしています(findChessboardCornersを参照してください).現在のところ,内部パラメータの初期化(CALIB_USE_INTRINSIC_GUESS がセットされていない場合)は,平面的なキャリブレーションパターン(オブジェクトポイントのZ座標はすべて0でなければいけない)に対してのみ実装されています.アルゴリズムは以下のステップを実行します:初期固有パラメータを計算する(平面キャリブレーションパターンでのみ利用可能なオプション)、または入力パラメータから読み取る。CALIB_FIX_K? の一部が指定されていない限り、歪み係数はすべてゼロに初期設定されます。


固有のパラメータが既に知られているかのように、初期のカメラポーズを推定する。これは solvePnP を用いて行われる。


グローバル Levenberg-Marquardt 最適化アルゴリズムを実行して,再投影誤差,つまり,観測された特徴点 imagePoints と,(カメラパラメータとポーズの現在の推定値を用いて)投影されたオブジェクト点 objectPoints との間の二乗距離の総和を最小化します.詳細は projectPoints を参照してください。非正方(non-N-by-N)グリッドを使用し、findChessboardCorners でキャリブレーションを行った場合、 calibrateCamera が悪い値(歪み係数がゼロ、\(c_x\)と\(c_y\)が画像の中心から非常に離れている、\(f_x\)と?(f_yansen)の差が大きい(比率が10:1以上))の場合は、findChessboardCornersでpatternSize=cvSize(cols,rows)を使うのではなく、patternSize=cvSize(rows,cols)を使っていると思われます。関連項目:ocalibrateCameraRO, findChessboardCorners, solvePnP, initCameraMatrix2D, stereoCalibrate, undistort

元関数名(C#): calib3d_calibrateCamera_InputArray
元DLLエクスポート名: calib3d_calibrateCamera_InputArray
参照元CSファイル: Internal\PInvoke\NativeMethods\calib3d\NativeMethods_calib3d.cs
▼ C言語側関数定義
CVAPI(ExceptionStatus) calib3d_calibrateCamera_InputArray(
    cv::Mat **objectPoints, int objectPointsSize,
    cv::Mat **imagePoints, int imagePointsSize,
    MyCvSize imageSize,
    cv::_InputOutputArray *cameraMatrix,
    cv::_InputOutputArray *distCoeffs,
    std::vector<cv::Mat> *rvecs, std::vector<cv::Mat> *tvecs,
    int flags,
    MyCvTermCriteria criteria,
    double *returnValue)
{
    BEGIN_WRAP
    std::vector<cv::Mat> objectPointsVec(objectPointsSize);
    for (auto i = 0; i < objectPointsSize; i++)
        objectPointsVec[i] = *objectPoints[i];
    std::vector<cv::Mat> imagePointsVec(imagePointsSize);
    for (auto i = 0; i < imagePointsSize; i++)
        imagePointsVec[i] = *imagePoints[i];

    *returnValue = cv::calibrateCamera(objectPointsVec, imagePointsVec, cpp(imageSize),
        *cameraMatrix, *distCoeffs, *rvecs, *tvecs, flags, cpp(criteria));
    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