[32/64bit] 2つの平面間の透視変換を求めます。
calib3d_findHomography_vector p1,p2,p3,p4,p5,p6,p7,p8
p1 = var : Point2d[] srcPoints p2 = int : int srcPointsLength p3 = var : Point2d[] dstPoints p4 = int : int dstPointsLength p5 = int : int method p6 = double : double ransacReprojThreshold p7 = sptr : IntPtr mask p8 = var : out IntPtr returnValue
(プラグイン / モジュール : OpenCvSharpExtern.dll)
この関数は,ソース平面とデスティネーション平面の間の透視変換\(H\)を求めて返します.\逆投影誤差\[sum _i ?left ( x'_i- ?frac{h_{11} x_i + h_{12} y_i + h_{13}}{h_{31} x_i + h_{32} y_i + h_{33}} ?right )^2+ ??-??-??-??-?!\h_{21} x_i + h_{22} y_i + h_{23}}{h_{31} x_i + h_{32} y_i + h_{33}} eldest ) ^2+ eldest ( y'_i- ????? )\)^2\]を最小化します。パラメータメソッドがデフォルト値の 0 に設定されている場合,この関数は,すべての点のペアを使って,単純な最小二乗法でホモグラフィの初期推定値を計算します.しかし,すべての点のペア( ??o???,??o???)が剛体透視変換に適合しない場合(つまり,外れ値がある場合),この初期推定値は悪くなります.このような場合には,3つのロバストな手法のうちの1つを用いることができます.RANSAC,LMeDS,RHOの各手法は,対応する点のペアの多くの異なるランダムなサブセット(各4ペアで,共線的なペアは破棄されます)を試し,このサブセットと単純な最小二乗アルゴリズムを使ってホモグラフィ行列を推定し,計算されたホモグラフィの品質/良さ(RANSACの場合はインライアの数,LMeDSの場合は再投影誤差の最小中央値)を計算します.ロバストかどうかに関わらず,計算されたホモグラフィ行列は,Levenberg-Marquardt法を用いて(ロバスト法の場合はインライアのみを用いて)さらに精密化され,再投影誤差がさらに減少します。RANSAC法とRHO法は,アウトライアの比率を実質的に問わずに扱うことができますが,インライアとアウトライアを区別するための閾値が必要です。RANSACとRHOはアウトライアの比率に関係なく扱えますが、インライアとアウトライアを区別するための閾値が必要です。最後に,外れ値がなく,ノイズがかなり小さい場合は,デフォルトの手法(method=0)を利用します.この関数は,初期の内在行列と外在行列を求めるために利用されます.ホモグラフィー行列は,ある尺度まで決定されます.そのため,\(h_{33}=1\)となるように正規化されています.また,getAffineTransform, estimateAffine2D, estimateAffinePartial2D, getPerspectiveTransform, warpPerspective, perspectiveTransformExamples: samples/cpp/tutorial_code/features2D/Homography/decompose_homography.cpp, samples/cpp/tutorial_code/features2D/Homography/homography_from_camera_displacement.cpp, and samples/cpp/tutorial_code/features2D/Homography/pose_from_homography.cpp. 元関数名(C#): calib3d_findHomography_vector 元DLLエクスポート名: calib3d_findHomography_vector 参照元CSファイル: Internal\PInvoke\NativeMethods\calib3d\NativeMethods_calib3d.cs ▼ C言語側関数定義
CVAPI(ExceptionStatus) calib3d_findHomography_vector( cv::Point2d *srcPoints, int srcPointsLength, cv::Point2d *dstPoints, int dstPointsLength, int method, double ransacReprojThreshold, cv::_OutputArray *mask, cv::Mat **returnValue) { BEGIN_WRAP const cv::Mat srcPointsMat(srcPointsLength, 1, CV_64FC2, srcPoints); const cv::Mat dstPointsMat(dstPointsLength, 1, CV_64FC2, dstPoints); const auto ret = cv::findHomography(srcPointsMat, dstPointsMat, method, ransacReprojThreshold, entity(mask)); *returnValue = new cv::Mat(ret); 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 |