calib3d_stereoRectify_InputArray

[32/64bit] キャリブレーションされたステレオカメラの各ヘッドに対して,平行化変換を計算します.

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

p1 = sptr : IntPtr cameraMatrix1
p2 = sptr : IntPtr distCoeffs1
p3 = sptr : IntPtr cameraMatrix2
p4 = sptr : IntPtr distCoeffs2
p5 = ARGS_SIZE : Size imageSize
p6 = sptr : IntPtr R
p7 = sptr : IntPtr T
p8 = sptr : IntPtr R1
p9 = sptr : IntPtr R2
p10 = sptr : IntPtr P1
p11 = sptr : IntPtr P2
p12 = sptr : IntPtr Q
p13 = int : int flags
p14 = double : double alpha
p15 = ARGS_SIZE : Size newImageSize
p16 = var : out Rect validPixROI1
p17 = var : out Rect validPixROI2

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

解説

この関数は,各カメラの回転行列を計算し,両カメラの画像平面を(仮想的に)同一平面にします.その結果,すべてのエピポーラ線が平行になり,密なステレオ対応関係の問題が簡単になります.この関数は, stereoCalibrate によって計算された行列を入力として受け取ります.出力として,2つの回転行列と,新しい座標への2つの投影行列が得られます.この関数は,以下の2つのケースを区別します:水平ステレオ:1番目と2番目のカメラのビューが,主にx軸に沿って相対的にシフトします(わずかな垂直方向のシフトもあり得ます).整形された画像では,左右のカメラの対応するエピポーラ線は水平で,同じy座標を持ちます.P1とP2は次のようになります。





\P1} = ????? ) ????? ) ????? ) ????? ) ????? ) ????? ) ????? ) ????? ) ????? ) ??_?CC








\\\\,\]





ここで、T_x\はカメラ間の水平方向の移動量、CALIB_ZERO_DISPARITYが設定されている場合は、\(cx_1=cx_2\)となります。





垂直方向のステレオ:1台目と2台目のカメラのビューは、主に垂直方向に相対的にシフトします(おそらく水平方向にも少しシフトします)。整形された画像のエピポーララインは垂直で,同じx座標を持っています.P1とP2は次のようになります。





\P1 = ????? ) ????? ) ????? ) ????? ) ????? ) ????? ) ????? ) ????? ) ????? ) ??_?CC








\♪\\\\





ご覧のように、P1、P2の最初の3列は、実質的に新しい「平行化された」カメラ行列となります。この行列は,R1 と R2 とともに initUndistortRectifyMap に渡され,各カメラの平行化マップを初期化します。以下に,stereo_calib.cpp サンプルのスクリーンショットを示します。いくつかの赤い水平線が,対応する画像領域を通過しています.これは,画像がよく平行化されていることを意味しており,ほとんどのステレオ対応付けアルゴリズムがこれに依存しています.緑色の四角形は, roi1 と roi2 です.これらの内部は,すべて有効なピクセルであることが分かります.

元関数名(C#): calib3d_stereoRectify_InputArray
元DLLエクスポート名: calib3d_stereoRectify_InputArray
参照元CSファイル: Internal\PInvoke\NativeMethods\calib3d\NativeMethods_calib3d.cs
▼ C言語側関数定義
CVAPI(ExceptionStatus) calib3d_stereoRectify_InputArray(
    cv::_InputArray *cameraMatrix1, cv::_InputArray *distCoeffs1,
    cv::_InputArray *cameraMatrix2, cv::_InputArray *distCoeffs2,
    MyCvSize imageSize, cv::_InputArray *R, cv::_InputArray *T,
    cv::_OutputArray *R1, cv::_OutputArray *R2,
    cv::_OutputArray *P1, cv::_OutputArray *P2,
    cv::_OutputArray *Q, int flags,
    double alpha, CvSize newImageSize,
    MyCvRect *validPixROI1, MyCvRect *validPixROI2)
{
    BEGIN_WRAP
    cv::Rect _validPixROI1, _validPixROI2;
    cv::stereoRectify(*cameraMatrix1, *distCoeffs1, *cameraMatrix2, *distCoeffs2,
        cpp(imageSize), *R, *T, *R1, *R2, *P1, *P2, *Q, flags, alpha, newImageSize,
        &_validPixROI1, &_validPixROI2);
    *validPixROI1 = c(_validPixROI1);
    *validPixROI2 = c(_validPixROI2);
    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