calib3d_calibrateCamera_vector

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

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

p1 = sptr : IntPtr[] objectPoints
p2 = int : int opSize1
p3 = var : int[] opSize2
p4 = sptr : IntPtr[] imagePoints
p5 = int : int ipSize1
p6 = var : int[] ipSize2
p7 = ARGS_SIZE : Size imageSize
p8 = var : double* cameraMatrix
p9 = var : [In, Out] double[] distCoeffs
p10 = int : int distCoeffsSize
p11 = sptr : IntPtr rvecs
p12 = sptr : IntPtr tvecs
p13 = int : int flags
p14 = ARGS_TERMCRITERIA : TermCriteria criteria
p15 = 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_vector
元DLLエクスポート名: calib3d_calibrateCamera_vector
参照元CSファイル: Internal\PInvoke\NativeMethods\calib3d\NativeMethods_calib3d.cs
▼ C言語側関数定義
CVAPI(ExceptionStatus) calib3d_calibrateCamera_vector(
    cv::Point3f **objectPoints, int opSize1, int *opSize2,
    cv::Point2f **imagePoints, int ipSize1, int *ipSize2,
    MyCvSize imageSize,
    double *cameraMatrix,
    double *distCoeffs, int distCoeffsSize,
    std::vector<cv::Mat> *rvecs, std::vector<cv::Mat> *tvecs,
    int flags,
    MyCvTermCriteria criteria,
    double *returnValue)
{
    BEGIN_WRAP
    std::vector<std::vector<cv::Point3f> > objectPointsVec(opSize1);
    for (auto i = 0; i < opSize1; i++)
        objectPointsVec[i] = std::vector<cv::Point3f>(objectPoints[i], objectPoints[i] + opSize2[i]);

    std::vector<std::vector<cv::Point2f> > imagePointsVec(ipSize1);
    for (auto i = 0; i < ipSize1; i++)
        imagePointsVec[i] = std::vector<cv::Point2f>(imagePoints[i], imagePoints[i] + ipSize2[i]);

    cv::Mat cametaMatrixM(3, 3, CV_64FC1, cameraMatrix);
    cv::Mat distCoeffsM(distCoeffsSize, 1, CV_64FC1, distCoeffs);

    *returnValue = cv::calibrateCamera(objectPointsVec, imagePointsVec, cpp(imageSize),
        cametaMatrixM, distCoeffsM, *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