[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 |
URL | https://hsp.moe/ |
備考 | #include "OpenCvSharpExtern32.as"
#include "OpenCvSharpExtern64.as" 使用するHSPランタイムのビット数に合わせたインクルードファイルを使用すること |
タイプ | OpenCVSharpラッパーDLL |
グループ | NativeMethods_calib3d |
対応環境 |
|
hs ファイル | hsphelp\OpenCvSharpExtern.hs |