OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。

詳細説明

定義: P をワールド基準フレームにおける座標 X の3D点とする (行列 X に格納される)。カメラ基準フレームにおける P の座標ベクトルは次のとおり:

\[Xc = R X + T\]

ここで R は回転ベクトル om に対応する回転行列である: R = rodrigues(om); Xc の3つの座標を x, y, z とする:

\[\begin{array}{l} x = Xc_1 \\ y = Xc_2 \\ z = Xc_3 \end{array} \]

P のピンホール投影座標は [a; b] であり、ここで

\[\begin{array}{l} a = x / z \ and \ b = y / z \\ r^2 = a^2 + b^2 \\ \theta = atan(r) \end{array} \]

魚眼歪み:

\[\theta_d = \theta (1 + k_1 \theta^2 + k_2 \theta^4 + k_3 \theta^6 + k_4 \theta^8)\]

歪んだ点の座標は [x'; y'] であり、ここで

\[\begin{array}{l} x' = (\theta_d / r) a \\ y' = (\theta_d / r) b \end{array} \]

最後にピクセル座標への変換: 最終的なピクセル座標ベクトル [u; v] は次のとおり:

\[\begin{array}{l} u = f_x (x' + \alpha y') + c_x \\ v = f_y y' + c_y \end{array} \]

概要: 透視投影を用い歪み補正を行わない汎用カメラモデル [148]

名前空間

namespace  cv::fisheye
 この名前空間のメソッドは、いわゆる魚眼カメラモデルを用いる。
 

列挙型

enum  {
  cv::fisheye::CALIB_USE_INTRINSIC_GUESS = 1 << 0 ,
  cv::fisheye::CALIB_RECOMPUTE_EXTRINSIC = 1 << 1 ,
  cv::fisheye::CALIB_CHECK_COND = 1 << 2 ,
  cv::fisheye::CALIB_FIX_SKEW = 1 << 3 ,
  cv::fisheye::CALIB_FIX_K1 = 1 << 4 ,
  cv::fisheye::CALIB_FIX_K2 = 1 << 5 ,
  cv::fisheye::CALIB_FIX_K3 = 1 << 6 ,
  cv::fisheye::CALIB_FIX_K4 = 1 << 7 ,
  cv::fisheye::CALIB_FIX_INTRINSIC = 1 << 8 ,
  cv::fisheye::CALIB_FIX_PRINCIPAL_POINT = 1 << 9 ,
  cv::fisheye::CALIB_ZERO_DISPARITY = 1 << 10 ,
  cv::fisheye::CALIB_FIX_FOCAL_LENGTH = 1 << 11
}
 

関数

double cv::fisheye::calibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, const Size &image_size, InputOutputArray K, InputOutputArray D, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON))
 カメラキャリブレーションを実行する。
 
void cv::fisheye::distortPoints (InputArray undistorted, OutputArray distorted, InputArray K, InputArray D, double alpha=0)
 魚眼モデルを用いて2D点を歪ませる。
 
void cv::fisheye::distortPoints (InputArray undistorted, OutputArray distorted, InputArray Kundistorted, InputArray K, InputArray D, double alpha=0)
 
void cv::fisheye::estimateNewCameraMatrixForUndistortRectify (InputArray K, InputArray D, const Size &image_size, InputArray R, OutputArray P, double balance=0.0, const Size &new_size=Size(), double fov_scale=1.0)
 歪み補正または平行化のための新しいカメラ内部行列を推定する。
 
void cv::fisheye::initUndistortRectifyMap (InputArray K, InputArray D, InputArray R, InputArray P, const cv::Size &size, int m1type, OutputArray map1, OutputArray map2)
 remap による画像変換のための歪み補正・平行化マップを計算する。D が空の場合は歪みなしが用いられ、R または P が空の場合は単位行列が用いられる。
 
