OpenCV 4.5.3(日本語機械翻訳)
|
モジュール |
|
Fisheye camera model | |
C API | |
クラス |
|
struct | cv::UsacParams |
class | cv::LMSolver |
struct | cv::CirclesGridFinderParameters |
class | cv::StereoMatcher |
ステレオ対応点探索アルゴリズムの基底クラスです.[【詳解】(英語]
|
|
class | cv::StereoBM |
K. KonoligeによってOpenCVに導入・貢献された,ブロックマッチングアルゴリズムを用いたステレオ対応点計算のクラス.[【詳解】(英語]
|
|
class | cv::StereoSGBM |
このクラスは,修正されたH. Hirschmullerアルゴリズムを実装しています[HH08]を実装しています.を実装しており,オリジナルのアルゴリズムとは以下のように異なります.[【詳解】(英語]
|
|
型定義 |
|
typedef CirclesGridFinderParameters | cv::CirclesGridFinderParameters2 |
列挙型 |
|
enum | {
cv::LMEDS = 4 , cv::RANSAC = 8 , cv::RHO = 16 , cv::USAC_DEFAULT = 32 , cv::USAC_PARALLEL = 33 , cv::USAC_FM_8PTS = 34 , cv::USAC_FAST = 35 , cv::USAC_ACCURATE = 36 , cv::USAC_PROSAC = 37 , cv::USAC_MAGSAC = 38 } |
ロバスト推定アルゴリズムの種類[【詳解】(英語]
|
|
enum |
cv::SolvePnPMethod
{
SOLVEPNP_ITERATIVE = 0 , cv::SOLVEPNP_EPNP = 1 , cv::SOLVEPNP_P3P = 2 , cv::SOLVEPNP_DLS = 3 , cv::SOLVEPNP_UPNP = 4 , cv::SOLVEPNP_AP3P = 5 , cv::SOLVEPNP_IPPE = 6 , cv::SOLVEPNP_IPPE_SQUARE = 7 , cv::SOLVEPNP_SQPNP = 8 , cv::SOLVEPNP_MAX_COUNT } |
enum | {
CALIB_CB_ADAPTIVE_THRESH = 1 , CALIB_CB_NORMALIZE_IMAGE = 2 , CALIB_CB_FILTER_QUADS = 4 , CALIB_CB_FAST_CHECK = 8 , CALIB_CB_EXHAUSTIVE = 16 , CALIB_CB_ACCURACY = 32 , CALIB_CB_LARGER = 64 , CALIB_CB_MARKER = 128 } |
enum | { CALIB_CB_SYMMETRIC_GRID = 1 , CALIB_CB_ASYMMETRIC_GRID = 2 , CALIB_CB_CLUSTERING = 4 } |
enum | {
CALIB_NINTRINSIC = 18 , CALIB_USE_INTRINSIC_GUESS = 0x00001 , CALIB_FIX_ASPECT_RATIO = 0x00002 , CALIB_FIX_PRINCIPAL_POINT = 0x00004 , CALIB_ZERO_TANGENT_DIST = 0x00008 , CALIB_FIX_FOCAL_LENGTH = 0x00010 , CALIB_FIX_K1 = 0x00020 , CALIB_FIX_K2 = 0x00040 , CALIB_FIX_K3 = 0x00080 , CALIB_FIX_K4 = 0x00800 , CALIB_FIX_K5 = 0x01000 , CALIB_FIX_K6 = 0x02000 , CALIB_RATIONAL_MODEL = 0x04000 , CALIB_THIN_PRISM_MODEL = 0x08000 , CALIB_FIX_S1_S2_S3_S4 = 0x10000 , CALIB_TILTED_MODEL = 0x40000 , CALIB_FIX_TAUX_TAUY = 0x80000 , cv::CALIB_USE_QR = 0x100000 , CALIB_FIX_TANGENT_DIST = 0x200000 , CALIB_FIX_INTRINSIC = 0x00100 , CALIB_SAME_FOCAL_LENGTH = 0x00200 , CALIB_ZERO_DISPARITY = 0x00400 , cv::CALIB_USE_LU = (1 << 17) , cv::CALIB_USE_EXTRINSIC_GUESS = (1 << 22) } |
enum | { cv::FM_7POINT = 1 , cv::FM_8POINT = 2 , cv::FM_LMEDS = 4 , cv::FM_RANSAC = 8 } |
基本行列を見つけるためのアルゴリズム[【詳解】(英語]
|
|
enum |
cv::HandEyeCalibrationMethod
{
cv::CALIB_HAND_EYE_TSAI = 0 , cv::CALIB_HAND_EYE_PARK = 1 , cv::CALIB_HAND_EYE_HORAUD = 2 , cv::CALIB_HAND_EYE_ANDREFF = 3 , cv::CALIB_HAND_EYE_DANIILIDIS = 4 } |
enum | cv::RobotWorldHandEyeCalibrationMethod { cv::CALIB_ROBOT_WORLD_HAND_EYE_SHAH = 0 , cv::CALIB_ROBOT_WORLD_HAND_EYE_LI = 1 } |
enum | SamplingMethod { SAMPLING_UNIFORM , SAMPLING_PROGRESSIVE_NAPSAC , SAMPLING_NAPSAC , SAMPLING_PROSAC } |
enum |
LocalOptimMethod
{
LOCAL_OPTIM_NULL , LOCAL_OPTIM_INNER_LO , LOCAL_OPTIM_INNER_AND_ITER_LO , LOCAL_OPTIM_GC , LOCAL_OPTIM_SIGMA } |
enum | ScoreMethod { SCORE_METHOD_RANSAC , SCORE_METHOD_MSAC , SCORE_METHOD_MAGSAC , SCORE_METHOD_LMEDS } |
enum | NeighborSearchMethod { NEIGH_FLANN_KNN , NEIGH_GRID , NEIGH_FLANN_RADIUS } |
enum | cv::UndistortTypes { PROJ_SPHERICAL_ORTHO = 0 , PROJ_SPHERICAL_EQRECT = 1 } |
cv::undistortモード |
|
関数 |
|
CV_EXPORTS_W void | cv::Rodrigues (InputArray src, OutputArray dst, OutputArray jacobian=noArray()) |
回転行列を回転ベクトルに変換したり,逆に回転行列を回転ベクトルに変換したりします.[【詳解】(英語]
|
|
CV_EXPORTS_W Mat | cv::findHomography (InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray(), const int maxIters=2000, const double confidence=0.995) |
2つの平面間の透視変換を求めます.[【詳解】(英語]
|
|
CV_EXPORTS Mat | cv::findHomography (InputArray srcPoints, InputArray dstPoints, OutputArray mask, int method=0, double ransacReprojThreshold=3) |
CV_EXPORTS_W Mat | cv::findHomography (InputArray srcPoints, InputArray dstPoints, OutputArray mask, const UsacParams ¶ms) |
CV_EXPORTS_W Vec3d | cv::RQDecomp3x3 (InputArray src, OutputArray mtxR, OutputArray mtxQ, OutputArray Qx=noArray(), OutputArray Qy=noArray(), OutputArray Qz=noArray()) |
3x3 行列の RQ 分解を計算します。[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::decomposeProjectionMatrix (InputArray projMatrix, OutputArray cameraMatrix, OutputArray rotMatrix, OutputArray transVect, OutputArray rotMatrixX=noArray(), OutputArray rotMatrixY=noArray(), OutputArray rotMatrixZ=noArray(), OutputArray eulerAngles=noArray()) |
射影行列を,回転行列とカメラ固有の行列に分解します.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::matMulDeriv (InputArray A, InputArray B, OutputArray dABdA, OutputArray dABdB) |
乗算された各行列について,行列積の偏導関数を求めます.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::composeRT (InputArray rvec1, InputArray tvec1, InputArray rvec2, InputArray tvec2, OutputArray rvec3, OutputArray tvec3, OutputArray dr3dr1=noArray(), OutputArray dr3dt1=noArray(), OutputArray dr3dr2=noArray(), OutputArray dr3dt2=noArray(), OutputArray dt3dr1=noArray(), OutputArray dt3dt1=noArray(), OutputArray dt3dr2=noArray(), OutputArray dt3dt2=noArray()) |
2つの回転とシフトの変換を組み合わせます。[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::projectPoints (InputArray objectPoints, InputArray rvec, InputArray tvec, InputArray cameraMatrix, InputArray distCoeffs, OutputArray imagePoints, OutputArray jacobian=noArray(), double aspectRatio=0) |
3次元点を画像平面に投影します.[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::solvePnP (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int flags=SOLVEPNP_ITERATIVE) |
3次元と2次元の点の対応関係から,物体の姿勢を求めます.この関数は,物体座標フレームで表現された3次元点をカメラ座標フレームに変換する回転ベクトルと並進ベクトルを,異なる手法で返します.[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::solvePnPRansac (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int iterationsCount=100, float reprojectionError=8.0, double confidence=0.99, OutputArray inliers=noArray(), int flags=SOLVEPNP_ITERATIVE) |
RANSAC スキームを用いて,3D-2D 点の対応関係から物体のポーズを求めます.[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::solvePnPRansac (InputArray objectPoints, InputArray imagePoints, InputOutputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, OutputArray inliers, const UsacParams ¶ms=UsacParams()) |
CV_EXPORTS_W int | cv::solveP3P (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags) |
3 つの 3D-2D 点の対応関係から,物体の姿勢を求めます.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::solvePnPRefineLM (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, InputOutputArray rvec, InputOutputArray tvec, TermCriteria criteria=TermCriteria(TermCriteria::EPS+TermCriteria::COUNT, 20, FLT_EPSILON)) |
3D-2D点の対応関係から、初期解からポーズ(オブジェクト座標フレームで表現された3D点をカメラ座標フレームに変換する移動と回転)を絞り込む。[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::solvePnPRefineVVS (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, InputOutputArray rvec, InputOutputArray tvec, TermCriteria criteria=TermCriteria(TermCriteria::EPS+TermCriteria::COUNT, 20, FLT_EPSILON), double VVSlambda=1) |
3D-2D点の対応関係から、初期解からポーズ(オブジェクト座標フレームで表現された3D点をカメラ座標フレームに変換する移動と回転)を絞り込む。[【詳解】(英語]
|
|
CV_EXPORTS_W int | cv::solvePnPGeneric (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, bool useExtrinsicGuess=false, SolvePnPMethod flags=SOLVEPNP_ITERATIVE, InputArray rvec=noArray(), InputArray tvec=noArray(), OutputArray reprojectionError=noArray()) |
3D-2D点の対応関係から物体のポーズを見つけます.この関数は,入力点の数と選択された手法に応じて,可能性のあるすべての解のリストを返します(解とは,<回転ベクトル,並進ベクトル>のカップルです).[【詳解】(英語]
|
|
CV_EXPORTS_W Mat | cv::initCameraMatrix2D (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size imageSize, double aspectRatio=1.0) |
3D-2D の点の対応関係から初期のカメラ固有マトリックスを求めます.[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::findChessboardCorners (InputArray image, Size patternSize, OutputArray corners, int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE) |
チェスボードの内側の角の位置を求めます。[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::checkChessboard (InputArray img, Size size) |
bool | cv::findChessboardCornersSB (InputArray image, Size patternSize, OutputArray corners, int flags, OutputArray meta) |
セクターベースのアプローチを用いて、チェスボードの内側の角の位置を見つけます。[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::findChessboardCornersSB (InputArray image, Size patternSize, OutputArray corners, int flags=0) |
CV_EXPORTS_W Scalar | cv::estimateChessboardSharpness (InputArray image, Size patternSize, InputArray corners, float rise_distance=0.8F, bool vertical=false, OutputArray sharpness=noArray()) |
検出されたチェスボードのシャープネスを推定します。[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::find4QuadCornerSubpix (InputArray img, InputOutputArray corners, Size region_size) |
チェスボードのコーナーのサブピクセル精度の位置を求めます. |
|
CV_EXPORTS_W void | cv::drawChessboardCorners (InputOutputArray image, Size patternSize, InputArray corners, bool patternWasFound) |
検出されたチェスボードのコーナーをレンダリングします.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::drawFrameAxes (InputOutputArray image, InputArray cameraMatrix, InputArray distCoeffs, InputArray rvec, InputArray tvec, float length, int thickness=3) |
ポーズ推定によるワールド/オブジェクト座標系の軸を描画します.[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::findCirclesGrid (InputArray image, Size patternSize, OutputArray centers, int flags, const Ptr< FeatureDetector > &blobDetector, const CirclesGridFinderParameters ¶meters) |
グリッド上の円の中心を検出します。[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::findCirclesGrid (InputArray image, Size patternSize, OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID, const Ptr< FeatureDetector > &blobDetector=SimpleBlobDetector::create()) |
cv::CV_EXPORTS_AS (calibrateCameraExtended) double calibrateCamera(InputArrayOfArrays objectPoints | |
キャリブレーションパターンの複数のビューから,カメラの内部および外部のパラメータを求めます.[【詳解】(英語]
|
|
CV_EXPORTS_W double | cv::calibrateCamera (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON)) |
cv::CV_EXPORTS_AS (calibrateCameraROExtended) double calibrateCameraRO(InputArrayOfArrays objectPoints | |
キャリブレーションパターンの複数のビューから,カメラの内部および外部のパラメータを求めます.[【詳解】(英語]
|
|
CV_EXPORTS_W double | cv::calibrateCameraRO (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size imageSize, int iFixedPoint, InputOutputArray cameraMatrix, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, OutputArray newObjPoints, int flags=0, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON)) |
CV_EXPORTS_W void | cv::calibrationMatrixValues (InputArray cameraMatrix, Size imageSize, double apertureWidth, double apertureHeight, CV_OUT double &fovx, CV_OUT double &fovy, CV_OUT double &focalLength, CV_OUT Point2d &principalPoint, CV_OUT double &aspectRatio) |
カメラ固有の行列から有用なカメラ特性を計算します。[【詳解】(英語]
|
|
cv::CV_EXPORTS_AS (stereoCalibrateExtended) double stereoCalibrate(InputArrayOfArrays objectPoints | |
ステレオカメラセットを校正します。この関数は、2 台のカメラそれぞれの固有パラメータと、2 台のカメラ間の外部パラメータを求めます。[【詳解】(英語]
|
|
CV_EXPORTS_W double | cv::stereoCalibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray cameraMatrix1, InputOutputArray distCoeffs1, InputOutputArray cameraMatrix2, InputOutputArray distCoeffs2, Size imageSize, OutputArray R, OutputArray T, OutputArray E, OutputArray F, int flags=CALIB_FIX_INTRINSIC, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6)) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。 |
|
CV_EXPORTS_W void | cv::stereoRectify (InputArray cameraMatrix1, InputArray distCoeffs1, InputArray cameraMatrix2, InputArray distCoeffs2, Size imageSize, InputArray R, InputArray T, OutputArray R1, OutputArray R2, OutputArray P1, OutputArray P2, OutputArray Q, int flags=CALIB_ZERO_DISPARITY, double alpha=-1, Size newImageSize=Size(), CV_OUT Rect *validPixROI1=0, CV_OUT Rect *validPixROI2=0) |
キャリブレーションされたステレオカメラの各ヘッドに対して,平行化変換を計算します.[【詳解】(英語]
|
|
CV_EXPORTS_W bool | cv::stereoRectifyUncalibrated (InputArray points1, InputArray points2, InputArray F, Size imgSize, OutputArray H1, OutputArray H2, double threshold=5) |
キャリブレーションされていないステレオカメラに対して,平行化変換を計算します.[【詳解】(英語]
|
|
CV_EXPORTS_W float | cv::rectify3Collinear (InputArray cameraMatrix1, InputArray distCoeffs1, InputArray cameraMatrix2, InputArray distCoeffs2, InputArray cameraMatrix3, InputArray distCoeffs3, InputArrayOfArrays imgpt1, InputArrayOfArrays imgpt3, Size imageSize, InputArray R12, InputArray T12, InputArray R13, InputArray T13, OutputArray R1, OutputArray R2, OutputArray R3, OutputArray P1, OutputArray P2, OutputArray P3, OutputArray Q, double alpha, Size newImgSize, CV_OUT Rect *roi1, CV_OUT Rect *roi2, int flags) |
すべてのヘッドが同一線上にある3ヘッドカメラに対する平行化変換を計算します. |
|
CV_EXPORTS_W Mat | cv::getOptimalNewCameraMatrix (InputArray cameraMatrix, InputArray distCoeffs, Size imageSize, double alpha, Size newImgSize=Size(), CV_OUT Rect *validPixROI=0, bool centerPrincipalPoint=false) |
フリースケーリングパラメータに基づく,新しいカメラ固有の行列を返します.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::calibrateHandEye (InputArrayOfArrays R_gripper2base, InputArrayOfArrays t_gripper2base, InputArrayOfArrays R_target2cam, InputArrayOfArrays t_target2cam, OutputArray R_cam2gripper, OutputArray t_cam2gripper, HandEyeCalibrationMethod method=CALIB_HAND_EYE_TSAI) |
手と目のキャリブレーションを計算します。![]() |
|
CV_EXPORTS_W void | cv::calibrateRobotWorldHandEye (InputArrayOfArrays R_world2cam, InputArrayOfArrays t_world2cam, InputArrayOfArrays R_base2gripper, InputArrayOfArrays t_base2gripper, OutputArray R_base2world, OutputArray t_base2world, OutputArray R_gripper2cam, OutputArray t_gripper2cam, RobotWorldHandEyeCalibrationMethod method=CALIB_ROBOT_WORLD_HAND_EYE_SHAH) |
Robot-World/Hand-Eyeキャリブレーションを計算します。![]() ![]() |
|
CV_EXPORTS_W void | cv::convertPointsToHomogeneous (InputArray src, OutputArray dst) |
点をユークリッド空間から同次座標に変換します。[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::convertPointsFromHomogeneous (InputArray src, OutputArray dst) |
点を同次空間からユークリッド空間に変換します。[【詳解】(英語]
|
|
CV_EXPORTS void | cv::convertPointsHomogeneous (InputArray src, OutputArray dst) |
点を同次座標に,あるいは同次座標から変換します.[【詳解】(英語]
|
|
CV_EXPORTS_W Mat | cv::findFundamentalMat (InputArray points1, InputArray points2, int method, double ransacReprojThreshold, double confidence, int maxIters, OutputArray mask=noArray()) |
2つの画像の対応する点から,基本行列を求めます.[【詳解】(英語]
|
|
CV_EXPORTS_W Mat | cv::findFundamentalMat (InputArray points1, InputArray points2, int method=FM_RANSAC, double ransacReprojThreshold=3., double confidence=0.99, OutputArray mask=noArray()) |
CV_EXPORTS Mat | cv::findFundamentalMat (InputArray points1, InputArray points2, OutputArray mask, int method=FM_RANSAC, double ransacReprojThreshold=3., double confidence=0.99) |
CV_EXPORTS_W Mat | cv::findFundamentalMat (InputArray points1, InputArray points2, OutputArray mask, const UsacParams ¶ms) |
CV_EXPORTS_W Mat | cv::findEssentialMat (InputArray points1, InputArray points2, InputArray cameraMatrix, int method=RANSAC, double prob=0.999, double threshold=1.0, int maxIters=1000, OutputArray mask=noArray()) |
2つの画像中の対応する点から,本質的な行列を求めます.[【詳解】(英語]
|
|
CV_EXPORTS Mat | cv::findEssentialMat (InputArray points1, InputArray points2, InputArray cameraMatrix, int method, double prob, double threshold, OutputArray mask) |
CV_EXPORTS_W Mat | cv::findEssentialMat (InputArray points1, InputArray points2, double focal=1.0, Point2d pp=Point2d(0, 0), int method=RANSAC, double prob=0.999, double threshold=1.0, int maxIters=1000, OutputArray mask=noArray()) |
CV_EXPORTS Mat | cv::findEssentialMat (InputArray points1, InputArray points2, double focal, Point2d pp, int method, double prob, double threshold, OutputArray mask) |
CV_EXPORTS_W Mat | cv::findEssentialMat (InputArray points1, InputArray points2, InputArray cameraMatrix1, InputArray distCoeffs1, InputArray cameraMatrix2, InputArray distCoeffs2, int method=RANSAC, double prob=0.999, double threshold=1.0, OutputArray mask=noArray()) |
2台の異なるカメラで撮影された2つの画像の対応点から,本質的な行列を求めます.[【詳解】(英語]
|
|
CV_EXPORTS_W Mat | cv::findEssentialMat (InputArray points1, InputArray points2, InputArray cameraMatrix1, InputArray cameraMatrix2, InputArray dist_coeff1, InputArray dist_coeff2, OutputArray mask, const UsacParams ¶ms) |
CV_EXPORTS_W void | cv::decomposeEssentialMat (InputArray E, OutputArray R1, OutputArray R2, OutputArray t) |
必須行列を,可能な回転と平行移動に分解します.[【詳解】(英語]
|
|
CV_EXPORTS_W int | cv::recoverPose (InputArray E, InputArray points1, InputArray points2, InputArray cameraMatrix, OutputArray R, OutputArray t, InputOutputArray mask=noArray()) |
推定された本質的な行列と2つの画像中の対応する点から,カメラの相対的な回転と並進をcheirality checkを用いて復元します.チェックに合格したインライアの数を返します。[【詳解】(英語]
|
|
CV_EXPORTS_W int | cv::recoverPose (InputArray E, InputArray points1, InputArray points2, OutputArray R, OutputArray t, double focal=1.0, Point2d pp=Point2d(0, 0), InputOutputArray mask=noArray()) |
CV_EXPORTS_W int | cv::recoverPose (InputArray E, InputArray points1, InputArray points2, InputArray cameraMatrix, OutputArray R, OutputArray t, double distanceThresh, InputOutputArray mask=noArray(), OutputArray triangulatedPoints=noArray()) |
CV_EXPORTS_W void | cv::computeCorrespondEpilines (InputArray points, int whichImage, InputArray F, OutputArray lines) |
ステレオペアの画像中の点に対して,もう片方の画像中の対応するエピラインを計算します.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::triangulatePoints (InputArray projMatr1, InputArray projMatr2, InputArray projPoints1, InputArray projPoints2, OutputArray points4D) |
この関数は,ステレオカメラによる観測結果を用いて,3 次元の点(同次座標)を再構成します.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::correctMatches (InputArray F, InputArray points1, InputArray points2, OutputArray newPoints1, OutputArray newPoints2) |
対応する点の座標をリファインします。[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::filterSpeckles (InputOutputArray img, double newVal, int maxSpeckleSize, double maxDiff, InputOutputArray buf=noArray()) |
視差マップに含まれる小さなノイズの塊(スペックル)をフィルターで除去する[【詳解】(英語]
|
|
CV_EXPORTS_W Rect | cv::getValidDisparityROI (Rect roi1, Rect roi2, int minDisparity, int numberOfDisparities, int blockSize) |
整形された画像の有効なROIから,有効な視差ROIを計算します(以下のコマンドで返されます).stereoRectify) |
|
CV_EXPORTS_W void | cv::validateDisparity (InputOutputArray disparity, InputArray cost, int minDisparity, int numberOfDisparities, int disp12MaxDisp=1) |
は,左右のチェックを用いて視差を検証します.行列の「コスト」は,ステレオ対応点探索アルゴリズムによって計算されるべきです. |
|
CV_EXPORTS_W void | cv::reprojectImageTo3D (InputArray disparity, OutputArray _3dImage, InputArray Q, bool handleMissingValues=false, int ddepth=-1) |
視差画像を3次元空間に再投影します.[【詳解】(英語]
|
|
CV_EXPORTS_W double | cv::sampsonDistance (InputArray pt1, InputArray pt2, InputArray F) |
2点間のSampson距離を計算します.[【詳解】(英語]
|
|
CV_EXPORTS_W int | cv::estimateAffine3D (InputArray src, InputArray dst, OutputArray out, OutputArray inliers, double ransacThreshold=3, double confidence=0.99) |
2つの3Dポイントセット間の最適なアフィン変換を計算します。[【詳解】(英語]
|
|
CV_EXPORTS_W cv::Mat | cv::estimateAffine3D (InputArray src, InputArray dst, CV_OUT double *scale=nullptr, bool force_rotation=true) |
2つの3Dポイントセット間の最適なアフィン変換を計算します。[【詳解】(英語]
|
|
CV_EXPORTS_W int | cv::estimateTranslation3D (InputArray src, InputArray dst, OutputArray out, OutputArray inliers, double ransacThreshold=3, double confidence=0.99) |
2つの3Dポイントセット間の最適な平行移動を計算する。[【詳解】(英語]
|
|
CV_EXPORTS_W cv::Mat | cv::estimateAffine2D (InputArray from, InputArray to, OutputArray inliers=noArray(), int method=RANSAC, double ransacReprojThreshold=3, size_t maxIters=2000, double confidence=0.99, size_t refineIters=10) |
2つの2Dポイントセット間の最適なアフィン変換を計算します。[【詳解】(英語]
|
|
CV_EXPORTS_W cv::Mat | cv::estimateAffine2D (InputArray pts1, InputArray pts2, OutputArray inliers, const UsacParams ¶ms) |
CV_EXPORTS_W cv::Mat | cv::estimateAffinePartial2D (InputArray from, InputArray to, OutputArray inliers=noArray(), int method=RANSAC, double ransacReprojThreshold=3, size_t maxIters=2000, double confidence=0.99, size_t refineIters=10) |
2つの2次元点集合の間で,4つの自由度を持つ最適な限定アフィン変換を計算します.[【詳解】(英語]
|
|
CV_EXPORTS_W int | cv::decomposeHomographyMat (InputArray H, InputArray K, OutputArrayOfArrays rotations, OutputArrayOfArrays translations, OutputArrayOfArrays normals) |
ホモグラフィ行列を回転(複数),平行移動(複数),平面法線(複数)に分解します.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::filterHomographyDecompByVisibleRefpoints (InputArrayOfArrays rotations, InputArrayOfArrays normals, InputArray beforePoints, InputArray afterPoints, OutputArray possibleSolutions, InputArray pointsMask=noArray()) |
追加情報に基づいて,ホモグラフィー分解をフィルタリングします.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::undistort (InputArray src, OutputArray dst, InputArray cameraMatrix, InputArray distCoeffs, InputArray newCameraMatrix=noArray()) |
レンズの歪みを補正するために,画像を変換します.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::initUndistortRectifyMap (InputArray cameraMatrix, InputArray distCoeffs, InputArray R, InputArray newCameraMatrix, Size size, int m1type, OutputArray map1, OutputArray map2) |
歪み補正・平行化変換マップを求めます.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::initInverseRectificationMap (InputArray cameraMatrix, InputArray distCoeffs, InputArray R, InputArray newCameraMatrix, const Size &size, int m1type, OutputArray map1, OutputArray map2) |
投影および逆補正の変換マップを計算します.要するに,これはinitUndistortRectifyMapの逆数であり,プロジェクタとカメラのペアにおけるプロジェクタ(「逆カメラ」)のステレオ補正に対応しています.[【詳解】(英語]
|
|
CV_EXPORTS float | cv::initWideAngleProjMap (InputArray cameraMatrix, InputArray distCoeffs, Size imageSize, int destImageWidth, int m1type, OutputArray map1, OutputArray map2, enum UndistortTypes projType=PROJ_SPHERICAL_EQRECT, double alpha=0) |
のマップを初期化します.remap広角用 |
|
static float | cv::initWideAngleProjMap (InputArray cameraMatrix, InputArray distCoeffs, Size imageSize, int destImageWidth, int m1type, OutputArray map1, OutputArray map2, int projType, double alpha=0) |
CV_EXPORTS_W Mat | cv::getDefaultNewCameraMatrix (InputArray cameraMatrix, Size imgsize=Size(), bool centerPrincipalPoint=false) |
デフォルトの新しいカメラ行列を返します.[【詳解】(英語]
|
|
CV_EXPORTS_W void | cv::undistortPoints (InputArray src, OutputArray dst, InputArray cameraMatrix, InputArray distCoeffs, InputArray R=noArray(), InputArray P=noArray()) |
観測された点の座標から,理想的な点の座標を計算します.[【詳解】(英語]
|
|
void | cv::undistortPoints (InputArray src, OutputArray dst, InputArray cameraMatrix, InputArray distCoeffs, InputArray R, InputArray P, TermCriteria criteria) |
The functions in this section use a so-called pinhole camera model. The view of a scene is obtained by projecting a scene's 3D point
into the image plane using a perspective transformation which forms the corresponding pixel
. Both
and
are represented in homogeneous coordinates, i.e. as 3D and 2D homogeneous vector respectively. You will find a brief introduction to projective geometry, homogeneous vectors and homogeneous transformations at the end of this section's introduction. For more succinct notation, we often drop the 'homogeneous' and say vector instead of homogeneous vector.
The distortion-free projective transformation given by a pinhole camera model is shown below.
where
is a 3D point expressed with respect to the world coordinate system,
is a 2D pixel in the image plane,
is the camera intrinsic matrix,
and
are the rotation and translation that describe the change of coordinates from world to camera coordinate systems (or camera frame) and
is the projective transformation's arbitrary scaling and not part of the camera model.
The camera intrinsic matrix
(notation used as in
[Zhang2000]
and also generally notated as
) projects 3D points given in the camera coordinate system to 2D pixel coordinates, i.e.
The camera intrinsic matrix
is composed of the focal lengths
and
, which are expressed in pixel units, and the principal point
, that is usually close to the image center:
and thus
The matrix of intrinsic parameters does not depend on the scene viewed. So, once estimated, it can be re-used as long as the focal length is fixed (in case of a zoom lens). Thus, if an image from the camera is scaled by a factor, all of these parameters need to be scaled (multiplied/divided, respectively) by the same factor.
The joint rotation-translation matrix
is the matrix product of a projective transformation and a homogeneous transformation. The 3-by-4 projective transformation maps 3D points represented in camera coordinates to 2D points in the image plane and represented in normalized camera coordinates
and
:
The homogeneous transformation is encoded by the extrinsic parameters
and
and represents the change of basis from world coordinate system
to the camera coordinate sytem
. Thus, given the representation of the point
in world coordinates,
, we obtain
's representation in the camera coordinate system,
, by
This homogeneous transformation is composed out of
, a 3-by-3 rotation matrix, and
, a 3-by-1 translation vector:
and therefore
Combining the projective transformation and the homogeneous transformation, we obtain the projective transformation that maps 3D points in world coordinates into 2D points in the image plane and in normalized camera coordinates:
with
and
. Putting the equations for instrincs and extrinsics together, we can write out
as
If
, the transformation above is equivalent to the following,
with
The following figure illustrates the pinhole camera model.
Real lenses usually have some distortion, mostly radial distortion, and slight tangential distortion. So, the above model is extended as:
where
with
and
if
.
The distortion parameters are the radial coefficients
,
,
,
,
, and
,
and
are the tangential distortion coefficients, and
,
,
, and
, are the thin prism distortion coefficients. Higher-order coefficients are not considered in OpenCV.
The next figures show two common types of radial distortion: barrel distortion (
monotonically decreasing) and pincushion distortion (
monotonically increasing). Radial distortion is always monotonic for real lenses, and if the estimator produces a non-monotonic result, this should be considered a calibration failure. More generally, radial distortion must be monotonic and the distortion function must be bijective. A failed estimation result may look deceptively good near the image center but will work poorly in e.g. AR/SFM applications. The optimization method used in OpenCV camera calibration does not include these constraints as the framework does not support the required integer programming and polynomial inequalities. See
issue #15992
for additional information.
In some cases, the image sensor may be tilted in order to focus an oblique plane in front of the camera (Scheimpflug principle). This can be useful for particle image velocimetry (PIV) or triangulation with a laser fan. The tilt causes a perspective distortion of
and
. This distortion can be modeled in the following way, see e.g.
[Louhichi07].
where
and the matrix
is defined by two rotations with angular parameter
and
, respectively,
In the functions below the coefficients are passed or returned as
vector. That is, if the vector contains four elements, it means that
. The distortion coefficients do not depend on the scene viewed. Thus, they also belong to the intrinsic camera parameters. And they remain the same regardless of the captured image resolution. If, for example, a camera has been calibrated on images of 320 x 240 resolution, absolutely the same distortion coefficients can be used for 640 x 480 images from the same camera while
,
,
, and
need to be scaled appropriately.
The functions below use the above model to do the following:
Homogeneous Coordinates
Homogeneous Coordinates are a system of coordinates that are used in projective geometry. Their use allows to represent points at infinity by finite coordinates and simplifies formulas when compared to the cartesian counterparts, e.g. they have the advantage that affine transformations can be expressed as linear homogeneous transformation.
One obtains the homogeneous vector
by appending a 1 along an n-dimensional cartesian vector
e.g. for a 3D cartesian vector the mapping
is:
For the inverse mapping
, one divides all elements of the homogeneous vector by its last element, e.g. for a 3D homogeneous vector one gets its 2D cartesian counterpart by:
if
.
Due to this mapping, all multiples
, for
, of a homogeneous point represent the same point
. An intuitive understanding of this property is that under a projective transformation, all multiples of
are mapped to the same point. This is the physical observation one does for pinhole cameras, as all points along a ray through the camera's pinhole are projected to the same image point, e.g. all points along the red ray in the image of the pinhole camera model above would be mapped to the same image coordinate. This property is also the source for the scale ambiguity s in the equation of the pinhole camera model.
As mentioned, by using homogeneous coordinates we can express any change of basis parameterized by
and
as a linear transformation, e.g. for the change of basis from coordinate system 0 to coordinate system 1 becomes:
anonymous enum |
anonymous enum |
anonymous enum |
enum cv::SolvePnPMethod |
CV_EXPORTS_W double cv::calibrateCamera | ( | InputArrayOfArrays | objectPoints, |
InputArrayOfArrays | imagePoints, | ||
Size | imageSize, | ||
InputOutputArray | cameraMatrix, | ||
InputOutputArray | distCoeffs, | ||
OutputArrayOfArrays | rvecs, | ||
OutputArrayOfArrays | tvecs, | ||
int |
flags
=
0 ,
|
||
TermCriteria |
criteria
=
TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS_W double cv::calibrateCameraRO | ( | InputArrayOfArrays | objectPoints, |
InputArrayOfArrays | imagePoints, | ||
Size | imageSize, | ||
int | iFixedPoint, | ||
InputOutputArray | cameraMatrix, | ||
InputOutputArray | distCoeffs, | ||
OutputArrayOfArrays | rvecs, | ||
OutputArrayOfArrays | tvecs, | ||
OutputArray | newObjPoints, | ||
int |
flags
=
0 ,
|
||
TermCriteria |
criteria
=
TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS_W void cv::calibrateHandEye | ( | InputArrayOfArrays | R_gripper2base, |
InputArrayOfArrays | t_gripper2base, | ||
InputArrayOfArrays | R_target2cam, | ||
InputArrayOfArrays | t_target2cam, | ||
OutputArray | R_cam2gripper, | ||
OutputArray | t_cam2gripper, | ||
HandEyeCalibrationMethod |
method
=
CALIB_HAND_EYE_TSAI
|
||
) |
手と目のキャリブレーションを計算します。
[in]. | R_gripper2base | グリッパーフレームで表現された点をロボットのベースフレーム()に変換する同次行列から抽出された回転部分![]() vector<Mat> )で、回転を含んでいます。(3x3) 回転マトリクスまたは(3x1) グリッパーフレームからロボットベースフレームへのすべての変換のための回転、回転行列または回転ベクトルを含むベクトル( )です。 |
[in]. | t_gripper2base | グリッパーフレームで表現された点をロボットベースフレームに変換する同次行列から抽出された並進部(![]() vector<Mat> )から抽出された翻訳部分で,すべての変換に対する(3x1) グリッパーフレームからロボットベースフレームへのすべての変換のための翻訳ベクトルを含む。 |
[in]. | R_target2cam | ターゲットフレームで表現された点をカメラフレームに変換する同次行列から抽出された回転部分(![]() vector<Mat> )で、回転を含んでいます。(3x3) 回転マトリクスまたは(3x1) 校正対象フレームからカメラフレームへのすべての変換に対する,回転ベクトル. |
[in]. | t_target2cam | ターゲットフレームで表現された点をカメラフレームに変換する同次行列から抽出された回転部分(![]() vector<Mat> )から抽出された翻訳部分で,すべての変換に対する(3x1) 較正用ターゲットフレームからカメラフレームへのすべての変換のための並進ベクトル。 |
[out]. | R_cam2gripper | 推定値(3x3) カメラフレームで表現された点をグリッパーフレームに変換する同次行列から抽出された回転部分(![]() |
[out]. | t_cam2gripper | 推定値(3x1) カメラフレームで表現された点をグリッパーフレームに変換する同次行列から抽出された並進部(![]() |
[in]. | method | 実装されているHand-Eyeキャリブレーション手法の1つ.cv::HandEyeCalibrationMethod |
この関数は,さまざまな手法を用いて手のひらサイズの目のキャリブレーションを行います.1つの手法は,回転と並進を同時に推定するもので(分離可能解),以下の手法が実装されています.
もう一つの方法は、回転と平行移動を同時に推定する方法(同時解法)で、以下のような実装方法があります。
次の図は、ロボット・グリッパー(「ハンド」)に取り付けられたカメラ(「アイ」)の間の変換を推定しなければならないという、ハンドアイのキャリブレーション問題を説明しています。この構成はeye-in-handと呼ばれています。
Eye-to-Handは、ロボットのエンドエフェクタに取り付けられた校正パターンを観察する静的なカメラで構成されています。カメラからロボットのベースフレームへの変換は、後述の関数に適切な変換を入力することで推定できます。
キャリブレーションの手順は以下の通りです。
手と目のキャリブレーション手順では、次のような同次変換が得られます。
この問題は、次の式を解くこととしても知られています。方程式を解くことでもあります。
CV_EXPORTS_W void cv::calibrateRobotWorldHandEye | ( | InputArrayOfArrays | R_world2cam, |
InputArrayOfArrays | t_world2cam, | ||
InputArrayOfArrays | R_base2gripper, | ||
InputArrayOfArrays | t_base2gripper, | ||
OutputArray | R_base2world, | ||
OutputArray | t_base2world, | ||
OutputArray | R_gripper2cam, | ||
OutputArray | t_gripper2cam, | ||
RobotWorldHandEyeCalibrationMethod |
method
=
CALIB_ROBOT_WORLD_HAND_EYE_SHAH
|
||
) |
Robot-World/Hand-Eyeキャリブレーションを計算します。および
[in]. | R_world2cam | ワールドフレームで表現された点をカメラフレームに変換する同次行列から抽出された回転部分(![]() vector<Mat> )で、回転を含んでいます。(3x3) 回転マトリクスまたは(3x1) ワールドフレームからカメラフレームへのすべての変換のための回転ベクター。 |
[in]. | t_world2cam | ワールドフレームで表現された点をカメラフレームに変換する同次行列から抽出された並進部(![]() vector<Mat> )から抽出された翻訳部分で,すべての変換に対する(3x1) ワールドフレームからカメラフレームへのすべての変換に対する並進ベクトル。 |
[in]. | R_base2gripper | ロボットベースフレームで表現された点をグリッパーフレームに変換する同次行列から抽出された回転部(![]() vector<Mat> )で、回転を含んでいます。(3x3) 回転マトリクスまたは(3x1) ロボットベースフレームからグリッパーフレームへのすべての変換に対する回転ベクトル. |
[in]. | t_base2gripper | ロボットベースフレームで表現された点をグリッパーフレームに変換する同次行列から抽出された回転部(![]() vector<Mat> )から抽出された翻訳部分で,すべての変換に対する(3x1) ロボットのベースフレームからグリッパーフレームへのすべての変換のための並進ベクトル。 |
[out]. | R_base2world | 推定値(3x3) ロボットベースフレームで表現された点をワールドフレームに変換する同次行列から抽出された回転部分(![]() |
[out]. | t_base2world | 推定値(3x1) ロボットベースフレームで表現された点をワールドフレームに変換する同次行列から抽出された並進部(![]() |
[out]. | R_gripper2cam | 推定値(3x3) グリッパーフレームで表現された点をカメラフレームに変換する同次行列から抽出された回転部(![]() |
[out]. | t_gripper2cam | 推定値(3x1) グリッパーフレームで表現された点をカメラフレームに変換する同次行列から抽出された並進部(![]() |
[in]. | method | 実装されている Robot-World/Hand-Eye キャリブレーション手法の1つ.cv::RobotWorldHandEyeCalibrationMethod |
この関数は,さまざまな方法で Robot-World/Hand-Eye のキャリブレーションを行います.1つの手法は,回転と並進を同時に推定するものです(分離可能解).
もう一つの方法は、回転と並進を同時に推定する方法(同時解法)で、以下のような方法が実装されています。
次の図は、ロボットとワールドフレームの間の変換、およびロボットのグリッパー("手")とロボットのエンドエフェクタに取り付けられたカメラ("目")の間の変換を推定しなければならない、ロボット-ワールド/ハンドアイキャリブレーション問題を説明しています。
キャリブレーションの手順は以下の通りです。
Robot-World/Hand-Eyeキャリブレーション手順では、以下の同次変換が返されます。
この問題は、次の式を解くこととしても知られています。式、となります。
CV_EXPORTS_W void cv::calibrationMatrixValues | ( | InputArray | cameraMatrix, |
Size | imageSize, | ||
double | apertureWidth, | ||
double | apertureHeight, | ||
CV_OUT double & | fovx, | ||
CV_OUT double & | fovy, | ||
CV_OUT double & | focalLength, | ||
CV_OUT Point2d & | principalPoint, | ||
CV_OUT double & | aspectRatio | ||
) |
カメラ固有の行列から有用なカメラ特性を計算します。
cameraMatrix | 以下の方法で推定される入力カメラ固有の行列。calibrateCameraまたはstereoCalibrate. |
imageSize | 入力画像サイズ(ピクセル)。 |
apertureWidth | センサーの物理的な幅(mm)。 |
apertureHeight | センサーの物理的な高さ(単位:mm |
fovx | 水平方向のセンサー軸に沿った出力視野角(度 |
fovy | 垂直方向のセンサー軸に沿った角度での出力視野。 |
focalLength | レンズの焦点距離(mm)。 |
principalPoint | 主点(単位:mm |
aspectRatio |
![]() |
この関数は,あらかじめ推定されたカメラ行列から,様々な有用なカメラ特性を算出します.
CV_EXPORTS_W void cv::composeRT | ( | InputArray | rvec1, |
InputArray | tvec1, | ||
InputArray | rvec2, | ||
InputArray | tvec2, | ||
OutputArray | rvec3, | ||
OutputArray | tvec3, | ||
OutputArray |
dr3dr1
=
noArray() ,
|
||
OutputArray |
dr3dt1
=
noArray() ,
|
||
OutputArray |
dr3dr2
=
noArray() ,
|
||
OutputArray |
dr3dt2
=
noArray() ,
|
||
OutputArray |
dt3dr1
=
noArray() ,
|
||
OutputArray |
dt3dt1
=
noArray() ,
|
||
OutputArray |
dt3dr2
=
noArray() ,
|
||
OutputArray |
dt3dt2
=
noArray() |
||
) |
2つの回転とシフトの変換を組み合わせます。
rvec1 | 最初の回転ベクトル。 |
tvec1 | 第1の並進ベクトル。 |
rvec2 | 2つ目の回転ベクトル。 |
tvec2 | 第2の並進ベクトル |
rvec3 | 重ね合わせの出力回転ベクトル。 |
tvec3 | 重ね合わせた部分の並進ベクトルを出力 |
dr3dr1 | rvec1に対するrvec3の任意出力微分 |
dr3dt1 | tvec1 に対する rvec3 の出力導関数(オプション). |
dr3dr2 | rvec2 に対する rvec3 の出力導関数(オプション). |
dr3dt2 | tvec2に関するrvec3の出力導関数(オプション |
dt3dr1 | rvec1に関するtvec3の出力導関数(オプション |
dt3dt1 | tvec1に関するtvec3の出力導関数(オプション |
dt3dr2 | rvec2に関するtvec3の出力導関数(オプション |
dt3dt2 | tvec2に対するtvec3の出力微分(オプション |
関数 compute:
ここでは,回転ベクトルから回転行列への変換を,そして
は逆変換を意味します.詳細は,Rodriguesを参照してください.
また,この関数は,入力ベクトルに対する出力ベクトルの導関数を計算することができます(matMulDeriv を参照してください).これらの関数は,以下の内部で使用されますstereoCalibrateの内部で使用されますが,Levenberg-Marquardt や他の勾配ベースのソルバーが,行列の乗算を含む関数を最適化するために使用される独自のコードでも使用することができます.
CV_EXPORTS_W void cv::computeCorrespondEpilines | ( | InputArray | points, |
int | whichImage, | ||
InputArray | F, | ||
OutputArray | lines | ||
) |
ステレオペアの画像中の点に対して,もう片方の画像中の対応するエピラインを計算します.
points | 入力点.![]() ![]() |
whichImage | 点を含む画像(1または2)のインデックス. |
F | を用いて推定できる基本行列.findFundamentalMatまたはstereoRectify. |
lines | もう一方の画像の点に対応するエピポーラ線の出力ベクトル.各線![]() ![]() |
この関数は,ステレオペアの2つの画像のうち,一方の画像内の各点に対して,もう一方の画像内の対応するエピポーラ線の方程式を求めます.
基本的な行列の定義から(参照findFundamentalMatを参照),線は,1枚目の画像の点
は,基本的な行列の定義(参照)から,1枚目の画像の点
また,その逆に,whichImage=2 の場合はから計算されます。
となります。
ライン係数は,あるスケールまで定義されます。それらは以下のように正規化されます。.
CV_EXPORTS_W void cv::convertPointsFromHomogeneous | ( | InputArray | src, |
OutputArray | dst | ||
) |
点を同次空間からユークリッド空間に変換します。
src | N次元点の入力ベクトル。 |
dst | N-1次元の点の出力ベクトル。 |
この関数は、透視投影を用いて、同次元点をユークリッド空間に変換します。すなわち、各点(x1, x2, ... x(n-1), xn)は、(x1/xn, x2/xn, ..., x(n-1)/xn)に変換されます。xn=0の場合、出力される点座標は(0,0,0,...)となります。
CV_EXPORTS void cv::convertPointsHomogeneous | ( | InputArray | src, |
OutputArray | dst | ||
) |
点を同次座標に,あるいは同次座標から変換します.
src | 2次元,3次元,または4次元の点の配列またはベクトルを入力します. |
dst | 2次元,3次元,または4次元の点の出力ベクトル. |
この関数は,2次元または3次元の点を,同次座標との間で変換します.convertPointsToHomogeneousまたはconvertPointsFromHomogeneous.
CV_EXPORTS_W void cv::convertPointsToHomogeneous | ( | InputArray | src, |
OutputArray | dst | ||
) |
点をユークリッド空間から同次座標に変換します。
src | N次元点の入力ベクトル。 |
dst | N+1次元の点のベクトルを出力します。 |
この関数は、点の座標のタプルに1を追加することで、ユークリッド空間から同次空間へと点を変換します。つまり、各点(x1, x2, ..., xn)は(x1, x2, ..., xn, 1)に変換されます。
CV_EXPORTS_W void cv::correctMatches | ( | InputArray | F, |
InputArray | points1, | ||
InputArray | points2, | ||
OutputArray | newPoints1, | ||
OutputArray | newPoints2 | ||
) |
対応する点の座標をリファインします。
F | 3x3 基本行列。 |
points1 | 1 番目の点のセットを含む 1xN の配列。 |
points2 | 2 番目の点のセットを含む 1xN 配列。 |
newPoints1 | 最適化された点1。 |
newPoints2 | 最適化された点2. |
この関数は,最適化三角測量法を実装しています(詳細は,「多視点幾何学」を参照してください).与えられた各点の対応点 points1[i] <-> points2[i],および基本行列 F に対して,幾何学的誤差を最小化する補正された対応点 newPoints1[i] <-> newPoints2[i]を求めます.(ここで
は,点間の幾何学的距離
および
) をエピポーラ制約の下で求めます.
.
cv::CV_EXPORTS_AS | ( | calibrateCameraExtended | ) |
キャリブレーションパターンの複数のビューから,カメラの内部および外部のパラメータを求めます.
objectPoints | 新しいインターフェースでは,キャリブレーションパターン座標空間におけるキャリブレーションパターンポイントのベクトル(std::vector<std::vector<cv::Vec3f>など)のベクトルとなります.外側のベクトルには、パターンビューの数だけの要素が含まれる。各ビューに同じキャリブレーションパターンが表示され、それが完全に見える場合、すべてのベクターは同じになります。しかし、部分的にオックルされたパターンや、異なるビューに異なるパターンを使用することも可能です。そうすると、ベクターは異なります。ポイントは3Dですが、使用するキャリブレーションパターンが平面リグの場合、ポイントはすべてキャリブレーションパターンのXY座標平面上に位置します(つまりZ座標は0)。従来のインターフェースでは、異なるビューからのオブジェクトポイントのすべてのベクトルが連結されていました。 |
imagePoints | 新しいインターフェースでは,キャリブレーションパターンポイントの投影のベクトル(std::vector<std::vector<cv::Vec2f>>など)のベクトルです. imagePoints.size() と objectPoints.size() ,および各 i に対する imagePoints[i].size() と objectPoints[i].size() は,それぞれ等しくなければいけません.古いインターフェースでは,異なるビューからのオブジェクトポイントのすべてのベクトルが連結されます. |
imageSize | 画像のサイズは,カメラ固有の行列を初期化するためにのみ利用されます. |
cameraMatrix | 入出力 3x3 浮動小数点型カメラ固有マトリクス![]() |
distCoeffs | 歪曲係数の入出力ベクトル![]() |
rvecs | 回転ベクトルの出力ベクトル(Rodrigues) を,各パターンビューに対して推定します(例えば,std::vector<cv::Mat>>).つまり,各 i 番目の回転ベクトルは,対応する i 番目の並進ベクトル(次の出力パラメータの説明を参照)と共に,キャリブレーションパターンを(オブジェクトポイントが指定されている)オブジェクト座標空間からカメラ座標空間へと導きます.より専門的に言えば,i番目の回転ベクトルと並進ベクトルのタプルは,物体座標空間からカメラ座標空間への基底の変更を行うものである.このタプルは、その双対性により、カメラ座標空間に対するキャリブレーションパターンの位置に相当します。 |
tvecs | パターンビューごとに推定された並進ベクトルの出力ベクトル(上記パラメータの説明を参照)。 |
stdDeviationsIntrinsics | 固有パラメータについて推定された標準偏差の出力ベクトル.偏差値の順序。![]() |
stdDeviationsExtrinsics | 外部パラメータのために推定された標準偏差の出力ベクトル。偏差値の順序。![]() ![]() |
perViewErrors | 各パターンビューに対して推定されたRMS再投影エラーの出力ベクトル。 |
flags | 0または以下の値の組み合わせとなる異なるフラグ。
|
criteria | 反復最適化アルゴリズムの終了基準. |
この関数は,カメラの内部パラメータと,各ビューの外部パラメータを推定します.このアルゴリズムは,以下に基づいています[Zhang2000] 。および[BouguetMCT] を利用しています.. 各ビューにおける,3次元物体の点の座標と,それに対応する2次元投影を指定する必要があります.そのためには,形状が既知であり,特徴点を容易に検出できる物体を使用する必要があります.このようなオブジェクトは,キャリブレーションリグまたはキャリブレーションパターンと呼ばれ,OpenCV はキャリブレーションリグとしてチェスボードをビルトインでサポートしています(以下を参照してください).findChessboardCorners). 現在のところ,内部パラメータの初期化(CALIB_USE_INTRINSIC_GUESS がセットされていない場合)は,平面的なキャリブレーションパターン(オブジェクトの点のZ座標がすべて0でなければならない)に対してのみ実装されています.初期のcameraMatrixが提供されている限り、3Dキャリブレーションリグも使用できます。
このアルゴリズムは、以下のステップを実行します。
cv::CV_EXPORTS_AS | ( | calibrateCameraROExtended | ) |
キャリブレーションパターンの複数のビューから,カメラの内部および外部のパラメータを求めます.
この関数は、以下を拡張したものです。calibrateCameraで提案されたオブジェクトを解放する方法で[strobl2011iccv]で提案された. この方法は,不正確で測定されていない,ほぼ平面のターゲット(キャリブレーションプレート)を用いる多くの一般的なケースにおいて,推定されるカメラパラメータの精度を劇的に向上させることができます.この関数は,物体放出法と標準法の両方をサポートしています.パラメータはiFixedPointを使用して,手法を選択します.内部実装ではcalibrateCameraは,この関数のラッパーである。
objectPoints | キャリブレーションパターンの座標空間におけるキャリブレーションパターンの点のベクトル。詳細はcalibrateCameraを参照してください。オブジェクトを解放する方法を利用する場合,各ビューで同一のキャリブレーションボードを使用し,それが完全に見える必要があります.また,すべての objectPoints[i] は同一でなければならず,すべてのポイントは平面にほぼ近いものでなければなりません.キャリブレーションターゲットは剛体でなければならず、また、画像をつかむために(キャリブレーションターゲットではなく)カメラを移動させる場合は、少なくとも静止していなければなりません。 |
imagePoints | キャリブレーションパターンの点を投影したベクトルのベクトル。参照calibrateCameraを参照してください。 |
imageSize | 固有のカメラ行列を初期化するためだけに使われる画像のサイズ. |
iFixedPoint | 固定する objectPoints[0] の 3D オブジェクトポイントのインデックスです。また、キャリブレーション方法選択のスイッチとしても機能します。オブジェクト解放法を使用する場合は、[1, objectPoints[0].size()-2]の範囲でパラメータを渡し、それ以外の場合は、この範囲外の値を渡すと標準的なキャリブレーション法が選択されます。通常、オブジェクトリリース法を使用する場合は、キャリブレーションボードのグリッドの右上の点を固定することが推奨されます。によると[strobl2011iccv]で提案されたによると、他の2点も固定されています。本実施例では、objectPoints[0].front および objectPoints[0].back.z を使用する。オブジェクト解放法では、この3つの固定点の座標が十分に正確である場合にのみ、正確な rvecs、tvecs、newObjPoints が可能になります。 |
cameraMatrix | 3x3浮動小数点カメラ行列を出力します.見るcalibrateCameraを参照してください。 |
distCoeffs | 歪み係数のベクトルを出力します。参照calibrateCameraを参照してください。 |
rvecs | 各パターンビューに対して推定された回転ベクトルを出力する。参照calibrateCameraを参照してください。 |
tvecs | パターンビューごとに推定された並進ベクトルの出力ベクトル. |
newObjPoints | キャリブレーションパターンのポイントの更新された出力ベクトル。座標は、3つの固定点に基づいてスケーリングされることがあります。返される座標は、上記の3つの固定点が正確である場合にのみ正確である。必要ない場合は、noArray()を渡すことができる。このパラメータは、標準的なキャリブレーション方法では無視される。 |
stdDeviationsIntrinsics | 固有パラメータの推定標準偏差の出力ベクトル。参照calibrateCameraを参照してください。 |
stdDeviationsExtrinsics | 外部パラメータのために推定された標準偏差の出力ベクトル。参照calibrateCameraを参照してください。 |
stdDeviationsObjPoints | キャリブレーションパターンのポイントの洗練された座標に対して推定された標準偏差の出力ベクトル。objectPoints[0]ベクトルと同じサイズとオーダーです。このパラメータは,標準的なキャリブレーション方法では無視されます. |
perViewErrors | 各パターンビューに対して推定されたRMS再投影エラーの出力ベクトル。 |
flags | ゼロまたはいくつかの定義済みの値の組み合わせである可能性がある異なるフラグ。詳細はcalibrateCameraを参照してください。オブジェクトを解放する方法を使用した場合、キャリブレーション時間が大幅に長くなる可能性があります。CALIB_USE_QRまたはCALIB_USE_LUを使用することで、より迅速なキャリブレーションが可能になりますが、まれに精度や安定性が低下することがあります。 |
criteria | 反復最適化アルゴリズムの終了基準. |
この関数は,カメラの内部パラメータと,各ビューの外部パラメータを推定します.このアルゴリズムは,以下に基づいています[Zhang2000] 。,[BouguetMCT] を利用しています.および[strobl2011iccv]で提案された. 参照calibrateCameraその他の詳しい説明はこちらをご覧ください。
cv::CV_EXPORTS_AS | ( | stereoCalibrateExtended | ) |
ステレオカメラセットを校正します。この関数は、2 台のカメラそれぞれの固有パラメータと、2 台のカメラ間の外部パラメータを求めます。
objectPoints | キャリブレーションパターンポイントのベクトル。と同じ構造です。calibrateCamera. 各パターンビューでは,両方のカメラが同じオブジェクトポイントを見る必要があります.したがって,objectPoints.size(), imagePoints1.size(), imagePoints2.size() は等しくなければならないし,objectPoints[i].size(), imagePoints1[i].size(), imagePoints2[i].size() も各 i について等しくなければならない. |
imagePoints1 | 1台目のカメラで観測されたキャリブレーションパターンの点を投影したベクトルのベクトル.と同じ構造です.calibrateCamera. |
imagePoints2 | 2 台目のカメラで観測されたキャリブレーションパターン点の投影結果のベクトル.と同様の構造です。calibrateCamera. |
cameraMatrix1 | 第1カメラの入出力カメラ固有マトリクス,と同じ.calibrateCamera. さらに,ステレオの場合には,追加のフラグを使用することができるが,以下を参照されたい. |
distCoeffs1 | 入力/出力 歪み係数のベクトル.calibrateCamera. |
cameraMatrix2 | 入力/出力 第2カメラの固有マトリクス.cameraMatrix1 の説明を参照してください。 |
distCoeffs2 | 入力/出力 2 番目のカメラのレンズ歪み係数.distCoeffs1 の説明を参照してください. |
imageSize | カメラ固有の行列を初期化するためにのみ使用される画像のサイズ. |
R | 出力回転行列.並進ベクトル T と共に,この行列は,1 台目のカメラの座標系で与えられた点を 2 台目のカメラの座標系で与えられた点に変換します.より専門的に言えば、RとTのタプルは、第1のカメラの座標系から第2のカメラの座標系への基底の変更を行うものである。このタプルは、その双対性により、第2のカメラ座標系に対する第1のカメラの位置に相当します。 |
T | 並進ベクトルの出力(上の説明を参照 |
E | 出力必須行列。 |
F | 基本行列を出力します。 |
perViewErrors | 各パターンビューに対して推定されたRMS再投影エラーの出力ベクトル。 |
flags | 0または以下の値の組み合わせとなる異なるフラグ。
|
criteria | 反復最適化アルゴリズムの終了基準. |
この関数は,ステレオペアを構成する2つのカメラ間の変換を推定します.第1のカメラと第2のカメラに対する物体の姿勢を計算すると,(,
) と (
,
) を計算すると,それらのポーズは確実に互いに関連している。つまり、2台のカメラの相対的な位置と向き(
,
)がわかっていれば、2台のカメラの相対的な位置と向きがわかっている場合には、(
,
)が与えられれば、(
,
) が与えられれば、( ) を計算することができます。これが,この関数の役割です.この関数は,次のように(
,
)を計算します.
したがって,第1のカメラの座標系における点の座標表現が与えられた場合,第2のカメラの座標系における3D点の座標表現を計算することができる.
オプションとして,本質的な行列 E を計算します.
ここでは,並進ベクトルの成分
:
. また,この関数は,基本行列 F を求めることもできます.
この関数は,ステレオ関連の情報に加えて,2台のカメラそれぞれについて完全なキャリブレーションを行うこともできます.しかし,パラメータ空間の次元が高いことと,入力データに含まれるノイズのために,この関数は正しい解から乖離する可能性があります.各カメラについて個別に固有パラメータを高精度に推定できる場合(例えばcalibrateCameraを使って),そうすることをお勧めします.そして,計算された内部パラメータとともに,CALIB_FIX_INTRINSIC フラグを関数に渡してください.そうでなければ,すべてのパラメータが一度に推定されるのであれば,いくつかのパラメータを制限することに意味があります.例えば,CALIB_SAME_FOCAL_LENGTH フラグと CALIB_ZERO_TANGENT_DIST フラグを渡すことは,通常,合理的な仮定と言えます.
と同様にcalibrateCameraと同様に,この関数は,両方のカメラから得られるすべてのビューのすべての点に対する,合計再投影誤差を最小化します.この関数は,再投影誤差の最終的な値を返します.
CV_EXPORTS_W void cv::decomposeEssentialMat | ( | InputArray | E, |
OutputArray | R1, | ||
OutputArray | R2, | ||
OutputArray | t | ||
) |
必須行列を,可能な回転と平行移動に分解します.
E | 入力となる必須行列. |
R1 | 1つの可能な回転行列. |
R2 | もう1つの可能な回転行列。 |
t | 1つの可能な並進。 |
この関数は、本質的な行列 E を svd 分解を用いて分解します。[HartleyZ00].. 一般に、E の分解には 4 つの可能なポーズがあります。,
,
,
.
E が画像点間のエピポーラ拘束を与える場合の間のエピポーラ制約を与える場合
と
の間のエピポーラ制約を与えている場合,次のタプルのいずれかが
,
,
,
は,第1のカメラの座標系から第2のカメラの座標系への基底の変更である.しかし、Eを分解しても、並進の方向しか得られない。このため,並進tは単位長さで返される.
CV_EXPORTS_W int cv::decomposeHomographyMat | ( | InputArray | H, |
InputArray | K, | ||
OutputArrayOfArrays | rotations, | ||
OutputArrayOfArrays | translations, | ||
OutputArrayOfArrays | normals | ||
) |
ホモグラフィ行列を回転(複数),平行移動(複数),平面法線(複数)に分解します.
H | 2つの画像間の入力ホモグラフィ行列. |
K | 入力されたカメラ固有の行列. |
rotations | 回転行列の配列. |
translations | 並進行列の配列. |
normals | 平面法線マトリクスの配列. |
この関数は,平面状の物体の2つのビュー間の相対的なカメラの動きを抽出し,回転,並進,平面法線の最大4つの数学的解のタプルを返します.ホモグラフィ行列 H の分解については,以下の文献で詳しく説明されています.[Malis]を参照してください。.
平面によって誘導されたホモグラフィHが,ソース画像の点に制約を与える場合
ソース画像の点とデスティネーション画像の点
であり,回転[k]と並進[k]のタプルは,ソースカメラの座標系からデスティネーションカメラの座標系への基底の変更である.しかし,Hを分解することで,シーンの(通常は未知の)深度で正規化された平行移動,つまり,その方向ではあるが正規化された長さしか得られない.
点の対応が得られる場合,正の深度制約,つまり,すべての点がカメラの前になければならないという制約を適用することで,少なくとも2つの解が無効になる可能性があります.
CV_EXPORTS_W void cv::decomposeProjectionMatrix | ( | InputArray | projMatrix, |
OutputArray | cameraMatrix, | ||
OutputArray | rotMatrix, | ||
OutputArray | transVect, | ||
OutputArray |
rotMatrixX
=
noArray() ,
|
||
OutputArray |
rotMatrixY
=
noArray() ,
|
||
OutputArray |
rotMatrixZ
=
noArray() ,
|
||
OutputArray |
eulerAngles
=
noArray() |
||
) |
射影行列を,回転行列とカメラ固有の行列に分解します.
projMatrix | 3x4 入力プロジェクション行列 P. |
cameraMatrix | 出力 3x3 カメラ固有マトリクス![]() |
rotMatrix | 3x3 外部回転行列 R を出力. |
transVect | 4x1 の並進ベクトル T を出力. |
rotMatrixX | オプションで,3x3 の X 軸周りの回転行列を作成します. |
rotMatrixY | 3x3 の y 軸周りの回転行列(オプション |
rotMatrixZ | オプションで,3x3 の z 軸周りの回転行列を作成します. |
eulerAngles | 3つのオイラー回転角(度)を含む3要素のベクトル(オプション). |
この関数は,射影行列をキャリブレーション行列と回転行列に分解し,カメラの位置を求めます.
また,オプションとして,各軸に1つずつ,計3つの回転行列と,OpenGLで利用可能な3つのオイラー角を返します.なお,オブジェクトの向きが同じになるような3つの主軸を中心とした回転のシーケンスは,常に1つ以上存在します.[スラボー】を参照してください。]. 返された木の回転行列とそれに対応する3つのオイラー角は、可能な解決策の1つに過ぎません。
この関数は, RQDecomp3x3 に基づいています.
CV_EXPORTS_W void cv::drawChessboardCorners | ( | InputOutputArray | image, |
Size | patternSize, | ||
InputArray | corners, | ||
bool | patternWasFound | ||
) |
検出されたチェスボードのコーナーをレンダリングします.
image | レンダリング先の画像.8ビットのカラー画像である必要があります. |
patternSize | チェスボードの行と列毎の内側コーナーの数( patternSize = cv::Size(points_per_row,points_per_column) ). |
corners | 検出されたコーナーの配列,の出力.findChessboardCorners. |
patternWasFound | 完全なボードが見つかったかどうかを示すパラメータ.の戻り値がここに渡されます.findChessboardCornersの戻り値をここに渡す必要があります。 |
この関数は,検出された個々のチェスボードのコーナーを,ボードが見つからなかった場合は赤丸で,ボードが見つかった場合は色付きのコーナーが線で結ばれた形で描画します.
CV_EXPORTS_W void cv::drawFrameAxes | ( | InputOutputArray | image, |
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
InputArray | rvec, | ||
InputArray | tvec, | ||
float | length, | ||
int |
thickness
=
3 |
||
) |
ポーズ推定によるワールド/オブジェクト座標系の軸を描画します.
image | 入力/出力画像。1チャンネルまたは3チャンネルを持つ必要があります。チャンネル数は変更されません。 |
cameraMatrix | カメラの固有パラメータの入力3x3浮動小数点行列。![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
rvec | 回転ベクトル(参考Rodriguestvecと一緒に、モデル座標系からカメラ座標系へと点を移動させる。 |
tvec | 並進ベクトル. |
length | 塗り分け軸の長さをtvecと同じ単位(通常はメートル)で表したものです。 |
thickness | 描画軸の線の太さ |
カメラフレームに対するワールド/オブジェクト座標系の軸を描画します。OXは赤、OYは緑、OZは青で描かれます。
CV_EXPORTS_W cv::Mat cv::estimateAffine2D | ( | InputArray | from, |
InputArray | to, | ||
OutputArray |
inliers
=
noArray() ,
|
||
int |
method
=
RANSAC
,
|
||
double |
ransacReprojThreshold
=
3 ,
|
||
size_t |
maxIters
=
2000 ,
|
||
double |
confidence
=
0.99 ,
|
||
size_t |
refineIters
=
10 |
||
) |
2つの2Dポイントセット間の最適なアフィン変換を計算します。
計算方法は以下の通りです。
from | 1つ目の入力2Dポイントセット![]() |
to | 2つ目の入力2Dポイントセット![]() |
inliers | どの点がインライアであるかを示す出力ベクトル(1-インライア、0-アウトライア)。 |
method | 変換の計算にはロバストな方法が用いられます。以下の方法が考えられる. |
ransacReprojThreshold | ある点をインライアとみなすための,RANSACアルゴリズムにおける最大再投影誤差.RANSACにのみ適用されます。 |
maxIters | ロバスト手法の反復回数の最大値です。 |
confidence | 推定変換の信頼度(0から1の間)。通常は0.95から0.99の間であれば十分です。1に近すぎる値は、推定が著しく遅くなります。0.8-0.9よりも低い値は、正しくない推定変換をもたらすことがあります。 |
refineIters | 洗練されたアルゴリズム(Levenberg-Marquardt)の最大反復数。0を渡すと精密化が無効になるので、出力行列はロバスト法の出力になります。 |
この関数は,選択されたロバストアルゴリズムを用いて,2つの2次元点群間の最適な2次元アフィン変換を推定します.
計算された変換は,Levenberg-Marquardt 法を用いて(インライアのみを利用して)さらに精密化され,再投影誤差がさらに低減されます.
CV_EXPORTS_W cv::Mat cv::estimateAffine3D | ( | InputArray | src, |
InputArray | dst, | ||
CV_OUT double * |
scale
=
nullptr ,
|
||
bool |
force_rotation
=
true |
||
) |
2つの3Dポイントセット間の最適なアフィン変換を計算します。
計算方法は以下の通りです。最小化
ここで
は,3x3 の回転行列です.
は 3x1 の並進ベクトル,そして
は,スカラサイズの値です.これは,Umeyamaによるアルゴリズムの実装である。[umeyama1991least].. 推定されたアフィン変換は,7つの自由度を持つアフィン変換のサブクラスである同次尺度を持ちます.ペアとなる点セットは,それぞれ少なくとも3点からなる必要があります.
src | 1つ目の入力3Dポイントセット。 |
dst | 2つ目の入力3Dポイントセット |
scale | nullが渡された場合、スケールパラメータcは1.0であるとみなされます。それ以外の場合は、指定された変数に最適なスケールが設定されます。 |
force_rotation | trueの場合、返される回転は決して反射ではありません。これは、例えば、右手と左手の座標系の間の変換を最適化する場合など、望ましくない場合があります。 |
CV_EXPORTS_W int cv::estimateAffine3D | ( | InputArray | src, |
InputArray | dst, | ||
OutputArray | out, | ||
OutputArray | inliers, | ||
double |
ransacThreshold
=
3 ,
|
||
double |
confidence
=
0.99 |
||
) |
2つの3Dポイントセット間の最適なアフィン変換を計算します。
計算方法は以下の通りです。
src | 最初の入力3Dポイントセット![]() |
dst | を含む2番目の入力3Dポイントセット![]() |
out | 出力3次元アフィン変換行列![]()
|
inliers | どの点がインライアであるかを示す出力ベクトル(1-インライア、0-アウトライア)。 |
ransacThreshold | 点をインライアと見なすための,RANSACアルゴリズムにおける最大再投影誤差. |
confidence | 推定変換の信頼度(0から1の間)。通常は0.95から0.99の間であれば十分です。1に近すぎる値は、推定が著しく遅くなります。0.8-0.9よりも低い値は、正しくない推定変換をもたらすことがあります。 |
この関数は,RANSACアルゴリズムを用いて,2つの3次元点集合間の最適な3次元アフィン変換を推定します.
CV_EXPORTS_W cv::Mat cv::estimateAffinePartial2D | ( | InputArray | from, |
InputArray | to, | ||
OutputArray |
inliers
=
noArray() ,
|
||
int |
method
=
RANSAC
,
|
||
double |
ransacReprojThreshold
=
3 ,
|
||
size_t |
maxIters
=
2000 ,
|
||
double |
confidence
=
0.99 ,
|
||
size_t |
refineIters
=
10 |
||
) |
2つの2次元点集合の間で,4つの自由度を持つ最適な限定アフィン変換を計算します.
from | 最初の入力2次元点集合 |
to | 2番目の入力2Dポイントセット |
inliers | どの点がインライアであるかを示す出力ベクトル。 |
method | 変換の計算にはロバストな方法が用いられます。以下の方法が考えられる. |
ransacReprojThreshold | ある点をインライアとみなすための,RANSACアルゴリズムにおける最大再投影誤差.RANSACにのみ適用されます。 |
maxIters | ロバスト手法の反復回数の最大値です。 |
confidence | 推定変換の信頼度(0から1の間)。通常は0.95から0.99の間であれば十分です。1に近すぎる値は、推定が著しく遅くなります。0.8-0.9よりも低い値は、正しくない推定変換をもたらすことがあります。 |
refineIters | 洗練されたアルゴリズム(Levenberg-Marquardt)の最大反復数。0を渡すと精密化が無効になるので、出力行列はロバスト法の出力になります。 |
この関数は,並進,回転,一様なスケーリングの組み合わせに限定された,4つの自由度を持つ最適な2次元アフィン変換を推定します.選択されたアルゴリズムを利用して,ロバストな推定を行います.
計算された変換は,Levenberg-Marquardt 法を用いて(インライアのみを利用して)さらに精密化され,再投影誤差がさらに低減されます.
推定された変換行列は
ここでは回転角度.
スケーリング係数であり
はそれぞれ
軸への変換です.
CV_EXPORTS_W Scalar cv::estimateChessboardSharpness | ( | InputArray | image, |
Size | patternSize, | ||
InputArray | corners, | ||
float |
rise_distance
=
0.8F ,
|
||
bool |
vertical
=
false ,
|
||
OutputArray |
sharpness
=
noArray() |
||
) |
検出されたチェスボードのシャープネスを推定します。
画像のシャープネスは、明るさと同様に、正確なカメラキャリブレーションに不可欠なパラメータです。問題のあるキャリブレーション画像を除外するためにこれらのパラメータにアクセスするために、このメソッドは、黒から白のチェスボードのセルセンターへの移動によってエッジプロファイルを計算します。これをもとに、黒から白に移行するのに必要なピクセル数を算出します。この移行領域の幅は、チェスボードがどれだけシャープに撮影されているかを示す良い指標であり、~3.0ピクセル以下であることが望ましい。
image | チェスボードのコーナーを探すのに使われたグレー画像 |
patternSize | 見つかったチェスボードのパターンの大きさ |
corners | 見つかったコーナーfindChessboardCornersSB |
rise_distance | 立ち上がり距離0.8は、10% ...を意味します。最終的な信号強度の90 |
vertical | デフォルトでは、水平線のエッジレスポンスが計算される |
sharpness | オプションの出力配列には,計算されたエッジ・レスポンスに対するシャープネス値が入ります(説明を参照してください). |
オプションのシャープネス配列は,CV_32FC1 型であり,計算された各プロファイルに対して,以下の5つのエントリを持つ1つの行を持ちます.0 = 画像内の基礎となるエッジの x 座標 1 = 画像内の基礎となるエッジの y 座標 2 = 遷移領域の幅(シャープネス) 3 = 黒いセル内の信号強度(輝度の最小値) 4 = 白いセル内の信号強度(輝度の最大値).
CV_EXPORTS_W int cv::estimateTranslation3D | ( | InputArray | src, |
InputArray | dst, | ||
OutputArray | out, | ||
OutputArray | inliers, | ||
double |
ransacThreshold
=
3 ,
|
||
double |
confidence
=
0.99 |
||
) |
2つの3Dポイントセット間の最適な平行移動を計算する。
計算方法は以下の通りです。
src | 最初の入力3Dポイントセット![]() |
dst | を含む2番目の入力3Dポイントセット![]() |
out | 出力される3次元平行移動ベクトル![]()
|
inliers | どの点がインライアであるかを示す出力ベクトル(1-インライア、0-アウトライア)。 |
ransacThreshold | 点をインライアと見なすための,RANSACアルゴリズムにおける最大再投影誤差. |
confidence | 推定変換の信頼度(0から1の間)。通常は0.95から0.99の間であれば十分です。1に近すぎる値は、推定が著しく遅くなります。0.8-0.9よりも低い値は、正しくない推定変換をもたらすことがあります。 |
この関数は,RANSACアルゴリズムを用いて,2つの3次元点群間の最適な3次元移動量を推定します.
CV_EXPORTS_W void cv::filterHomographyDecompByVisibleRefpoints | ( | InputArrayOfArrays | rotations, |
InputArrayOfArrays | normals, | ||
InputArray | beforePoints, | ||
InputArray | afterPoints, | ||
OutputArray | possibleSolutions, | ||
InputArray |
pointsMask
=
noArray() |
||
) |
追加情報に基づいて,ホモグラフィー分解をフィルタリングします.
rotations | 回転行列のベクトル |
normals | 平面法線マトリクスのベクトル |
beforePoints | ホモグラフィーを適用する前の(平行化された)可視参照点のベクトル |
afterPoints | ホモグラフィー適用後の(平行化された)可視参照点のベクトル |
possibleSolutions | フィルタリング後の実行可能なソリューションセットを表すintのインデックスのベクトル |
pointsMask | で与えられるインライアのマスクを表す,8u型の任意の Mat/Vector.findHomography関数 |
この関数は,関数の出力をフィルタリングするためのものです.decomposeHomographyMatに記述された追加情報に基づいて[Malis]を参照してください。. 手法の概要:関数decomposeHomographyMat関数は,2つのユニークな解とその「反対」の解,合計4つの解を返します.もし,ホモグラフィー変換の前後でカメラフレーム内に見える点のセットにアクセスできるならば,どのホモグラフィーが,すべての可視参照点がカメラの前にあることと矛盾しないかを検証することで,どれが真の潜在的な解で,どれが反対の解であるかを決定することができます.入力は変更されません。フィルタリングされた解集合は、既存の解集合へのインデックスとして返されます。
CV_EXPORTS_W void cv::filterSpeckles | ( | InputOutputArray | img, |
double | newVal, | ||
int | maxSpeckleSize, | ||
double | maxDiff, | ||
InputOutputArray |
buf
=
noArray() |
||
) |
視差マップに含まれる小さなノイズの塊(スペックル)をフィルターで除去する
img | 入力された16ビット符号付き視差画像 |
newVal | スペックルを除去するために使われる視差の値 |
maxSpeckleSize | スペックルとみなすための最大スペックルサイズ。大きなblobはアルゴリズムの影響を受けません |
maxDiff | 隣接する視差画素を同じblobに入れるための,最大差。なお、以下のようにStereoBM,StereoSGBMやその他のアルゴリズムでは、固定小数点の視差マップを返すため、視差の値が16倍になるので、このパラメータ値を指定する際には、このスケールファクターを考慮する必要があります。 |
buf | 関数内でのメモリ割り当てを回避するための,任意の一時バッファ. |
CV_EXPORTS_W bool cv::findChessboardCorners | ( | InputArray | image, |
Size | patternSize, | ||
OutputArray | corners, | ||
int |
flags
=
CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE |
||
) |
チェスボードの内側の角の位置を求めます。
image | ソースとなるチェスボードのビュー。8ビットのグレースケールまたはカラー画像である必要があります。 |
patternSize | チェスボードの行と列毎の内側コーナーの数 ( patternSize = cv::Size(points_per_row,points_per_colum) = cv::Size(columns,rows) ) . |
corners | 検出されたコーナーの出力配列. |
flags | 0または以下の値の組み合わせになる,様々な操作フラグ.
|
この関数は,入力画像がチェスボードパターンを表しているかどうかを判定し,内部のチェスボードコーナーの位置を特定しようとします.この関数は,すべてのコーナーが見つかり,それらが一定の順序(行ごとに,左から右へ)で配置されていれば,0ではない値を返します.そうでない場合,この関数がすべてのコーナーを見つけることができなかったり,並べ替えることができなかったりすると,0を返します.例えば,通常のチェスボードは,8×8の正方形と7×7の内部コーナー,つまり,黒い正方形が互いに接触するポイントを持っています.検出された座標は近似値であり,その位置をより正確に決定するために,この関数は cornerSubPix を呼び出します.また,返された座標が十分に正確でない場合は,関数 cornerSubPix を別のパラメータで使用することもできます.
チェスボードのコーナーを検出して描画するサンプルの使い方: :
bool cv::findChessboardCornersSB | ( | InputArray | image, |
Size | patternSize, | ||
OutputArray | corners, | ||
int | flags, | ||
OutputArray | meta | ||
) |
セクターベースのアプローチを用いて、チェスボードの内側の角の位置を見つけます。
image | ソースとなるチェスボードのビュー。8ビットのグレースケールまたはカラー画像である必要があります。 |
patternSize | チェスボードの行と列毎の内側コーナーの数 ( patternSize = cv::Size(points_per_row,points_per_colum) = cv::Size(columns,rows) ) . |
corners | 検出されたコーナーの出力配列. |
flags | 0または以下の値の組み合わせになる,様々な操作フラグ.
|
meta | オプションで,検出されたコーナーの配列を出力します( CV_8UC1 および size = cv::Size(columns,rows) ).各エントリは,パターンの1つのコーナーを表し,以下のいずれかの値をとります.
|
この関数はfindChessboardCornersに似ていますが,ボックスフィルタで近似された局所的なラドン変換を利用しており,あらゆる種類のノイズに対してより頑健で,大きな画像に対しても高速で,チェスボード内部のコーナーのサブピクセル位置を直接返すことができます.この手法は、次の論文に基づいています。[duda2018]を参照しています。 "Accurate Detection and Localization of Checkerboard Corners for Calibration" demonstrating that the returned sub-pixel positions are more accurate than the one returned by cornerSubPix allowing a precise camera calibration for demanding applications.
CALIB_CB_LARGER または CALIB_CB_MARKER フラグが指定された場合,その結果はオプションの meta 配列から取得できます.これらのフラグは、カメラの視野を超えるキャリブレーションパターンを使用する際に役立ちます。このような大規模なパターンでは、画像の境界にできるだけ近いコーナーを利用できるため、より正確なキャリブレーションが可能になります。すべての画像で一貫した座標系を実現するために、オプションのマーカー(下の画像参照)を使用して、ボードの原点を黒丸の位置に移動させることができます。
|
inline |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS_W bool cv::findCirclesGrid | ( | InputArray | image, |
Size | patternSize, | ||
OutputArray | centers, | ||
int | flags, | ||
const Ptr< FeatureDetector > & | blobDetector, | ||
const CirclesGridFinderParameters & | parameters | ||
) |
グリッド上の円の中心を検出します。
image | 入力された円のグリッドビュー。8ビットのグレースケールまたはカラー画像である必要があります。 |
patternSize | 行と列ごとの円の数 ( patternSize = Size(points_per_row, points_per_colum) ) 。 |
centers | 検出された中心の出力配列. |
flags | 以下の値のいずれかを取ることができる様々な操作フラグ。
|
blobDetector | 明るい背景上の暗い円のようなblobを検出する特徴検出器。もしblobDetector がNULLの場合はimage は,候補の Point2f 配列を表します. |
parameters | グリッドパターン内の円を見つけるための構造体. |
この関数は,入力画像に格子状の円が含まれているかどうかを調べます.この関数は,入力画像に格子状の円が含まれているかどうかを判定し,含まれている場合は,その円の中心を探します.この関数は,すべての中心が見つかり,それらが一定の順序(行ごとに,左から右へ)で配置されていれば,0ではない値を返します.そうでない場合,この関数がすべての角を見つけることができなかったり,並べ替えることができなかったりすると,0 を返します.
円の中心を検出して描画する使い方のサンプル。:
CV_EXPORTS_W bool cv::findCirclesGrid | ( | InputArray | image, |
Size | patternSize, | ||
OutputArray | centers, | ||
int |
flags
=
CALIB_CB_SYMMETRIC_GRID ,
|
||
const Ptr< FeatureDetector > & |
blobDetector
=
SimpleBlobDetector::create() |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS Mat cv::findEssentialMat | ( | InputArray | points1, |
InputArray | points2, | ||
double | focal, | ||
Point2d | pp, | ||
int | method, | ||
double | prob, | ||
double | threshold, | ||
OutputArray | mask | ||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS_W Mat cv::findEssentialMat | ( | InputArray | points1, |
InputArray | points2, | ||
double |
focal
=
1.0 ,
|
||
Point2d |
pp
=
Point2d(0, 0) ,
|
||
int |
method
=
RANSAC
,
|
||
double |
prob
=
0.999 ,
|
||
double |
threshold
=
1.0 ,
|
||
int |
maxIters
=
1000 ,
|
||
OutputArray |
mask
=
noArray() |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
points1 | 1枚目の画像から得られる,N (N >= 5) 個の2次元点の配列.点の座標は,浮動小数点(単精度または倍精度)でなければなりません. |
points2 | points1 と同じサイズと形式の,2 番目の画像の点の配列. |
focal | カメラの焦点距離.なお,この関数は, points1 と points2 が,同じ焦点距離と主点を持つカメラから得られた特徴点であることを仮定しています. |
pp | カメラの主点。 |
method | 基本行列の計算方法. |
threshold | RANSACに使用されるパラメータ.点からエピポーラ線までの最大距離(ピクセル単位)で,これを超えるとその点は外れ値とみなされ,最終的な基本行列の計算には利用されません.この値は,点のローカライズの精度,画像の解像度,および画像のノイズに応じて,1〜3程度に設定できます. |
prob | RANSAC法またはLMedS法のみで使用されるパラメータ。推定された行列が正しいことを示す,望ましい信頼度(確率)を指定します. |
mask | N 個の要素からなる出力配列.この配列の各要素は,はずれ値に対しては 0,その他の点に対しては 1 に設定されます.この配列は,RANSAC 法と LMedS 法でのみ計算されます. |
maxIters | ロバスト手法の反復回数の最大値です。 |
この関数は,上述のものとは異なり,焦点距離と主点からカメラの内部行列を求めます.
CV_EXPORTS Mat cv::findEssentialMat | ( | InputArray | points1, |
InputArray | points2, | ||
InputArray | cameraMatrix, | ||
int | method, | ||
double | prob, | ||
double | threshold, | ||
OutputArray | mask | ||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS_W Mat cv::findEssentialMat | ( | InputArray | points1, |
InputArray | points2, | ||
InputArray | cameraMatrix, | ||
int |
method
=
RANSAC
,
|
||
double |
prob
=
0.999 ,
|
||
double |
threshold
=
1.0 ,
|
||
int |
maxIters
=
1000 ,
|
||
OutputArray |
mask
=
noArray() |
||
) |
2つの画像中の対応する点から,本質的な行列を求めます.
points1 | 1枚目の画像から得られる,N (N >= 5) 個の2次元点の配列.点の座標は,浮動小数点(単精度または倍精度)でなければなりません. |
points2 | points1 と同じサイズと形式の,2 番目の画像の点の配列. |
cameraMatrix | カメラ固有の行列![]() P = cv::NoArray() を使用して,画像ポイントを正規化された画像座標に変換します.これは,カメラ固有の行列が同一の場合に有効です.これらの座標を渡す際には,このパラメータに恒等行列を渡します. |
method | 固有マトリクスを計算する方法. |
prob | RANSAC法またはLMedS法のみで使用されるパラメータ。推定された行列が正しいことを示す,望ましい信頼度(確率)を指定します. |
threshold | RANSACに使用されるパラメータ.点からエピポーラ線までの最大距離(ピクセル単位)で,これを超えるとその点は外れ値とみなされ,最終的な基本行列の計算には利用されません.この値は,点のローカライズの精度,画像の解像度,および画像のノイズに応じて,1〜3程度に設定できます. |
mask | N 個の要素からなる出力配列.この配列の各要素は,はずれ値に対しては 0,その他の点に対しては 1 に設定されます.この配列は,RANSAC 法と LMedS 法でのみ計算されます. |
maxIters | ロバスト手法の反復回数の最大値です。 |
この関数は,[Nister03] の5点アルゴリズムソルバーに基づいて,必須行列を推定します.[Nister03]..[SteweniusCFS]も関連しています.エピポーラ幾何学は,次の式で表されます.
ここでは本質的な行列です。
および
は,それぞれ第1画像と第2画像の対応する点です.この関数の結果は,さらにdecomposeEssentialMatまたはrecoverPoseに渡すことで,カメラ間の相対的な姿勢を復元することができます.
CV_EXPORTS_W Mat cv::findEssentialMat | ( | InputArray | points1, |
InputArray | points2, | ||
InputArray | cameraMatrix1, | ||
InputArray | distCoeffs1, | ||
InputArray | cameraMatrix2, | ||
InputArray | distCoeffs2, | ||
int |
method
=
RANSAC
,
|
||
double |
prob
=
0.999 ,
|
||
double |
threshold
=
1.0 ,
|
||
OutputArray |
mask
=
noArray() |
||
) |
2台の異なるカメラで撮影された2つの画像の対応点から,本質的な行列を求めます.
points1 | 1枚目の画像から得られる,N (N >= 5) 個の2次元点の配列.点の座標は,浮動小数点(単精度または倍精度)でなければなりません. |
points2 | points1 と同じサイズと形式の,2 番目の画像の点の配列. |
cameraMatrix1 | カメラ行列![]() P = cv::NoArray() を使用して,画像ポイントを正規化された画像座標に変換します.これは,同一のカメラ行列に対して有効です.これらの座標を渡す際には,このパラメータに同一の行列を渡します. |
cameraMatrix2 | カメラ行列![]() P = cv::NoArray() を使用して,画像ポイントを正規化された画像座標に変換します.これは,同一のカメラ行列に対して有効です.これらの座標を渡す際には,このパラメータに同一の行列を渡します. |
distCoeffs1 | 入力 歪み係数のベクトル![]() |
distCoeffs2 | 入力 歪み係数のベクトル![]() |
method | 固有マトリクスを計算する方法. |
prob | RANSAC法またはLMedS法のみで使用されるパラメータ。推定された行列が正しいことを示す,望ましい信頼度(確率)を指定します. |
threshold | RANSACに使用されるパラメータ.点からエピポーラ線までの最大距離(ピクセル単位)で,これを超えるとその点は外れ値とみなされ,最終的な基本行列の計算には利用されません.この値は,点のローカライズの精度,画像の解像度,および画像のノイズに応じて,1〜3程度に設定できます. |
mask | N 個の要素からなる出力配列.この配列の各要素は,はずれ値に対しては 0,その他の点に対しては 1 に設定されます.この配列は,RANSAC 法と LMedS 法でのみ計算されます. |
この関数は,[Nister03] の5点アルゴリズムソルバーに基づいて,必須行列を推定します.[Nister03]..[SteweniusCFS]も関連しています.エピポーラ幾何学は,次の式で表されます.
ここでは本質的な行列です。
および
は,それぞれ第1画像と第2画像の対応する点です.この関数の結果は,さらにdecomposeEssentialMatまたはrecoverPoseに渡すことで,カメラ間の相対的な姿勢を復元することができます.
CV_EXPORTS_W Mat cv::findFundamentalMat | ( | InputArray | points1, |
InputArray | points2, | ||
int | method, | ||
double | ransacReprojThreshold, | ||
double | confidence, | ||
int | maxIters, | ||
OutputArray |
mask
=
noArray() |
||
) |
2つの画像の対応する点から,基本行列を求めます.
points1 | 1枚目の画像から得られるN個の点の配列.点の座標は,浮動小数点(単精度または倍精度)でなければいけません. | |
points2 | points1 と同じサイズと形式の,2 番目の画像の点の配列. | |
method | 基本行列の計算方法. | |
ransacReprojThreshold | RANSACでのみ利用されるパラメータ.点からエピポーラ線までの最大距離をピクセル単位で表したもので,これを超えると,その点は外れ値であるとみなされ,最終的な基本行列の計算には利用されません.これは、点のローカライズの精度、画像の解像度、および画像のノイズに応じて、1〜3のように設定することができます。 | |
confidence | RANSAC法とLMedS法でのみ使用されるパラメータ。推定された行列が正しいことを示す,望ましい信頼度(確率)を指定します. | |
[out]. | mask | オプションの出力マスク |
maxIters | ロバスト手法の反復回数の最大値です。 |
エピポーラ幾何学は,次の式で表されます.
ここでは基本行列である.
および
は,それぞれ第1画像と第2画像の対応する点です.
この関数は,上述の4つの手法のうちの1つを用いて基本行列を計算し,求められた基本行列を返します.通常は,1つの行列だけが求められます.しかし,7-point アルゴリズムの場合,この関数は最大3つの解を返すことがあります (は,3 つの行列をすべて順に格納する行列です).
求められた基本行列は,指定された点に対応するエピポーラ線を求める computeCorrespondEpilines に渡すことができます.また,この行列はstereoRectifyUncalibratedに渡して,平行化変換を求めることもできます.
CV_EXPORTS_W Mat cv::findFundamentalMat | ( | InputArray | points1, |
InputArray | points2, | ||
int |
method
=
FM_RANSAC
,
|
||
double |
ransacReprojThreshold
=
3. ,
|
||
double |
confidence
=
0.99 ,
|
||
OutputArray |
mask
=
noArray() |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS Mat cv::findFundamentalMat | ( | InputArray | points1, |
InputArray | points2, | ||
OutputArray | mask, | ||
int |
method
=
FM_RANSAC
,
|
||
double |
ransacReprojThreshold
=
3. ,
|
||
double |
confidence
=
0.99 |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS_W Mat cv::findHomography | ( | InputArray | srcPoints, |
InputArray | dstPoints, | ||
int |
method
=
0 ,
|
||
double |
ransacReprojThreshold
=
3 ,
|
||
OutputArray |
mask
=
noArray() ,
|
||
const int |
maxIters
=
2000 ,
|
||
const double |
confidence
=
0.995 |
||
) |
2つの平面間の透視変換を求めます.
srcPoints | 元の平面上の点の座標,CV_32FC2型の行列,あるいは vector<Point2f> . |
dstPoints | 対象となる平面上の点の座標,CV_32FC2 型の行列,または vector<Point2f> . |
method | ホモグラフィ行列の計算に利用される手法.以下の方法が考えられます. |
ransacReprojThreshold | 点のペアをインライアとして扱うための最大許容再投影誤差(RANSAC法とRHO法でのみ使用).つまり,もし
![]() |
mask | ロバスト手法(RANSAC や LMeDS )で設定される出力マスク(オプション).ただし,入力マスクの値は無視されます. |
maxIters | RANSACの最大反復回数. |
confidence | 0から1の間の信頼度. |
この関数は,入力面と出力面の間の透視変換を求め,それを返します.を見つけて返します.
逆投影誤差
を最小化します.パラメータ method がデフォルト値の0に設定されている場合,この関数はすべての点のペアを利用して,単純な最小二乗法によって初期のホモグラフィ推定値を計算します.
しかし,すべての点のペア(,
)が剛体透視変換に適合しない場合(つまり,はずれ値がある場合),この初期推定値は悪くなります.このような場合、3つのロバストな手法のうちの1つを使用することができます。RANSAC、LMeDS、RHOの各手法は、対応する点のペアの多くの異なるランダムなサブセット(各4ペア、共線ペアは破棄される)を試し、このサブセットと単純な最小二乗アルゴリズムを使用してホモグラフィ行列を推定し、計算されたホモグラフィの品質/良さ(RANSACの場合は外れ値の数、LMeDSの場合は再投影誤差の最小中央値)を計算します。そして、最適なサブセットを用いて、ホモグラフィ行列の初期推定値とインライア/アウトライアのマスクを作成します。
ロバスト法か否かに関わらず,計算されたホモグラフィ行列は,Levenberg-Marquardt法を用いて(ロバスト法の場合はインライアのみを使用して)さらに精密化され,再投影誤差がさらに低減されます.
RANSAC法とRHO法は,実際にはどのような比率のインライアも扱うことができますが,インライアとアウトライアを区別するための閾値が必要です.LMeDSは閾値を必要としませんが、インライアが50%以上の場合にのみ正しく動作します。最後に,はずれ値がなく,ノイズがかなり小さい場合は,デフォルトの手法(method=0)を利用します.
この関数は,初期のイントリンシック行列とエクストリンシック行列を求めるために利用されます.ホモグラフィー行列は,ある尺度まで決定されます.したがって,以下のように正規化されます. なお,ある
行列が推定できない場合は,空の行列が返されることに注意してください.
CV_EXPORTS Mat cv::findHomography | ( | InputArray | srcPoints, |
InputArray | dstPoints, | ||
OutputArray | mask, | ||
int |
method
=
0 ,
|
||
double |
ransacReprojThreshold
=
3 |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS_W Mat cv::getDefaultNewCameraMatrix | ( | InputArray | cameraMatrix, |
Size |
imgsize
=
Size() ,
|
||
bool |
centerPrincipalPoint
=
false |
||
) |
デフォルトの新しいカメラ行列を返します.
この関数は,入力された cameraMatrix の完全なコピー( centerPrinicipalPoint=false の場合),あるいは修正されたカメラ行列( centerPrincipalPoint=true の場合)を返します.
後者の場合,新しいカメラ行列は,次のようになります.
ここでおよび
は
および
それぞれ cameraMatrix の要素となります。
デフォルトでは,OpenCV の歪み補正関数(下記参照)は,主点を移動しません.initUndistortRectifyMap,undistortを参照してください)は,主点を移動しません.しかし,ステレオを扱う場合,両方のビューの主点を同じ y 座標に移動させることが重要であり(これは,ほとんどのステレオ対応点探索アルゴリズムで要求されます),同じ x 座標に移動させることもあります.そこで、主点が中心に位置する各ビューに対して、新しいカメラ行列を作成します。
cameraMatrix | 入力カメラ行列. |
imgsize | カメラビューの画像サイズ(ピクセル)。 |
centerPrincipalPoint | 新しいカメラ行列における主点の位置。パラメータは,この位置が画像の中心にあるべきかどうかを示します. |
CV_EXPORTS_W Mat cv::getOptimalNewCameraMatrix | ( | InputArray | cameraMatrix, |
InputArray | distCoeffs, | ||
Size | imageSize, | ||
double | alpha, | ||
Size |
newImgSize
=
Size() ,
|
||
CV_OUT Rect * |
validPixROI
=
0 ,
|
||
bool |
centerPrincipalPoint
=
false |
||
) |
フリースケーリングパラメータに基づく,新しいカメラ固有の行列を返します.
cameraMatrix | 入力カメラ固有の行列. |
distCoeffs | 入力 歪み係数のベクトル![]() |
imageSize | 元の画像サイズ. |
alpha | 0(歪んでいない画像のすべてのピクセルが有効な場合)と1(元画像のすべてのピクセルが歪んでいない画像に保持される場合)の間のフリースケーリングパラメータ.参照stereoRectifyを参照してください。 |
newImgSize | 整形後の画像サイズ。デフォルトでは, imageSize に設定されています. |
validPixROI | 歪んでいない画像の中の,すべての良いピクセルの領域を囲む出力矩形(オプション).の roi1, roi2 の説明を参照してください.stereoRectify. |
centerPrincipalPoint | 新しいカメラの内部行列において,主点を画像の中心に置くべきかどうかを示すオプションのフラグ.デフォルトでは,ソース画像のサブセット(アルファ値で決まる)が補正後の画像に最もフィットするように主点が選択されます. |
この関数は,フリースケーリングパラメータに基づいて,最適な新しいカメラ固有の行列を計算し,それを返します.このパラメータを変化させることで,意味のあるピクセルだけを取得することができます. alpha=0 ,コーナーに貴重な情報がある場合は元の画像のピクセルをすべて残し, alpha=1 ,またはその中間の値を取得することができます.alpha>0の場合,歪みのない結果には,キャプチャされた歪んだ画像の外側にある「仮想」ピクセルに対応するいくつかの黒いピクセルが含まれる可能性があります.元のカメラの内部行列,歪み係数,計算された新しいカメラの内部行列,そして newImageSize をinitUndistortRectifyMapのマップを生成するためにremap.
CV_EXPORTS_W Mat cv::initCameraMatrix2D | ( | InputArrayOfArrays | objectPoints, |
InputArrayOfArrays | imagePoints, | ||
Size | imageSize, | ||
double |
aspectRatio
=
1.0 |
||
) |
3D-2D の点の対応関係から初期のカメラ固有マトリックスを求めます.
objectPoints | キャリブレーションパターン座標空間におけるキャリブレーションパターンポイントのベクター。旧インターフェースでは,すべてのビューごとのベクトルが連結されています.参照calibrateCameraを参照してください。 |
imagePoints | キャリブレーションパターンの点の投影のベクトルのベクトル。旧インターフェースでは、すべてのビューごとのベクトルが連結されています。 |
imageSize | 主点の初期化に使用されるピクセル単位の画像サイズ。 |
aspectRatio | この値がゼロまたは負の場合、両方の![]() ![]() ![]() |
この関数は,カメラキャリブレーション処理のために,初期のカメラ固有マトリクスを推定して返します.現在のところ,この関数は平面的なキャリブレーションパターンのみをサポートしています.これは,各オブジェクトポイントの z-座標が 0 であるパターンです.
CV_EXPORTS_W void cv::initInverseRectificationMap | ( | InputArray | cameraMatrix, |
InputArray | distCoeffs, | ||
InputArray | R, | ||
InputArray | newCameraMatrix, | ||
const Size & | size, | ||
int | m1type, | ||
OutputArray | map1, | ||
OutputArray | map2 | ||
) |
投影および逆補正の変換マップを計算します.要するに,これはinitUndistortRectifyMapの逆数であり,プロジェクタとカメラのペアにおけるプロジェクタ(「逆カメラ」)のステレオ補正に対応しています.
この関数は,投影と逆平行化の変換を合同で計算し,その結果を次のようなマップの形で表しますremap. 投影された画像は,元の画像を歪めたもののように見えますが,これをプロジェクターで投影すると,元の画像と見た目が一致するはずです.単眼カメラの場合,newCameraMatrix は通常 cameraMatrix と等しいですが,スケーリングをより適切に制御するためにgetOptimalNewCameraMatrixで計算することもできます.これは,スケーリングをより適切に制御するためです.プロジェクターとカメラのペアの場合,newCameraMatrix は通常,次の式で求められる P1 または P2 に設定されますstereoRectify.
プロジェクターとカメラのペアの場合、これはステレオを作成するために(カメラの場合と同じ方法で)プロジェクターを整列させるのに役立ちます(Rに従って)。initUndistortRectifyMapカメラの場合と同じ方法で)プロジェクターを調整し、ステレオ補正されたペアを作ることができます。これにより,両方の画像のエピポーラ線が水平になり,同じY座標を持つようになります(水平に配置されたプロジェクタとカメラのペアの場合).
この関数は,以下で使用される逆マッピングアルゴリズム用のマップを作成します.remap. つまり,デスティネーションの各ピクセルつまり,投影・逆補正された出力画像の各ピクセルに対して,入力画像(つまり,元のデジタル画像)における対応する座標を求めます.以下のような処理を行います.
ここでは,歪み係数ベクトル distCoeffs です.
プロジェクターとカメラのペアがステレオ補正されている場合,この関数はプロジェクターに対して呼ばれ,一方でinitUndistortRectifyMapはカメラヘッドに対して呼び出されます。この処理はstereoRectifyの後に呼び出され,さらにそれはstereoCalibrate. プロジェクターとカメラのペアがキャリブレーションされていない場合でも、次のようにして、基本行列から直接、平行化変換を計算することができます。stereoRectifyUncalibrated. プロジェクターとカメラに対して,この関数は,3D空間の回転行列Rではなく,ピクセル領域の平行化変換としてホモグラフィHを求めます.R は,H から次のように計算されます
ここで cameraMatrix は,任意に選択できます.
cameraMatrix | 入力カメラ行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
R | オプションである,物体空間における平行化変換(3x3 の行列).で計算された R1 または R2 をここに渡すことができます.stereoRectifyで計算された R1 または R2 をここに渡すことができます.この行列が空の場合,恒等変換が仮定されます. |
newCameraMatrix | 新しいカメラ行列.![]() |
size | 歪んだ画像サイズ. |
m1type | 最初の出力マップの種類.CV_32FC1, CV_32FC2, CV_16SC2 のいずれかです.convertMaps |
map1 | のための最初の出力マップ.remap. |
map2 | 2番目の出力マップremap. |
CV_EXPORTS_W void cv::initUndistortRectifyMap | ( | InputArray | cameraMatrix, |
InputArray | distCoeffs, | ||
InputArray | R, | ||
InputArray | newCameraMatrix, | ||
Size | size, | ||
int | m1type, | ||
OutputArray | map1, | ||
OutputArray | map2 | ||
) |
歪み補正・平行化変換マップを求めます.
この関数は,歪みと平行化の変換を合同で計算し,その結果を以下のようなマップの形で表しますremap. 歪みのない画像は,カメラ行列 =newCameraMatrix を用いたカメラで撮影されたかのように,元の画像と同じように見え,歪みは0になります.単眼カメラの場合,newCameraMatrix は通常 cameraMatrix と等しいですが,スケーリングをより正確に制御するために,次式で計算することもできますgetOptimalNewCameraMatrixによって計算することもできます.これは,スケーリングをより正確に制御するためです.ステレオカメラの場合,newCameraMatrix は通常,次式で求められる P1 または P2 に設定されます.stereoRectify.
また,この新しいカメラは,R に従って,座標空間内で異なる向きに配置されます.これは例えば,ステレオカメラの2つのヘッドを調整して,両方の画像のエピポーララインが水平になり,同じ y-座標を持つようにするのに役立ちます(水平に配置されたステレオカメラの場合).
この関数は,逆マッピングアルゴリズムのためのマップを作成します.remap. つまり,デスティネーションの各ピクセルこの関数は,補正・平行化されたデスティネーション画像において,ソース画像(つまり,カメラから出力されたオリジナル画像)の対応する座標を計算します.以下のような処理が行われます.
ここでは,歪み係数です.
ステレオカメラの場合,この関数は2回呼ばれます:各カメラヘッドに対して1回,後にstereoRectifyの後に呼び出され,さらにその次はstereoCalibrate. しかし,ステレオカメラのキャリブレーションが行われていない場合でも,次のようにして,基本行列から直接,平行化変換を計算することができます。stereoRectifyUncalibrated. この関数は,各カメラに対して,3次元空間の回転行列 R ではなく,ピクセル領域の平行化変換としてホモグラフィ H を求めます.R は,H から次のようにして求められます
ここで cameraMatrix は,任意に選択できます.
cameraMatrix | 入力カメラ行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
R | オブジェクト空間における任意の平行化変換(3x3 の行列).で計算された R1 または R2 をここに渡すことができます.stereoRectifyをここに渡すことができます.この行列が空の場合は,恒等変換が仮定されます.cvInitUndistortMap では,R は恒等行列であると仮定されます. |
newCameraMatrix | 新しいカメラ行列.![]() |
size | 歪みのない画像サイズ. |
m1type | CV_32FC1, CV_32FC2, CV_16SC2 のいずれかである,最初の出力マップの種類.convertMaps |
map1 | 第1の出力マップ. |
map2 | 2番目の出力マップ. |
CV_EXPORTS_W void cv::matMulDeriv | ( | InputArray | A, |
InputArray | B, | ||
OutputArray | dABdA, | ||
OutputArray | dABdB | ||
) |
乗算された各行列について,行列積の偏導関数を求めます.
A | 1 番目に乗算された行列. |
B | 2 番目に乗算された行列. |
dABdA | 大きさの1番目の出力導関数行列 d(A*B)/dA![]() |
dABdB | 2 番目に出力される微分行列 d(A*B)/ddB(サイズ![]() |
この関数は,行列の積の要素の,各要素に関する偏微分を求めます.この関数は,2つの入力行列のそれぞれの要素に関する,行列積の要素の偏微分を求めます.この関数は,次のような行列のヤコビアン行列を計算するために利用されます.stereoCalibrateのヤコビ行列を計算するために利用されていますが,他の類似した最適化関数でも利用することができます.
CV_EXPORTS_W void cv::projectPoints | ( | InputArray | objectPoints, |
InputArray | rvec, | ||
InputArray | tvec, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
OutputArray | imagePoints, | ||
OutputArray |
jacobian
=
noArray() ,
|
||
double |
aspectRatio
=
0 |
||
) |
3次元点を画像平面に投影します.
objectPoints | ワールド座標系を基準にして表現された物体点の配列.3xN/Nx3 の1チャンネル,あるいは 1xN/Nx1 の3チャンネル(あるいは vector<Point3f> )で,ここで N はビューのポイント数を表します. |
rvec | 回転ベクトル(Rodrigues)は,tvec と共に,ワールド座標系からカメラ座標系への基底変更を行います.calibrateCameraを参照してください。 |
tvec | 並進ベクトル: 上記のパラメータの説明を参照. |
cameraMatrix | カメラ固有の行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
imagePoints | 出力は,1xN/Nx1 2チャンネルの画像点の配列,または vector<Point2f> です. |
jacobian | オプション出力 2Nx(10+<numDistCoeffs>) 回転ベクトル,並進ベクトル,焦点距離,主点の座標,歪み係数の各成分に対する画像点の微分のヤコビ行列.旧インターフェースでは,ヤコビアンの異なる成分は,異なる出力パラメータを介して返されます. |
aspectRatio | オプションの「固定アスペクト比」パラメータ.このパラメータが0ではない場合,この関数はアスペクト比が固定されているとみなし,それに応じてアスペクト比(![]() |
この関数は,カメラの内部および外部パラメータが与えられた場合に,3次元点の画像平面への2次元投影を求めます.オプションとして,この関数は,(すべての入力パラメータの関数としての)画像点座標の偏微分のヤコビアン行列を,特定のパラメータ(内部および外部)に関して求めます.このヤコビアンは,以下のグローバル最適化処理で利用されます.calibrateCamera,solvePnPを満たす。stereoCalibrate. また,この関数自体も,現在の内在・外在パラメータが与えられた場合の再投影誤差を求めるために利用できます.
CV_EXPORTS_W int cv::recoverPose | ( | InputArray | E, |
InputArray | points1, | ||
InputArray | points2, | ||
InputArray | cameraMatrix, | ||
OutputArray | R, | ||
OutputArray | t, | ||
double | distanceThresh, | ||
InputOutputArray |
mask
=
noArray() ,
|
||
OutputArray |
triangulatedPoints
=
noArray() |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
E | 入力となる必須行列. |
points1 | 1枚目の画像から得られたN個の2次元点の配列.点の座標は,浮動小数点(単精度または倍精度)でなければなりません. |
points2 | points1...と同じサイズ,同じ形式の,2枚目の画像の点の配列. |
cameraMatrix | カメラ固有の行列![]() |
R | 出力される回転行列.この行列は,並進ベクトルとともに,第1のカメラの座標系から第2のカメラの座標系への基底変更を行うタプルを構成する.一般的に、このタプルにtは使用できないことに注意してください、下記のパラメータの説明を参照してください。 |
t | 出力並進ベクトル.このベクトルは次の式で得られます.decomposeEssentialMatつまり,t は並進ベクトルの方向であり,単位長さを持っています. |
distanceThresh | 遠くの点(すなわち無限の点)をフィルタリングするために使用される閾値距離。 |
mask | point1とpoint2のインライアに対する入出力マスク。これが空でない場合,与えられた必須行列Eに対して,point1とpoint2のインライアをマークします.これらのインライアのみが,ポーズの復元に使用されます.出力マスクには、キラリティ・チェックに合格したインライアのみが表示されます。 |
triangulatedPoints | 三角測量によって再構成された3Dポイント。 |
この関数は,上記の関数とは異なり,不正性チェックに使用された三角測量された3Dポイントを出力します.
CV_EXPORTS_W int cv::recoverPose | ( | InputArray | E, |
InputArray | points1, | ||
InputArray | points2, | ||
InputArray | cameraMatrix, | ||
OutputArray | R, | ||
OutputArray | t, | ||
InputOutputArray |
mask
=
noArray() |
||
) |
推定された本質的な行列と2つの画像中の対応する点から,カメラの相対的な回転と並進をcheirality checkを用いて復元します.チェックに合格したインライアの数を返します。
E | 入力となる必須行列. |
points1 | 1枚目の画像から得られたN個の2次元点の配列.点の座標は,浮動小数点(単精度または倍精度)でなければなりません. |
points2 | points1 と同じサイズと形式の,2 番目の画像の点の配列. |
cameraMatrix | カメラ固有の行列![]() |
R | 回転行列を出力します.この行列は,並進ベクトルと一緒に,1番目のカメラの座標系から2番目のカメラの座標系への基底変更を行うタプルを構成します.なお,一般に,このタプルには t を使うことはできませんが,後述のパラメータを参照してください. |
t | 出力並進ベクトル.このベクトルは次の式で得られます.decomposeEssentialMatつまり,t は並進ベクトルの方向であり,単位長さを持っています. |
mask | point1とpoint2のインライアに対する入出力マスク。これが空でない場合,与えられた必須行列Eに対して,point1とpoint2のインライアをマークします.これらのインライアのみが,ポーズの復元に使用されます.出力マスクには、キラリティ・チェックに合格したインライアのみが表示されます。 |
この関数は,以下を用いて本質的な行列を分解しdecomposeEssentialMatを用いて本質的な行列を分解した後,cheirality checkを行って,可能なポーズ仮説を検証します.cheirality checkとは,三角測量された3次元点が正の深度を持つことを意味します.詳細は以下を参照してください.[Nister03]..
この関数は,次のような出力Eとマスクの処理に利用できます.findEssentialMat. このシナリオでは,point1 と points2 は,次のような同じ入力です.findEssentialMat:
CV_EXPORTS_W int cv::recoverPose | ( | InputArray | E, |
InputArray | points1, | ||
InputArray | points2, | ||
OutputArray | R, | ||
OutputArray | t, | ||
double |
focal
=
1.0 ,
|
||
Point2d |
pp
=
Point2d(0, 0) ,
|
||
InputOutputArray |
mask
=
noArray() |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
E | 入力となる必須行列. |
points1 | 1枚目の画像から得られたN個の2次元点の配列.点の座標は,浮動小数点(単精度または倍精度)でなければなりません. |
points2 | points1 と同じサイズと形式の,2 番目の画像の点の配列. |
R | 出力される回転行列.この行列は,並進ベクトルとともに,第1のカメラの座標系から第2のカメラの座標系への基底変更を行うタプルを構成する.一般的に、このタプルにtは使用できないことに注意してください、下記のパラメータの説明を参照してください。 |
t | 出力並進ベクトル.このベクトルは次の式で得られます.decomposeEssentialMatつまり,t は並進ベクトルの方向であり,単位長さを持っています. |
focal | カメラの焦点距離.なお,この関数は,点1と点2が,同じ焦点距離と主点を持つカメラから得られた特徴点であることを仮定しています. |
pp | カメラの主点。 |
mask | point1とpoint2のインライアに対する入出力マスク。これが空でない場合,与えられた必須行列Eに対して,point1とpoint2のインライアをマークします.これらのインライアのみが,ポーズの復元に使用されます.出力マスクには、キラリティ・チェックに合格したインライアのみが表示されます。 |
この関数は,上述のものとは異なり,焦点距離と主点からカメラの内部行列を求めます.
CV_EXPORTS_W void cv::reprojectImageTo3D | ( | InputArray | disparity, |
OutputArray | _3dImage, | ||
InputArray | Q, | ||
bool |
handleMissingValues
=
false ,
|
||
int |
ddepth
=
-1 |
||
) |
視差画像を3次元空間に再投影します.
disparity | 入力 シングルチャンネルの,8ビット符号なし,16ビット符号あり,32ビット符号あり,または32ビット浮動小数点の視差画像.8bit / 16bit 符号付きフォーマットの値は,小数ビットを持たないと仮定されます。で計算された16ビット符号付きフォーマットの視差であれば,それはStereoBMまたはStereoSGBMやその他のアルゴリズムで計算された16ビット符号付き視差の場合,ここで使用する前に,16で割って(floatにスケーリングして)おく必要があります. |
_3dImage | 視差と同じサイズの,3チャンネル浮動小数点型画像を出力します._3dImage(x,y) の各要素には,視差マップから計算された点 (x,y) の3次元座標が入ります.で得られたQを利用する場合はstereoRectifyで得られるQを用いると,返される点は1台目のカメラの平行移動座標系で表されます. |
Q |
![]() |
handleMissingValues | この関数が,欠損値(つまり,視差が計算されなかった点)を扱うべきかどうかを示します.handleMissingValues=true の場合,外れ値に対応する最小の視差を持つピクセル(seeStereoMatcher::computeを参照してください)は,非常に大きなZ値(現在は10000に設定されています)を持つ3次元点に変換されます. |
ddepth | オプションである出力配列の depth を指定します.これが -1 の場合,出力画像の深度は CV_32F になります. ddepth は, CV_16S, CV_32S, CV_32F に設定することもできます. |
この関数は,シングルチャンネルの視差マップを,3次元表面を表す3チャンネルの画像に変換します.つまり,各ピクセル (x,y) と,それに対応する視差 d=disparity(x,y) に対して,次のような計算を行います.
CV_EXPORTS_W void cv::Rodrigues | ( | InputArray | src, |
OutputArray | dst, | ||
OutputArray |
jacobian
=
noArray() |
||
) |
回転行列を回転ベクトルに変換したり,逆に回転行列を回転ベクトルに変換したりします.
src | 入力回転ベクトル(3x1または1x3)または回転行列(3x3)。 |
dst | それぞれ、回転行列(3x3)または回転ベクトル(3x1 または 1x3)を出力します。 |
jacobian | オプションの出力ジャコビアン行列(3x9 または 9x3)。これは、入力配列成分に対する出力配列成分の偏微分の行列です。 |
以下の理由により,逆変換も簡単に行うことができます.
回転ベクトルは、回転行列を簡便かつコンパクトに表現したものです(どの回転行列も3つの自由度しか持たないため)。この表現は、次のようなグローバルな3D形状最適化手順で使用されます。calibrateCamera,stereoCalibrateやsolvePnP.
CV_EXPORTS_W Vec3d cv::RQDecomp3x3 | ( | InputArray | src, |
OutputArray | mtxR, | ||
OutputArray | mtxQ, | ||
OutputArray |
Qx
=
noArray() ,
|
||
OutputArray |
Qy
=
noArray() ,
|
||
OutputArray |
Qz
=
noArray() |
||
) |
3x3 行列の RQ 分解を計算します。
src | 3x3の入力行列。 |
mtxR | 出力 3x3 上三角行列。 |
mtxQ | 出力 3x3 直交行列。 |
Qx | オプションで、3x3 の x 軸周りの回転行列を出力します。 |
Qy | オプションで出力される 3x3 の y 軸周りの回転行列 |
Qz | オプションで,3x3 の z-軸周りの回転行列を出力します. |
この関数は,与えられた回転を用いて RQ 分解を行います.この関数はdecomposeProjectionMatrixで使用され,射影行列の左3x3部分行列をカメラ行列と回転行列に分解します.
また,オプションとして,各軸ごとに1つずつ,計3つの回転行列と,OpenGLで利用可能な3つのオイラー角を(戻り値として)返します.なお、オブジェクトの向きが同じになるような3つの主軸を中心とした回転のシーケンスは、常に1つ以上存在します。[スラボー】を参照してください。]. 返された木の回転行列とそれに対応する3つのオイラー角は、可能な解決策の1つに過ぎません。
CV_EXPORTS_W double cv::sampsonDistance | ( | InputArray | pt1, |
InputArray | pt2, | ||
InputArray | F | ||
) |
2点間のSampson距離を計算します.
この関数はcv::sampsonDistanceは,幾何学的誤差の一次近似値を計算し,それを返します.
この基本行列は,関数findFundamentalMat関数を用いて計算できます.詳細は[HartleyZ00].11.4.3 を参照してください.
pt1 | 第1の同次2次元点 |
pt2 | 第2同次2次元点 |
F | 基本行列 |
CV_EXPORTS_W int cv::solveP3P | ( | InputArray | objectPoints, |
InputArray | imagePoints, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
OutputArrayOfArrays | rvecs, | ||
OutputArrayOfArrays | tvecs, | ||
int | flags | ||
) |
3 つの 3D-2D 点の対応関係から,物体の姿勢を求めます.
objectPoints | 3x3 1-channel または 1x3/3x1 3-channel の,物体座標空間における物体点の配列. |
imagePoints | 3x2 1ch または 1x3/3x1 2ch の,対応する画像上の点の配列. |
cameraMatrix | 入力されるカメラ固有の行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
rvecs | 出力される回転ベクトル(参考Rodriguesを参照してください)を出力します.これは,tvecsと一緒に,点をモデル座標系からカメラ座標系に移動させます.P3P問題は最大で4つの解を持ちます。 |
tvecs | 並進ベクトルの出力。 |
flags | P3P問題の解法。
|
この関数は,3つの物体点と,それらに対応する画像投影,さらにカメラの固有行列と歪み係数が与えられた場合に,物体の姿勢を推定します.
CV_EXPORTS_W bool cv::solvePnP | ( | InputArray | objectPoints, |
InputArray | imagePoints, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
OutputArray | rvec, | ||
OutputArray | tvec, | ||
bool |
useExtrinsicGuess
=
false ,
|
||
int |
flags
=
SOLVEPNP_ITERATIVE |
||
) |
3次元と2次元の点の対応関係から,物体の姿勢を求めます.この関数は,物体座標フレームで表現された3次元点をカメラ座標フレームに変換する回転ベクトルと並進ベクトルを,異なる手法で返します.
objectPoints | オブジェクト座標空間におけるオブジェクトポイントの配列,Nx3 1ch または 1xN/Nx1 3ch,ここで N はポイント数を表す. |
imagePoints | 対応する画像上の点の配列,Nx2 1ch または 1xN/Nx1 2ch,ここで N は点の数を表します. |
cameraMatrix | 入力されるカメラ固有の行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
rvec | 出力される回転ベクトル(以下のRodriguestvecと一緒に、モデル座標系からカメラ座標系へと点を移動させる。 |
tvec | 並進ベクトルを出力します. |
useExtrinsicGuess | SOLVEPNP_ITERATIVEに使われるパラメータです。true (1) の場合、この関数は与えられた rvec と tvec の値をそれぞれ回転ベクトルと並進ベクトルの初期近似値として使用し、さらにそれらを最適化します。 |
flags | PnP問題の解法。
|
この関数は,物体の点の集合と,それに対応する画像投影,さらにカメラの固有行列と歪み係数が与えられた場合に,物体の姿勢を推定します(より正確には,カメラフレームのX軸が右向き,Y軸が下向き,Z軸が前向き).
ワールドフレームで表現された点ワールドフレームで表現された点は、透視投影モデルを用いて、画像平面に
透視投影モデル
とカメラ固有のパラメータ行列
:
これにより、推定されたポーズは、回転(rvec
) および並進 (tvec
)ベクトルであり,ワールドフレームで表現された3次元点をカメラフレームに変換することができる.
useExtrinsicGuess=true
を使用した場合,最小点数は3である(ポーズを計算するには3点で十分だが,最大4つの解がある).収束させるためには、初期解をグローバル解に近づける必要があります。CV_EXPORTS_W int cv::solvePnPGeneric | ( | InputArray | objectPoints, |
InputArray | imagePoints, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
OutputArrayOfArrays | rvecs, | ||
OutputArrayOfArrays | tvecs, | ||
bool |
useExtrinsicGuess
=
false ,
|
||
SolvePnPMethod |
flags
=
SOLVEPNP_ITERATIVE ,
|
||
InputArray |
rvec
=
noArray() ,
|
||
InputArray |
tvec
=
noArray() ,
|
||
OutputArray |
reprojectionError
=
noArray() |
||
) |
3D-2D点の対応関係から物体のポーズを見つけます.この関数は,入力点の数と選択された手法に応じて,可能性のあるすべての解のリストを返します(解とは,<回転ベクトル,並進ベクトル>のカップルです).
objectPoints | オブジェクト座標空間におけるオブジェクトポイントの配列,Nx3 1ch または 1xN/Nx1 3ch,ここで N はポイント数を表す. |
imagePoints | 対応する画像上の点の配列,Nx2 1ch または 1xN/Nx1 2ch,ここで N は点の数を表します. |
cameraMatrix | 入力されるカメラ固有の行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
rvecs | 出力回転ベクトルのベクトル(参照Rodriguesを参照).これは, tvecs と共に,点をモデル座標系からカメラ座標系に移動させるものである. |
tvecs | 並進ベクトルの出力ベクトル. |
useExtrinsicGuess | SOLVEPNP_ITERATIVEに使われるパラメータです。true (1) の場合、この関数は与えられた rvec と tvec の値をそれぞれ回転ベクトルと並進ベクトルの初期近似値として使用し、さらにそれらを最適化します。 |
flags | PnP問題の解法。
|
rvec | flag が SOLVEPNP_ITERATIVE で useExtrinsicGuess が true に設定されている場合に、反復 PnP 精製アルゴリズムを初期化するために使用される回転ベクトル。 |
tvec | flag が SOLVEPNP_ITERATIVE で useExtrinsicGuess が true に設定されている場合に、 反復 PnP 精製アルゴリズムの初期化に使用される Translation ベクトル。 |
reprojectionError | オプションで,再投影誤差のベクトルを指定します.![]() |
この関数は,物体の点の集合と,それに対応する画像投影,さらにカメラの固有行列と歪み係数が与えられた場合に,物体の姿勢を推定します(より正確には,カメラフレームのX軸が右向き,Y軸が下向き,Z軸が前向き).
ワールドフレームで表現された点ワールドフレームで表現された点は、透視投影モデルを用いて、画像平面に
透視投影モデル
とカメラ固有のパラメータ行列
:
これにより、推定されたポーズは、回転(rvec
) および並進 (tvec
)ベクトルであり,ワールドフレームで表現された3次元点をカメラフレームに変換することができる.
useExtrinsicGuess=true
を使用した場合,最小点数は3である(ポーズを計算するには3点で十分だが,最大4つの解がある).収束させるためには、初期解をグローバル解に近づける必要があります。CV_EXPORTS_W bool cv::solvePnPRansac | ( | InputArray | objectPoints, |
InputArray | imagePoints, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
OutputArray | rvec, | ||
OutputArray | tvec, | ||
bool |
useExtrinsicGuess
=
false ,
|
||
int |
iterationsCount
=
100 ,
|
||
float |
reprojectionError
=
8.0 ,
|
||
double |
confidence
=
0.99 ,
|
||
OutputArray |
inliers
=
noArray() ,
|
||
int |
flags
=
SOLVEPNP_ITERATIVE |
||
) |
RANSAC スキームを用いて,3D-2D 点の対応関係から物体のポーズを求めます.
objectPoints | オブジェクト座標空間におけるオブジェクトポイントの配列,Nx3 1ch または 1xN/Nx1 3ch,ここで N はポイント数を表す. |
imagePoints | 対応する画像上の点の配列,Nx2 1ch または 1xN/Nx1 2ch,ここで N は点の数を表します. |
cameraMatrix | 入力されるカメラ固有の行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
rvec | 出力される回転ベクトル(以下のRodriguestvecと一緒に、モデル座標系からカメラ座標系へと点を移動させる。 |
tvec | 並進ベクトルを出力します. |
useExtrinsicGuess | SOLVEPNP_ITERATIVE で利用されるパラメータ.真(1)の場合,この関数は,与えられた rvec と tvec の値を,それぞれ回転ベクトルと並進ベクトルの初期近似値として利用し,さらにそれらを最適化します. |
iterationsCount | イタレーションの回数. |
reprojectionError | RANSAC手順で使用されるインライアの閾値.このパラメータ値は,観測された点の投影と計算された点の投影の間で,それをインライアとみなすために許容される最大の距離です. |
confidence | アルゴリズムが有用な結果を生成する確率. |
inliers | objectPoints と imagePoints に含まれるインライアのインデックスを含む出力ベクトル. |
flags | PnP問題を解くための手法(参照solvePnP). |
この関数は,オブジェクトポイントの集合と,それに対応する画像投影,さらにカメラの固有行列と歪み係数が与えられた場合に,オブジェクトのポーズを推定します.この関数は,再投影誤差,つまり,観測された投影像 imagePoints と,投影された(次の方法で)objectPoints との間の二乗距離の総和を最小にするようなポーズを求めます.projectPointsを用いて)投影されたobjectPoints間の二乗距離の合計です.RANSAC を用いることで,この関数は外れ値に強くなります.
CV_EXPORTS_W void cv::solvePnPRefineLM | ( | InputArray | objectPoints, |
InputArray | imagePoints, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
InputOutputArray | rvec, | ||
InputOutputArray | tvec, | ||
TermCriteria |
criteria
=
TermCriteria(TermCriteria::EPS+TermCriteria::COUNT, 20, FLT_EPSILON) |
||
) |
3D-2D点の対応関係から、初期解からポーズ(オブジェクト座標フレームで表現された3D点をカメラ座標フレームに変換する移動と回転)を絞り込む。
objectPoints | オブジェクト座標空間におけるオブジェクトポイントの配列,Nx3 1ch または 1xN/Nx1 3ch(Nはポイント数). |
imagePoints | 対応する画像上の点の配列,Nx2 1ch または 1xN/Nx1 2ch (N は点の数). |
cameraMatrix | 入力されるカメラ固有の行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
rvec | 入出力される回転ベクトル(参照Rodrigues)は,tvecと一緒に,点をモデル座標系からカメラ座標系に移動させます.入力値は、初期解として使用されます。 |
tvec | 入力/出力の並進ベクトル。入力値は初期解として使用されます。 |
criteria | Levenberg-Marquard 反復アルゴリズムをいつ停止するかの基準. |
この関数は,少なくとも3つの物体点と,それらに対応する画像投影点,回転ベクトルと並進ベクトルの初期解,そしてカメラの固有行列と歪み係数が与えられた場合に,物体の姿勢を修正します.この関数は,Levenberg-Marquardtの反復最小化法に従って,回転ベクトルと並進ベクトルに対する投影誤差を最小化します.[Madsen04] 。 [Eade13] 。プロセスを用いています。
CV_EXPORTS_W void cv::solvePnPRefineVVS | ( | InputArray | objectPoints, |
InputArray | imagePoints, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
InputOutputArray | rvec, | ||
InputOutputArray | tvec, | ||
TermCriteria |
criteria
=
TermCriteria(TermCriteria::EPS+TermCriteria::COUNT, 20, FLT_EPSILON) ,
|
||
double |
VVSlambda
=
1 |
||
) |
3D-2D点の対応関係から、初期解からポーズ(オブジェクト座標フレームで表現された3D点をカメラ座標フレームに変換する移動と回転)を絞り込む。
objectPoints | オブジェクト座標空間におけるオブジェクトポイントの配列,Nx3 1ch または 1xN/Nx1 3ch(Nはポイント数). |
imagePoints | 対応する画像上の点の配列,Nx2 1ch または 1xN/Nx1 2ch (N は点の数). |
cameraMatrix | 入力されるカメラ固有の行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
rvec | 入出力される回転ベクトル(参照Rodrigues)は,tvecと一緒に,点をモデル座標系からカメラ座標系に移動させます.入力値は、初期解として使用されます。 |
tvec | 入力/出力の並進ベクトル。入力値は初期解として使用されます。 |
criteria | Levenberg-Marquard 反復アルゴリズムをいつ停止するかの基準. |
VVSlambda | 仮想視覚サーボ制御則のゲイン。![]() |
この関数は,少なくとも3つの物体点と,それらに対応する画像投影,回転ベクトルと並進ベクトルの初期解,さらにカメラの固有行列と歪み係数が与えられた場合に,物体の姿勢を修正します.この関数は,仮想ビジュアルサーボ(VVS)を用いて,回転ベクトルと並進ベクトルに対する投影誤差を最小化します.[Chaumette06] 。 [Marchand16]スキームを利用しています.
CV_EXPORTS_W void cv::stereoRectify | ( | InputArray | cameraMatrix1, |
InputArray | distCoeffs1, | ||
InputArray | cameraMatrix2, | ||
InputArray | distCoeffs2, | ||
Size | imageSize, | ||
InputArray | R, | ||
InputArray | T, | ||
OutputArray | R1, | ||
OutputArray | R2, | ||
OutputArray | P1, | ||
OutputArray | P2, | ||
OutputArray | Q, | ||
int |
flags
=
CALIB_ZERO_DISPARITY ,
|
||
double |
alpha
=
-1 ,
|
||
Size |
newImageSize
=
Size() ,
|
||
CV_OUT Rect * |
validPixROI1
=
0 ,
|
||
CV_OUT Rect * |
validPixROI2
=
0 |
||
) |
キャリブレーションされたステレオカメラの各ヘッドに対して,平行化変換を計算します.
cameraMatrix1 | 1台目のカメラの固有マトリクス. |
distCoeffs1 | 第1カメラの歪みパラメータ. |
cameraMatrix2 | 第2カメラの固有マトリクス. |
distCoeffs2 | 第二カメラの歪みパラメータ |
imageSize | ステレオキャリブレーションに使われる画像のサイズ. |
R | 第一カメラの座標系から第二カメラへの回転行列(参照stereoCalibrate. |
T | 1 台目のカメラの座標系から 2 台目のカメラへの並進ベクトル(参照stereoCalibrate. |
R1 | 1台目のカメラに対する3x3の平行化変換(回転行列)を出力。この行列は,補正されていない第1のカメラの座標系で与えられた点を,補正された第1のカメラの座標系で与えられた点に変換するものである.専門的に言えば、修正されていない第1カメラの座標系から修正された第1カメラの座標系への基底変更を行います。 |
R2 | 2台目のカメラに対する3x3の平行化変換(回転行列)を出力.この行列は、補正されていない2台目のカメラの座標系で与えられた点を、補正された2台目のカメラの座標系の点にするものです。専門的に言えば、修正されていない2台目のカメラの座標系から、修正された2台目のカメラの座標系への基底変更を行います。 |
P1 | 1台目のカメラの新しい(平行化された)座標系に3x4の射影行列を出力する。つまり、平行化された1台目のカメラの座標系で与えられた点を、平行化された1台目のカメラの画像に投影する。 |
P2 | 2台目のカメラの新しい(平行化された)座標系に3x4の射影行列を出力.すなわち,平行化された1台目のカメラの座標系で与えられた点を平行化された2台目のカメラの画像に射影する. |
Q | 出力![]() |
flags | 操作フラグには,0または CALIB_ZERO_DISPARITY が指定されます.このフラグがセットされている場合,この関数は,各カメラの主点が,平行化されたビューにおいて同じピクセル座標になるようにします.また,このフラグが設定されていない場合でも,有用な画像領域を最大化するために,(エピポーララインの向きに応じて)水平または垂直方向に画像を移動させることができます. |
alpha | フリースケーリングパラメータ.これが-1または存在しない場合,この関数はデフォルトのスケーリングを行います.alpha=0 は,有効なピクセルのみが見えるように,平行化された画像がズームおよびシフトされることを意味します(平行化後に黒い部分がない). alpha=1 は,カメラからのオリジナル画像のすべてのピクセルが平行化された画像に保持されるように,平行化された画像がデシメーションおよびシフトされることを意味します(ソース画像のピクセルは失われません).中間的な値を設定すると、これら2つの極端なケースの中間的な結果が得られます。 |
newImageSize | 整形後の新しい画像の解像度。には,同じサイズを渡す必要があります.initUndistortRectifyMap(には,同じサイズを渡す必要があります(OpenCV samples ディレクトリにある stereo_calib.cpp サンプルを参照してください).(0,0) が渡された場合(デフォルト),それは元の imageSize に設定されます.より大きな値を設定することで,特に大きな放射状の歪みがある場合に,元の画像の詳細を保持することができます. |
validPixROI1 | オプションで,平行化された画像の内側に,すべてのピクセルが有効な矩形を出力します.alpha=0 の場合,ROI は画像全体をカバーします.そうでない場合は,より小さな領域となります(下図を参照してください). |
validPixROI2 | オプションで,平行化された画像の内側に,すべてのピクセルが有効な矩形を出力します.alpha=0 の場合,ROI は画像全体をカバーします.そうでない場合は,より小さな領域となります(下図を参照してください). |
この関数は,各カメラの回転行列を計算し,両カメラの画像平面を(仮想的に)同一平面にします.その結果,すべてのエピポーラ線が平行になり,密なステレオ対応関係の問題が簡単になります.この関数は,次式で求められた行列を入力としますstereoCalibrateによって計算された行列を入力とします.出力として,2つの回転行列と,新しい座標への2つの投影行列が与えられます.この関数は,以下の2つのケースを区別します.
水平ステレオ:1番目と2番目のカメラのビューが,主にX軸に沿って相対的に移動します(わずかな垂直方向の移動もあり得ます).整形された画像では,左右のカメラの対応するエピポーラ線は水平で,同じ y 座標を持ちます.P1とP2は次のようになります。
ここではカメラ間の水平方向のずれであり
CALIB_ZERO_DISPARITY が設定されている場合は、次のようになります。
垂直方向のステレオ1台目のカメラと2台目のカメラの映像が、主に垂直方向に(おそらく水平方向にも少し)相対的にずれている場合。整形された画像のエピポーララインは垂直で,同じ x 座標を持ちます.P1とP2は次のようになります。
ここでは、カメラ間の垂直方向のずれと
CALIB_ZERO_DISPARITY が設定されている場合は、次のようになります。
ご覧のように、P1とP2の最初の3列は、事実上、新しい「平行化された」カメラ行列となります。この行列は,R1 と R2 と共にinitUndistortRectifyMapに渡し、各カメラの平行化マップを初期化します。
下の図は,stereo_calib.cpp のサンプルのスクリーンショットです.いくつかの赤い水平線が,対応する画像領域を通過しています.これは,画像がよく平行化されていることを意味しており,ほとんどのステレオ対応付けアルゴリズムがこれに依存しています.緑色の四角形は, roi1 と roi2 です.これらの内部は,すべて有効なピクセルであることがわかります.
CV_EXPORTS_W bool cv::stereoRectifyUncalibrated | ( | InputArray | points1, |
InputArray | points2, | ||
InputArray | F, | ||
Size | imgSize, | ||
OutputArray | H1, | ||
OutputArray | H2, | ||
double |
threshold
=
5 |
||
) |
キャリブレーションされていないステレオカメラに対して,平行化変換を計算します.
points1 | 1枚目の画像における特徴点の配列. |
points2 | 2枚目の画像における対応する点の配列.と同じフォーマットがサポートされています.findFundamentalMatと同じ形式がサポートされています. |
F | 入力基本行列.を使って,同じ点のペアのセットから計算することができます.findFundamentalMat. |
imgSize | 画像のサイズ. |
H1 | 1枚目の画像に対する平行化ホモグラフィ行列の出力. |
H2 | 2番目の画像に対する平行化ホモグラフィ行列の出力. |
threshold | 外れ値を除外するために用いられるオプションの閾値.このパラメータが0よりも大きい場合,エピポーラ幾何学に従わないすべての点のペア(つまり,次のような点)は,計算前に拒否されます.![]() |
この関数は,カメラの固有のパラメータや空間内の相対的な位置を知らずに,平行化変換を計算するため,"uncalibrated "という接尾辞が付きます.との関連したもう1つの違いは,この関数が出力するのはstereoRectifyとのもう1つの違いは,この関数が物体(3次元)空間における平行化変換ではなく,ホモグラフィ行列 H1 と H2 によって符号化された平面透視変換を出力することです.この関数は,以下のアルゴリズムを実装しています[Hartley99]を参照してください..
CV_EXPORTS_W void cv::triangulatePoints | ( | InputArray | projMatr1, |
InputArray | projMatr2, | ||
InputArray | projPoints1, | ||
InputArray | projPoints2, | ||
OutputArray | points4D | ||
) |
この関数は,ステレオカメラによる観測結果を用いて,3 次元の点(同次座標)を再構成します.
projMatr1 | 1台目のカメラの3x4投影行列.つまり,この行列は,世界座標系で与えられた3次元点を1枚目の画像に投影します. |
projMatr2 | 2 台目のカメラの 3x4 投影行列.すなわち,この行列は,世界の座標系で与えられた 3D 点を 2 番目の画像に投影する. |
projPoints1 | 1枚目の画像における特徴点の2xN配列.c++ バージョンの場合は,特徴点のベクトルや,サイズが 1xN または Nx1 の 2 チャンネル行列を指定することもできます. |
projPoints2 | 2枚目の画像に含まれる特徴点の2xN配列.c++版の場合は,特徴点のベクトルや,サイズが1xNまたはNx1の2チャンネルの行列でもよい. |
points4D | 同次座標系で再構成された点の 4xN 個の配列.これらの点は,世界の座標系で返されます. |
CV_EXPORTS_W void cv::undistort | ( | InputArray | src, |
OutputArray | dst, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
InputArray |
newCameraMatrix
=
noArray() |
||
) |
レンズの歪みを補正するために,画像を変換します.
この関数は,半径方向と接線方向のレンズ歪みを補正するために,画像を変換します.
この関数は,単純に以下の組み合わせですinitUndistortRectifyMap(単一のRを持つ) とremap(バイリニア補間) を組み合わせたものです.実行される変換の詳細については,前者の関数を参照してください。
ソース画像に対応するピクセルが存在しないデスティネーション画像のピクセルは,ゼロ(黒色)で埋められます.
補正後の画像に表示されるソース画像の特定のサブセットは,newCameraMatrix で指定することができます.を使えばgetOptimalNewCameraMatrixを使って,必要に応じて適切な newCameraMatrix を計算することができます.
カメラ行列と歪みパラメータは,次のようにして求めることができます.calibrateCamera. 画像の解像度がキャリブレーション段階で使用された解像度と異なる場合,それに応じてスケーリングする必要があります.および
は,それに応じてスケーリングする必要がありますが,歪み係数はそのままです.
src | 入力(歪んだ)画像。 |
dst | src と同じサイズ,同じ種類の出力(補正された)画像. |
cameraMatrix | 入力カメラ行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
newCameraMatrix | 歪み補正された画像のカメラ行列.デフォルトでは, cameraMatrix と同じですが,別の行列を利用して,結果を追加でスケーリングやシフトすることもできます. |
void cv::undistortPoints | ( | InputArray | src, |
OutputArray | dst, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
InputArray | R, | ||
InputArray | P, | ||
TermCriteria | criteria | ||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
CV_EXPORTS_W void cv::undistortPoints | ( | InputArray | src, |
OutputArray | dst, | ||
InputArray | cameraMatrix, | ||
InputArray | distCoeffs, | ||
InputArray |
R
=
noArray() ,
|
||
InputArray |
P
=
noArray() |
||
) |
観測された点の座標から,理想的な点の座標を計算します.
この関数は,以下のものと似ています.undistortおよびinitUndistortRectifyMapと似ていますが,ラスタ画像ではなく,疎な点の集合を操作します.また,この関数は,次のような逆変換を行いますprojectPoints. 3次元物体の場合は,その3次元座標を再構成しませんが,平面物体の場合は,適切なRが指定されていれば,平行移動ベクトルまで再構成します.
観測された各点の座標この関数は,次のように計算します.
ここでアンディストートは,正規化された歪んだ点座標から,正規化された元の点座標を推定する近似的な反復アルゴリズムです(「正規化」とは,座標がカメラ行列に依存しないことを意味します).
この関数は,ステレオカメラヘッドでも単眼カメラでも使用できます(R が空の場合).
src | 観測された点座標,2xN/Nx2 1チャンネル または 1xN/Nx1 2チャンネル (CV_32FC2 または CV_64FC2) (または vector<Point2f> ). |
dst | 歪み補正と逆透視変換を行った理想的な点座標(1xN/Nx1 2ch または vector<Point2f> )を出力します.行列 P が恒等式または省略された場合,dst には正規化された点座標が格納されます. |
cameraMatrix | カメラ行列![]() |
distCoeffs | 入力 歪み係数のベクトル![]() |
R | 物体空間における平行化変換(3x3 の行列).で計算された R1 または R2 をここに渡すことができます.stereoRectifyをここに渡すことができます.行列が空の場合は,恒等変換が用いられます. |
P | 新しいカメラ行列(3x3),または新しい投影行列(3x4).![]() |
InputArrayOfArrays InputArrayOfArrays InputOutputArray InputOutputArray InputOutputArray InputOutputArray Size InputOutputArray InputOutputArray OutputArray OutputArray OutputArray int TermCriteria cv::criteria |