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