void cv::fisheye::projectPoints (InputArray objectPoints, OutputArray imagePoints, const Affine3d &affine, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
 魚眼モデルを用いて点を投影する。
 
void cv::fisheye::projectPoints (InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
 
bool cv::fisheye::solvePnP (InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int flags=SOLVEPNP_ITERATIVE, TermCriteria criteria=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8))
 魚眼カメラモデルにおいて、3D-2D点の対応から物体の姿勢を求める。
 
bool cv::fisheye::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, TermCriteria criteria=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8))
 魚眼カメラモデルにおいて、RANSAC手法を用いて3D-2D点の対応から物体の姿勢を求める。
 
double cv::fisheye::stereoCalibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray K1, InputOutputArray D1, InputOutputArray K2, InputOutputArray D2, Size imageSize, OutputArray R, OutputArray T, int flags=fisheye::CALIB_FIX_INTRINSIC, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON))
 これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは受け取る引数のみが異なる。
 
double cv::fisheye::stereoCalibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray K1, InputOutputArray D1, InputOutputArray K2, InputOutputArray D2, Size imageSize, OutputArray R, OutputArray T, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=fisheye::CALIB_FIX_INTRINSIC, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON))
 ステレオキャリブレーションを実行する。
 
void cv::fisheye::stereoRectify (InputArray K1, InputArray D1, InputArray K2, InputArray D2, const Size &imageSize, InputArray R, InputArray tvec, OutputArray R1, OutputArray R2, OutputArray P1, OutputArray P2, OutputArray Q, int flags, const Size &newImageSize=Size(), double balance=0.0, double fov_scale=1.0)
 魚眼カメラモデルのためのステレオ平行化。
 
void cv::fisheye::undistortImage (InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray Knew=cv::noArray(), const Size &new_size=Size())
 魚眼レンズの歪みを補正するために画像を変換する。
 
void cv::fisheye::undistortPoints (InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray R=noArray(), InputArray P=noArray(), TermCriteria criteria=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8))
 魚眼モデルを用いて2D点の歪みを補正する。
 

列挙型詳解

◆ anonymous enum

anonymous enum

#include <opencv2/calib3d.hpp>

列挙値
CALIB_USE_INTRINSIC_GUESS 
Python: cv.fisheye.CALIB_USE_INTRINSIC_GUESS
CALIB_RECOMPUTE_EXTRINSIC 
Python: cv.fisheye.CALIB_RECOMPUTE_EXTRINSIC
CALIB_CHECK_COND 
Python: cv.fisheye.CALIB_CHECK_COND
CALIB_FIX_SKEW 
Python: cv.fisheye.CALIB_FIX_SKEW
CALIB_FIX_K1 
Python: cv.fisheye.CALIB_FIX_K1
CALIB_FIX_K2 
Python: cv.fisheye.CALIB_FIX_K2
CALIB_FIX_K3 
Python: cv.fisheye.CALIB_FIX_K3
CALIB_FIX_K4 
Python: cv.fisheye.CALIB_FIX_K4
CALIB_FIX_INTRINSIC 
Python: cv.fisheye.CALIB_FIX_INTRINSIC
CALIB_FIX_PRINCIPAL_POINT 
Python: cv.fisheye.CALIB_FIX_PRINCIPAL_POINT
CALIB_ZERO_DISPARITY 
Python: cv.fisheye.CALIB_ZERO_DISPARITY
CALIB_FIX_FOCAL_LENGTH 
Python: cv.fisheye.CALIB_FIX_FOCAL_LENGTH

関数詳解

◆ calibrate()

double cv::fisheye::calibrate ( InputArrayOfArrays objectPoints,
InputArrayOfArrays imagePoints,
const Size & image_size,
InputOutputArray K,
InputOutputArray D,
OutputArrayOfArrays rvecs,
OutputArrayOfArrays tvecs,
int flags = 0,
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON) )
Python:
cv.fisheye.calibrate(objectPoints, imagePoints, image_size, K, D[, rvecs[, tvecs[, flags[, criteria]]]]) -> retval, K, D, rvecs, tvecs

#include <opencv2/calib3d.hpp>

