calib3d_stereoCalibrate_array

[32bit] ステレオカメラセットのキャリブレーションを行います。この関数は、2台のカメラそれぞれの固有パラメータと、2台のカメラ間の外部パラメータを求めます。

calib3d_stereoCalibrate_array p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23

p1 = sptr : IntPtr[] objectPoints
p2 = int : int opSize1
p3 = var : int[] opSizes2
p4 = sptr : IntPtr[] imagePoints1
p5 = int : int ip1Size1
p6 = var : int[] ip1Sizes2
p7 = sptr : IntPtr[] imagePoints2
p8 = int : int ip2Size1
p9 = var : int[] ip2Sizes2
p10 = var : double* cameraMatrix1
p11 = var : [In, Out] double[] distCoeffs1
p12 = int : int dc1Size
p13 = var : double* cameraMatrix2
p14 = var : [In, Out] double[] distCoeffs2
p15 = int : int dc2Size
p16 = ARGS_SIZE : Size imageSize
p17 = sptr : IntPtr R
p18 = sptr : IntPtr T
p19 = sptr : IntPtr E
p20 = sptr : IntPtr F
p21 = int : int flags
p22 = ARGS_TERMCRITERIA : TermCriteria criteria
p23 = var : out double returnValue

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

解説

この関数は,ステレオペアを構成する2つのカメラ間の変換を推定します.2つのカメラ間の相対的な位置と姿勢が固定されているステレオカメラにおいて,1番目のカメラと2番目のカメラに対する物体の姿勢をそれぞれ( ????? ), ( ????? ), ( ????? ) と計算すると,それらの姿勢は確実に互いに関連していることになります.つまり、2つのカメラの相対的な位置と向き(\(R\)、\(T\))がわかっていれば、(\(R_1\)、\(T_1\))が与えられたときに、(\(R_2\)、\(T_2amer))を計算することができます。これが,この関数の役割です.R_2=R R_1\]T_2=R T_1 + T.\]従って、1台目のカメラの座標系での3次元点の座標表現が与えられたとき、2台目のカメラの座標系での3次元点の座標表現を計算することができます。♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪R&T」は、0&1で構成されています。\\\\Optionally, the essential matrix E:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\R\(t=[t_0, t_1, t_2]^t\) .また,この関数は,基本行列Fを計算することもできます:\[F = cameraMatrix2^{-T}\cdot E ?cdot cameraMatrix1^{-1}\]ステレオ関連の情報の他に,2台のカメラそれぞれのフルキャリブレーションを行うこともできます。しかし,パラメータ空間の次元が高く,入力データにノイズが含まれているため,この関数は正しい解から乖離する可能性があります.各カメラの固有パラメータを個別に高精度に推定できる場合(例えば,calibrateCamera を用いて)は,そうしてから,計算された固有パラメータとともに CALIB_FIX_INTRINSIC フラグを関数に渡すことをお勧めします.また,すべてのパラメータが一度に推定される場合は,いくつかのパラメータを制限することに意味があります.例えば,CALIB_SAME_FOCAL_LENGTH フラグと CALIB_ZERO_TANGENT_DIST フラグを渡しますが,これは通常,妥当な仮定です. calibrateCamera と同様に,この関数は,両方のカメラから得られるすべての利用可能なビューのすべてのポイントに対して,合計再投影誤差を最小化します.この関数は,再投影誤差の最終的な値を返します.

元関数名(C#): calib3d_stereoCalibrate_array
元DLLエクスポート名: calib3d_stereoCalibrate_array
参照元CSファイル: Internal\PInvoke\NativeMethods\calib3d\NativeMethods_calib3d.cs
▼ C言語側関数定義
CVAPI(ExceptionStatus) calib3d_stereoCalibrate_array(
    cv::Point3f **objectPoints, int opSize1, int *opSizes2,
    cv::Point2f **imagePoints1, int ip1Size1, int *ip1Sizes2,
    cv::Point2f **imagePoints2, int ip2Size1, int *ip2Sizes2,
    double *cameraMatrix1,
    double *distCoeffs1, int dc1Size,
    double *cameraMatrix2,
    double *distCoeffs2, int dc2Size,
    MyCvSize imageSize,
    cv::_OutputArray *R, cv::_OutputArray *T,
    cv::_OutputArray *E, cv::_OutputArray *F,
    int flags, 
    MyCvTermCriteria criteria,
    double *returnValue)
{
    BEGIN_WRAP
    std::vector<std::vector<cv::Point3f> > objectPointsVec(opSize1);
    std::vector<std::vector<cv::Point2f> > imagePoints1Vec(ip1Size1);
    std::vector<std::vector<cv::Point2f> > imagePoints2Vec(ip2Size1);
    for (auto i = 0; i < opSize1; i++)
        objectPointsVec[i] = std::vector<cv::Point3f>(
        objectPoints[i], objectPoints[i] + opSizes2[i]);
    for (auto i = 0; i < ip1Size1; i++)
        imagePoints1Vec[i] = std::vector<cv::Point2f>(
        imagePoints1[i], imagePoints1[i] + ip1Sizes2[i]);
    for (auto i = 0; i < ip2Size1; i++)
        imagePoints2Vec[i] = std::vector<cv::Point2f>(
        imagePoints2[i], imagePoints2[i] + ip2Sizes2[i]);

    cv::Mat cameraMatrix1M(3, 3, CV_64FC1, cameraMatrix1);
    cv::Mat cameraMatrix2M(3, 3, CV_64FC1, cameraMatrix2);
    cv::Mat distCoeffs1M(dc1Size, 1, CV_64FC1, distCoeffs1);
    cv::Mat distCoeffs2M(dc2Size, 1, CV_64FC1, distCoeffs2);

    *returnValue = cv::stereoCalibrate(objectPointsVec, imagePoints1Vec, imagePoints2Vec,
        cameraMatrix1M, distCoeffs1M,
        cameraMatrix2M, distCoeffs2M,
        cpp(imageSize), entity(R), entity(T), entity(E), entity(F), 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