カメラキャリブレーションを実行する。

引数
objectPointsキャリブレーションパターン座標空間におけるキャリブレーションパターン点のベクトルのベクトル。
imagePointsキャリブレーションパターン点の投影のベクトルのベクトル。各 i について、imagePoints.size() と objectPoints.size()、および imagePoints[i].size() は objectPoints[i].size() と等しくなければならない。
image_sizeカメラ内部行列の初期化にのみ使用される画像のサイズ。
K出力される 3x3 浮動小数点のカメラ内部行列 \(\cameramatrix{A}\) 。fisheye::CALIB_USE_INTRINSIC_GUESS が指定されている場合、関数を呼び出す前に fx, fy, cx, cy の一部またはすべてを初期化しておかなければならない。
D出力される歪み係数のベクトル \(\distcoeffsfisheye\)。
rvecs各パターンビューに対して推定された回転ベクトルの出力ベクトル (Rodrigues を参照)。すなわち、各 k 番目の回転ベクトルは、対応する k 番目の並進ベクトル (次の出力パラメータの説明を参照) と合わせて、キャリブレーションパターンをモデル座標空間 (オブジェクト点が指定されている空間) からワールド座標空間、つまり k 番目のパターンビューにおけるキャリブレーションパターンの実際の位置 (k=0.. M -1) へと移す。
tvecs各パターンビューについて推定された並進ベクトルの出力ベクトル。
flagsゼロ、または以下の値の組み合わせをとることができるさまざまなフラグ:
criteria反復最適化アルゴリズムの終了条件。
この関数の呼び出しグラフ:

◆ distortPoints() [1/2]

void cv::fisheye::distortPoints ( InputArray undistorted,
OutputArray distorted,
InputArray K,
InputArray D,
double alpha = 0 )
Python:
cv.fisheye.distortPoints(undistorted, K, D[, distorted[, alpha]]) -> distorted
cv.fisheye.distortPoints(undistorted, Kundistorted, K, D[, distorted[, alpha]]) -> distorted

#include <opencv2/calib3d.hpp>

魚眼モデルを用いて2次元点を歪ませる。

引数
undistortedオブジェクト点の配列。1xN/Nx1 の2チャンネル (または vector<Point2f> )。N はビュー内の点の数。
Kカメラ内部行列 \(\cameramatrix{K}\)。
D入力される歪み係数のベクトル \(\distcoeffsfisheye\)。
alphaスキュー係数。
distorted画像点の出力配列。1xN/Nx1 の2チャンネル、または vector<Point2f> 。

この関数は、歪みのない点に対するカメラ内部行列が単位行列であると仮定することに注意。つまり画像点を歪ませたい場合は、それらに \(K^{-1}\) を掛けるか、別のオーバーロード関数を使用する必要がある。

この関数の呼び出しグラフ:

◆ distortPoints() [2/2]

void cv::fisheye::distortPoints ( InputArray undistorted,
OutputArray distorted,
InputArray Kundistorted,
InputArray K,
InputArray D,
double alpha = 0 )
Python:
cv.fisheye.distortPoints(undistorted, K, D[, distorted[, alpha]]) -> distorted
cv.fisheye.distortPoints(undistorted, Kundistorted, K, D[, distorted[, alpha]]) -> distorted

#include <opencv2/calib3d.hpp>

これはオーバーロードされたメンバ関数であり、利便性のために提供されている。上記の関数とは受け取る引数のみが異なる。歪みのない点が単位行列でないカメラ行列で得られた場合(例えば estimateNewCameraMatrixForUndistortRectify の出力)を扱うための distortPoints 関数のオーバーロード。

引数
undistortedオブジェクト点の配列。1xN/Nx1 の2チャンネル (または vector<Point2f> )。N はビュー内の点の数。
Kundistorted歪み補正の新しいカメラ行列として使われるカメラ内部行列。
Kカメラ内部行列 \(\cameramatrix{K}\)。
D入力される歪み係数のベクトル \(\distcoeffsfisheye\)。
alphaスキュー係数。
distorted画像点の出力配列。1xN/Nx1 の2チャンネル、または vector<Point2f> 。
参照
estimateNewCameraMatrixForUndistortRectify
この関数の呼び出しグラフ:

◆ estimateNewCameraMatrixForUndistortRectify()

void cv::fisheye::estimateNewCameraMatrixForUndistortRectify ( InputArray K,
InputArray D,
const Size & image_size,
InputArray R,
OutputArray P,
double balance = 0.0,
const Size & new_size = Size(),
double fov_scale = 1.0 )
Python:
cv.fisheye.estimateNewCameraMatrixForUndistortRectify(K, D, image_size, R[, P[, balance[, new_size[, fov_scale]]]]) -> P

#include <opencv2/calib3d.hpp>

歪み補正または平行化のために新しいカメラ内部行列を推定する。

引数
Kカメラ内部行列 \(\cameramatrix{K}\)。
image_size画像のサイズ
D入力される歪み係数のベクトル \(\distcoeffsfisheye\)。
Rオブジェクト空間における平行化変換: 3x3 1チャンネル、またはベクトル: 3x1/1x3 1チャンネル、または 1x1 3チャンネル
P新しいカメラ内部行列 (3x3) または新しい射影行列 (3x4)
balance最小焦点距離と最大焦点距離の範囲内で新しい焦点距離を設定する。Balance は [0, 1] の範囲である。
new_size新しいサイズ
fov_scale新しい焦点距離の除数。
この関数の呼び出しグラフ:

◆ initUndistortRectifyMap()

void cv::fisheye::initUndistortRectifyMap ( InputArray K,
InputArray D,
InputArray R,
InputArray P,
const cv::Size & size,
int m1type,
OutputArray map1,
OutputArray map2 )
Python:
cv.fisheye.initUndistortRectifyMap(K, D, R, P, size, m1type[, map1[, map2]]) -> map1, map2

#include <opencv2/calib3d.hpp>

remap による画像変換のための歪み補正および平行化マップを計算する。D が空の場合はゼロ歪みが使用され、R または P が空の場合は単位行列が使用される。

引数
Kカメラ内部行列 \(\cameramatrix{K}\)。
D入力される歪み係数のベクトル \(\distcoeffsfisheye\)。
Rオブジェクト空間における平行化変換: 3x3 1チャンネル、またはベクトル: 3x1/1x3 1チャンネル、または 1x1 3チャンネル
P新しいカメラ内部行列 (3x3) または新しい射影行列 (3x4)
size歪み補正後の画像サイズ。
m1type1つ目の出力マップの型。CV_32FC1 または CV_16SC2 のいずれか。詳細は convertMaps を参照。
map11つ目の出力マップ。
map22つ目の出力マップ。

◆ projectPoints() [1/2]

void cv::fisheye::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
const Affine3d & affine,
InputArray K,
InputArray D,
double alpha = 0,
OutputArray jacobian = noArray() )
Python:
cv.fisheye.projectPoints(objectPoints, rvec, tvec, K, D[, imagePoints[, alpha[, jacobian]]]) -> imagePoints, jacobian

#include <opencv2/calib3d.hpp>

魚眼モデルを用いて点を投影する。

引数
objectPointsオブジェクト点の配列。1xN/Nx1 の3チャンネル (または vector<Point3f> )。N はビュー内の点の数。
imagePoints画像点の出力配列。2xN/Nx2 1チャンネル、または 1xN/Nx1 2チャンネル、または vector<Point2f>。
affine
Kカメラ内部行列 \(\cameramatrix{K}\)。
D入力される歪み係数のベクトル \(\distcoeffsfisheye\)。
alphaスキュー係数。
jacobian省略可能な出力 2Nx15 ヤコビ行列。画像点を、焦点距離の各成分、主点の座標、歪み係数、回転ベクトル、並進ベクトル、およびスキューで微分した値からなる。古いインターフェースでは、ヤコビアンの各成分は異なる出力パラメータ経由で返される。

この関数は、カメラの内部および外部パラメータが与えられたときに、3次元点の画像平面への投影を計算する。オプションで、ヤコビアン(画像点座標の、すべての入力パラメータの関数としての、特定のパラメータ(内部および/または外部)に関する偏微分の行列)も計算する。

◆ projectPoints() [2/2]

void cv::fisheye::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
InputArray rvec,
InputArray tvec,
InputArray K,
InputArray D,
double alpha = 0,
OutputArray jacobian = noArray() )
Python:
cv.fisheye.projectPoints(objectPoints, rvec, tvec, K, D[, imagePoints[, alpha[, jacobian]]]) -> imagePoints, jacobian

#include <opencv2/calib3d.hpp>

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ solvePnP()

bool cv::fisheye::solvePnP ( InputArray objectPoints,
InputArray imagePoints,
InputArray cameraMatrix,
InputArray distCoeffs,
OutputArray rvec,
OutputArray tvec,
bool useExtrinsicGuess = false,
int flags = SOLVEPNP_ITERATIVE,
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8) )
Python:
cv.fisheye.solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, flags[, criteria]]]]]) -> retval, rvec, tvec

#include <opencv2/calib3d.hpp>

魚眼カメラモデルに対して、3次元-2次元点の対応からオブジェクトの姿勢を求める。

引数
objectPoints物体座標空間における物体点の配列。Nx3 1チャンネル、または 1xN/Nx1 3チャンネル(Nは点の個数)。vector<Point3d> をここに渡すこともできる。
imagePoints対応する画像点の配列。Nx2 1チャンネル、または 1xN/Nx1 2チャンネル(Nは点の個数)。vector<Point2d> をここに渡すこともできる。
cameraMatrix入力のカメラ内部行列 \(\cameramatrix{A}\) 。
distCoeffs入力される歪み係数のベクトル (4x1/1x4)。
rvec出力される回転ベクトル (Rodrigues を参照)。tvec と合わせて、点をモデル座標系からカメラ座標系へと移す。
tvec出力の並進ベクトル。
useExtrinsicGuessSOLVEPNP_ITERATIVE に使われるパラメータ。true (1) の場合、関数は与えられた rvec と tvec の値をそれぞれ回転ベクトルと並進ベクトルの初期近似として使い、さらにそれらを最適化する。
flagsPnP問題を解くための手法。calib3d_solvePnP_flags を参照。
criteria内部の undistortPoints 呼び出しの終了条件。関数は内部で undistortPoints を使って点の歪みを補正し、cv::solvePnP を呼び出すため、入力は非常によく似ている。Perspective-n-Points についての詳しい情報は Perspective-n-Point (PnP) による姿勢推定 で説明されている。

◆ solvePnPRansac()

bool cv::fisheye::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,
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8) )
Python:
cv.fisheye.solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, iterationsCount[, reprojectionError[, confidence[, inliers[, flags[, criteria]]]]]]]]]) -> retval, rvec, tvec, inliers

#include <opencv2/calib3d.hpp>

魚眼カメラモデルに対して、RANSAC方式を用いて3次元-2次元点の対応からオブジェクトの姿勢を求める。

引数
objectPoints物体座標空間における物体点の配列。Nx3 1チャンネル、または 1xN/Nx1 3チャンネル(Nは点の個数)。vector<Point3d> をここに渡すこともできる。
imagePoints対応する画像点の配列。Nx2 1チャンネル、または 1xN/Nx1 2チャンネル(Nは点の個数)。vector<Point2d> をここに渡すこともできる。
cameraMatrix入力のカメラ内部行列 \(\cameramatrix{A}\) 。
distCoeffs入力される歪み係数のベクトル (4x1/1x4)。
rvec出力される回転ベクトル (Rodrigues を参照)。tvec と合わせて、点をモデル座標系からカメラ座標系へと移す。
tvec出力の並進ベクトル。
useExtrinsicGuessSOLVEPNP_ITERATIVE に使われるパラメータ。true (1) の場合、関数は与えられた rvec と tvec の値をそれぞれ回転ベクトルと並進ベクトルの初期近似として使い、さらにそれらを最適化する。
iterationsCount反復回数。
reprojectionErrorRANSAC手続きで用いられるインライアのしきい値。このパラメータ値は、観測された点投影と計算された点投影の間で、インライアとみなすための最大許容距離である。
confidenceアルゴリズムが有用な結果を生成する確率。
inliersobjectPoints と imagePoints 内のインライアのインデックスを含む出力ベクトル。
flagsPnP 問題を解く手法: calib3d_solvePnP_flags を参照。この関数は、オブジェクト座標フレームで表された3D点をカメラ座標フレームへ変換する回転ベクトルと並進ベクトルを、さまざまな手法を用いて返す:
  • P3P 系の手法 (SOLVEPNP_P3P, SOLVEPNP_AP3P): 一意の解を返すには4個の入力点が必要。
  • SOLVEPNP_IPPE 入力点は4個以上でなければならず、オブジェクト点は同一平面上になければならない。
  • SOLVEPNP_IPPE_SQUARE マーカーの姿勢推定に適した特殊なケース。入力点の数は4個でなければならない。オブジェクト点は次の順序で定義しなければならない:
  • 点 0: [-squareLength / 2, squareLength / 2, 0]
  • 点 1: [ squareLength / 2, squareLength / 2, 0]
  • 点 2: [ squareLength / 2, -squareLength / 2, 0]
  • 点 3: [-squareLength / 2, -squareLength / 2, 0]
  • その他すべてのフラグでは、入力点の数は4個以上でなければならず、オブジェクト点は任意の構成でよい。
criteria内部の undistortPoints 呼び出しの終了条件。関数は内部で undistortPoints を使って点の歪みを補正し、cv::solvePnP を呼び出すため、入力は非常によく似ている。Perspective-n-Points についての詳しい情報は Perspective-n-Point (PnP) による姿勢推定 で説明されている。

◆ stereoCalibrate() [1/2]

double cv::fisheye::stereoCalibrate ( InputArrayOfArrays objectPoints,
InputArrayOfArrays imagePoints1,
InputArrayOfArrays imagePoints2,
InputOutputArray K1,
InputOutputArray D1,
InputOutputArray K2,
InputOutputArray D2,
Size imageSize,
OutputArray R,
OutputArray T,
int flags = fisheye::CALIB_FIX_INTRINSIC,
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON) )
Python:
cv.fisheye.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, K1, D1, K2, D2, imageSize[, R[, T[, rvecs[, tvecs[, flags[, criteria]]]]]]) -> retval, K1, D1, K2, D2, R, T, rvecs, tvecs
cv.fisheye.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, K1, D1, K2, D2, imageSize[, R[, T[, flags[, criteria]]]]) -> retval, K1, D1, K2, D2, R, T

#include <opencv2/calib3d.hpp>

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ stereoCalibrate() [2/2]

double cv::fisheye::stereoCalibrate ( InputArrayOfArrays objectPoints,
InputArrayOfArrays imagePoints1,
InputArrayOfArrays imagePoints2,
InputOutputArray K1,
InputOutputArray D1,
InputOutputArray K2,
InputOutputArray D2,
Size imageSize,
OutputArray R,
OutputArray T,
OutputArrayOfArrays rvecs,
OutputArrayOfArrays tvecs,
int flags = fisheye::CALIB_FIX_INTRINSIC,
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON) )
Python:
cv.fisheye.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, K1, D1, K2, D2, imageSize[, R[, T[, rvecs[, tvecs[, flags[, criteria]]]]]]) -> retval, K1, D1, K2, D2, R, T, rvecs, tvecs
cv.fisheye.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, K1, D1, K2, D2, imageSize[, R[, T[, flags[, criteria]]]]) -> retval, K1, D1, K2, D2, R, T

#include <opencv2/calib3d.hpp>

ステレオキャリブレーションを実行する。

引数
objectPointsキャリブレーションパターン点のベクトルのベクトル。
imagePoints11台目のカメラで観測された、キャリブレーションパターン点の投影のベクトルのベクトル。
imagePoints22台目のカメラで観測された、キャリブレーションパターン点の投影のベクトルのベクトル。
K1入出力される1台目のカメラ内部行列: \(\vecthreethree{f_x^{(j)}}{0}{c_x^{(j)}}{0}{f_y^{(j)}}{c_y^{(j)}}{0}{0}{1}\) , \(j = 0,\, 1\) 。fisheye::CALIB_USE_INTRINSIC_GUESS , fisheye::CALIB_FIX_INTRINSIC のいずれかが指定されている場合、行列成分の一部またはすべてを初期化しておかなければならない。
D1入出力される4要素の歪み係数のベクトル \(\distcoeffsfisheye\)。
K2入出力される2台目のカメラ内部行列。パラメータは K1 と同様である。
D22台目のカメラの入出力されるレンズ歪み係数。パラメータは D1 と同様である。
imageSizeカメラ内部行列の初期化のためだけに使われる画像のサイズ。
R1台目と2台目のカメラ座標系の間の出力される回転行列。
Tカメラの座標系の間の出力される並進ベクトル。
rvecsステレオペアの1台目のカメラの座標系において、各パターンビューに対して推定された回転ベクトルの出力ベクトル (Rodrigues ) (例: std::vector<cv::Mat>)。より詳しくは、各 i 番目の回転ベクトルは、対応する i 番目の並進ベクトル (次の出力パラメータの説明を参照) と合わせて、キャリブレーションパターンをオブジェクト座標空間 (オブジェクト点が指定されている空間) からステレオペアの1台目のカメラのカメラ座標空間へと移す。より技術的に言えば、i 番目の回転・並進ベクトルの組は、オブジェクト座標空間からステレオペアの1台目のカメラのカメラ座標空間への基底変換を行う。
tvecs各パターンビューについて推定された並進ベクトルの出力ベクトル。前の出力パラメータ ( rvecs ) の説明を参照。
flagsゼロ、または以下の値の組み合わせをとることができるさまざまなフラグ:
criteria反復最適化アルゴリズムの終了条件。

◆ stereoRectify()

void cv::fisheye::stereoRectify ( InputArray K1,
InputArray D1,
InputArray K2,
InputArray D2,
const Size & imageSize,
InputArray R,
InputArray tvec,
OutputArray R1,
OutputArray R2,
OutputArray P1,
OutputArray P2,
OutputArray Q,
int flags,
const Size & newImageSize = Size(),
double balance = 0.0,
double fov_scale = 1.0 )
Python:
cv.fisheye.stereoRectify(K1, D1, K2, D2, imageSize, R, tvec, flags[, R1[, R2[, P1[, P2[, Q[, newImageSize[, balance[, fov_scale]]]]]]]]) -> R1, R2, P1, P2, Q

#include <opencv2/calib3d.hpp>

魚眼カメラモデルのステレオ平行化。

引数
K11台目のカメラの内部行列。
D11台目のカメラの歪みパラメータ。
K22台目のカメラの内部行列。
D22台目のカメラの歪みパラメータ。
imageSizeステレオキャリブレーションに使用される画像のサイズ。
R1台目と2台目のカメラの座標系の間の回転行列。
tvecカメラの座標系の間の並進ベクトル。
R11台目のカメラの出力される 3x3 平行化変換 (回転行列)。
R22台目のカメラの出力される 3x3 平行化変換 (回転行列)。
P11台目のカメラの新しい (平行化された) 座標系における出力される 3x4 射影行列。
P22台目のカメラの新しい (平行化された) 座標系における出力される 3x4 射影行列。
Q出力される \(4 \times 4\) 視差から深度へのマッピング行列 (reprojectImageTo3D を参照)。
flagsゼロ、または fisheye::CALIB_ZERO_DISPARITY をとることができる操作フラグ。フラグが設定されている場合、関数は平行化されたビューにおいて各カメラの主点が同じピクセル座標を持つようにする。フラグが設定されていない場合は、関数は (エピポーラ線の向きに応じて) 有効な画像領域を最大化するために、画像を水平方向または垂直方向にシフトすることがある。
newImageSize平行化後の新しい画像解像度。同じサイズを initUndistortRectifyMap に渡すべきである (OpenCV の samples ディレクトリにある stereo_calib.cpp サンプルを参照)。(0,0) が渡された場合 (デフォルト)、元の imageSize に設定される。より大きな値に設定すると、特に大きな放射状歪みがある場合に、元画像のディテールを保持するのに役立つ。
balance最小焦点距離と最大焦点距離の範囲内で新しい焦点距離を設定する。Balance は [0, 1] の範囲である。
fov_scale新しい焦点距離の除数。

◆ undistortImage()

void cv::fisheye::undistortImage ( InputArray distorted,
OutputArray undistorted,
InputArray K,
InputArray D,
InputArray Knew = cv::noArray(),
const Size & new_size = Size() )
Python:
cv.fisheye.undistortImage(distorted, K, D[, undistorted[, Knew[, new_size]]]) -> undistorted

#include <opencv2/calib3d.hpp>

魚眼レンズの歪みを補正するために画像を変換する。

引数
distorted魚眼レンズの歪みを含む画像。
undistorted魚眼レンズの歪みを補正した出力画像。
Kカメラ内部行列 \(\cameramatrix{K}\)。
D入力される歪み係数のベクトル \(\distcoeffsfisheye\)。
Knew歪んだ画像のカメラ内部行列。デフォルトでは単位行列だが、別の行列を使うことで結果を追加でスケーリングおよびシフトすることができる。
new_size新しいサイズ

この関数は半径方向のレンズ歪みを補正するために画像を変換する。

この関数は単に fisheye::initUndistortRectifyMap(単位行列 R を用いる)と remap(双線形補間を用いる)の組み合わせである。実行される変換の詳細については前者の関数を参照。

undistortImage の結果を以下に示す。

  • a) result of undistort of perspective camera model (all possible coefficients (k_1, k_2, k_3, k_4, k_5, k_6) of distortion were optimized under calibration)
    • b) 魚眼カメラモデルの fisheye::undistortImage の結果(魚眼歪みの可能なすべての係数 (k_1, k_2, k_3, k_4) がキャリブレーションで最適化された)
    • c) 元の画像は魚眼レンズで撮影された

図 a) と b) はほぼ同じである。しかし画像の中心から遠く離れた点を考えると、画像 a) ではこれらの点が歪んでいることがわかる。

image
この関数の呼び出しグラフ:

◆ undistortPoints()

void cv::fisheye::undistortPoints ( InputArray distorted,
OutputArray undistorted,
InputArray K,
InputArray D,
InputArray R = noArray(),
InputArray P = noArray(),
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 10, 1e-8) )
Python:
cv.fisheye.undistortPoints(distorted, K, D[, undistorted[, R[, P[, criteria]]]]) -> undistorted

#include <opencv2/calib3d.hpp>

魚眼モデルを用いて2次元点の歪みを補正する。

引数
distortedオブジェクト点の配列。1xN/Nx1 の2チャンネル (または vector<Point2f> )。N はビュー内の点の数。
Kカメラ内部行列 \(\cameramatrix{K}\)。
D入力される歪み係数のベクトル \(\distcoeffsfisheye\)。
Rオブジェクト空間における平行化変換: 3x3 1チャンネル、またはベクトル: 3x1/1x3 1チャンネル、または 1x1 3チャンネル
P新しいカメラ内部行列 (3x3) または新しい射影行列 (3x4)
criteria終了条件
undistorted画像点の出力配列。1xN/Nx1 の2チャンネル、または vector<Point2f> 。