OpenCV 4.5.3(日本語機械翻訳)
名前空間 | 列挙型 | 関数

名前空間

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

列挙型

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

関数

CV_EXPORTS void cv::fisheye::projectPoints (InputArray objectPoints, OutputArray imagePoints, const Affine3d &affine, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
魚眼モデルを用いたプロジェクトポイント[【詳解】(英語]
CV_EXPORTS_W void cv::fisheye::projectPoints (InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
CV_EXPORTS_W void cv::fisheye::distortPoints (InputArray undistorted, OutputArray distorted, InputArray K, InputArray D, double alpha=0)
魚眼モデルを使って2次元の点を歪めます。[【詳解】(英語]
CV_EXPORTS_W void cv::fisheye::undistortPoints (InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray R=noArray(), InputArray P=noArray())
魚眼レンズを用いた2次元点の歪みの補正[【詳解】(英語]
CV_EXPORTS_W 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 が空の場合は,単位行列が利用されます.[【詳解】(英語]
CV_EXPORTS_W void cv::fisheye::undistortImage (InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray Knew=cv::noArray(), const Size &new_size=Size())
魚眼レンズの歪みを補正するために画像を変換します。[【詳解】(英語]
CV_EXPORTS_W 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)
歪み補正や平行化のために,新しいカメラ固有の行列を推定します.[【詳解】(英語]
CV_EXPORTS_W 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))
カメラのキャリブレーションを行います.[【詳解】(英語]
CV_EXPORTS_W 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)
魚眼カメラモデルのステレオ平行化[【詳解】(英語]
CV_EXPORTS_W 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))
ステレオキャリブレーションを行う[【詳解】(英語]

詳解

Definitions: Let P be a point in 3D of coordinates X in the world reference frame (stored in the matrix X) The coordinate vector of P in the camera reference frame is:

\[Xc = R X + T\]

where R is the rotation matrix corresponding to the rotation vector om: R = rodrigues(om); call x, y and z the 3 coordinates of Xc:

\[x = Xc_1 \\ y = Xc_2 \\ z = Xc_3\]

The pinhole projection coordinates of P is [a; b] where

\[a = x / z \ and \ b = y / z \\ r^2 = a^2 + b^2 \\ \theta = atan(r)\]

Fisheye distortion:

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

The distorted point coordinates are [x'; y'] where

\[x' = (\theta_d / r) a \\ y' = (\theta_d / r) b \]

Finally, conversion into pixel coordinates: The final pixel coordinates vector [u; v] where:

\[u = f_x (x' + \alpha y') + c_x \\ v = f_y y' + c_y\]

関数詳解

calibrate()

CV_EXPORTS_W 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)
)

カメラのキャリブレーションを行います.

引数
objectPoints キャリブレーションパターン座標空間における,キャリブレーションパターンポイントのベクトル.
imagePoints imagePoints.size() と objectPoints.size() および imagePoints[i].size() は,各 i について 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 0または以下の値の組み合わせとなる異なるフラグ。
  • fisheye::CALIB_USE_INTRINSIC_GUESS cameraMatrix は,さらに最適化された有効な fx, fy, cx, cy の初期値を含みます.それ以外の場合,(cx, cy)は初期値として画像中心に設定され(imageSizeが使用されます),焦点距離は最小二乗法で計算されます.
  • fisheye::CALIB_RECOMPUTE_EXTRINSIC 本質的な最適化の各反復の後、本質的なものが再計算されます。
  • fisheye::CALIB_CHECK_COND 条件番号の有効性をチェックする関数です。
  • fisheye::CALIB_FIX_SKEW スキュー係数(α)がゼロに設定され、ゼロのままになります。
  • fisheye::CALIB_FIX_K1,..., fisheye::CALIB_FIX_K4 選択されたディストーション係数がゼロに設定され、ゼロのままになります。
  • fisheye::CALIB_FIX_PRINCIPAL_POINT 主点は全体最適化の間は変更されません。中心に留まるか、fisheye::CALIB_USE_INTRINSIC_GUESSが設定されているときに指定された別の場所に留まります。
  • fisheye::CALIB_FIX_FOCAL_LENGTH 焦点距離は全体最適化の際には変更されません。焦点距離は$max(width,height)/\pi$または提供される$f_x$,$f_y$fisheye::CALIB_USE_INTRINSIC_GUESSにも設定されている場合は
criteria 反復最適化アルゴリズムの終了基準.

distortPoints()

CV_EXPORTS_W void cv::fisheye::distortPoints ( InputArray undistorted,
OutputArray distorted,
InputArray K,
InputArray D,
double alpha = 0
)

魚眼モデルを使って2次元の点を歪めます。

引数
undistorted オブジェクトポイントの配列,1xN/Nx1 2-channel (または vector<Point2f> ),ここで N はビュー内のポイント数を表します.
K カメラ固有の行列$cameramatrix{K}$.
D 入力 歪み係数のベクトル$\distcoeffsfisheye$.
alpha スキュー係数.
distorted 出力は,1xN/Nx1 2チャンネルの画像点の配列,または vector<Point2f> です.

この関数は,歪んでいない点のカメラ固有の行列を,恒等式と仮定していることに注意してください.つまり,歪んでいない点を元に戻したい場合はfisheye::undistortPointsで歪んでいない点を元に戻したい場合は,それらの点に以下を掛けなければいけません$P^{-1}$.

estimateNewCameraMatrixForUndistortRectify()

CV_EXPORTS_W 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
)

歪み補正や平行化のために,新しいカメラ固有の行列を推定します.

引数
K カメラ固有の行列$cameramatrix{K}$.
image_size 画像のサイズ
D 入力 歪み係数のベクトル$\distcoeffsfisheye$.
R オブジェクト空間における平行化変換:3x3 1チャンネル,またはベクトル.3x1/1x3 1ch または 1x1 3ch
P 新しいカメラ固有の行列(3x3)または新しい投影行列(3x4)。
balance 新しい焦点距離を、最小焦点距離から最大焦点距離の間で設定します。バランスは、[0, 1]の範囲です。
new_size 新しいサイズ
fov_scale 新しい焦点距離の除数.

initUndistortRectifyMap()

CV_EXPORTS_W 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 が空の場合は,単位行列が利用されます.

引数
K カメラ固有の行列$cameramatrix{K}$.
D 入力 歪み係数のベクトル$\distcoeffsfisheye$.
R オブジェクト空間における平行化変換:3x3 1チャンネル,またはベクトル.3x1/1x3 1ch または 1x1 3ch
P 新しいカメラ固有の行列(3x3)または新しい投影行列(3x4)。
size 歪みのない画像サイズ.
m1type 最初に出力されるマップの種類は, CV_32FC1 または CV_16SC2 です.参照convertMapsを参照してください。
map1 第1の出力マップ.
map2 2番目の出力マップ.

projectPoints() [1/2]

CV_EXPORTS void cv::fisheye::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
const Affine3d & affine,
InputArray K,
InputArray D,
double alpha = 0,
OutputArray jacobian = noArray()
)

魚眼モデルを用いたプロジェクトポイント

引数
objectPoints 1xN/Nx1 3チャンネルのオブジェクトポイントの配列(または vector<Point3f> ).
imagePoints 2xN/Nx2 の 1 チャンネル,または 1xN/Nx1 の 2 チャンネル,あるいは vector<Point2f> で表される,画像上の点の配列を出力します.
affine
K カメラ固有の行列$cameramatrix{K}$.
D 入力 歪み係数のベクトル$\distcoeffsfisheye$.
alpha スキュー係数.
jacobian オプションで,焦点距離の成分に対する画像点の微分,主点の座標,歪み係数,回転ベクトル,並進ベクトル,スキューに関する2Nx15ヤコビ行列を出力します.従来のインターフェースでは,ヤコビ行列の異なる成分が,異なる出力パラメータによって返されていました.

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

projectPoints() [2/2]

CV_EXPORTS_W void cv::fisheye::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
InputArray rvec,
InputArray tvec,
InputArray K,
InputArray D,
double alpha = 0,
OutputArray jacobian = noArray()
)

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

stereoCalibrate()

CV_EXPORTS_W 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)
)

ステレオキャリブレーションを行う

引数
objectPoints キャリブレーションパターンの点のベクトル。
imagePoints1 第一カメラで観測されたキャリブレーションパターン点の投影のベクトル
imagePoints2 第2カメラで観測されたキャリブレーションパターン点の投影結果のベクトル。
K1 入出力 第一カメラ固有マトリクス:$\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 歪曲係数の入出力ベクトル$\distcoeffsfisheye$4つの要素の
K2 入出力される2番目のカメラの内部行列.このパラメータは,K1 と同様です.
D2 入力/出力される第2カメラのレンズ歪み係数.パラメータは,D1 と同様です.
imageSize カメラ固有の行列を初期化するためだけに使われる画像のサイズ.
R 第1カメラと第2カメラの座標系間の回転行列の出力.
T カメラの座標系間の並進ベクトルを出力します.
flags 0または以下の値の組み合わせとなる異なるフラグ。
  • fisheye::CALIB_FIX_INTRINSIC K1, K2? と D1, D2? を固定し、R, T行列のみが推定されるようにします。
  • fisheye::CALIB_USE_INTRINSIC_GUESS K1, K2 に有効な初期値 fx, fy, cx, cy が含まれており、さらに最適化される。それ以外の場合は,(cx, cy)が画像中心に初期設定され(imageSizeが使用される),最小二乗法で焦点距離が計算される。
  • fisheye::CALIB_RECOMPUTE_EXTRINSIC 本質的な最適化の各反復の後、本質的なものが再計算されます。
  • fisheye::CALIB_CHECK_COND 条件番号の有効性をチェックする関数です。
  • fisheye::CALIB_FIX_SKEW スキュー係数(α)がゼロに設定され、ゼロのままになります。
  • fisheye::CALIB_FIX_K1,..., fisheye::CALIB_FIX_K4 選択されたディストーション係数がゼロに設定され、ゼロのままになります。
criteria 反復最適化アルゴリズムの終了基準.

stereoRectify()

CV_EXPORTS_W 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
)

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

引数
K1 1台目のカメラの固有マトリクス.
D1 第1カメラの歪みパラメータ.
K2 第2カメラの固有マトリクス.
D2 第二カメラの歪みパラメータ
imageSize ステレオキャリブレーションに使われる画像のサイズ.
R 1 台目と 2 台目のカメラの座標系間の回転行列
tvec カメラの座標系間の移動ベクトル
R1 1台目のカメラに対する3x3の平行化変換(回転行列)の出力
R2 2 台目のカメラに対する 3x3 の平行化変換(回転行列)の出力
P1 1台目のカメラの新しい(平行化された)座標系における3x4の射影行列を出力。
P2 2台目のカメラの新しい(平行化された)座標系における3x4の投影行列を出力する.
Q 出力$4 \times 4$視差-深度マッピング行列( reprojectImageTo3D 参照).
flags ゼロ,あるいは fisheye::CALIB_ZERO_DISPARITY のいずれかの操作フラグ.このフラグがセットされている場合,この関数は各カメラの主点が,平行化されたビューにおいて同じピクセル座標になるようにします.また,このフラグがセットされていない場合でも,有用な画像領域を最大化するために,(エピポーラ線の向きに応じて)水平または垂直方向に画像を移動させることがあります.
newImageSize 整形後の新しい画像の解像度。には,同じサイズを渡す必要があります.initUndistortRectifyMap(OpenCV samples ディレクトリにある stereo_calib.cpp サンプルを参照してください).(0,0) を渡した場合(デフォルト),これは元の imageSize に設定されます.これを大きな値に設定すると,特に大きな半径方向の歪みがある場合に,元の画像のディテールを保持するのに役立ちます.
balance 新しい焦点距離を、最小焦点距離から最大焦点距離の間で設定します。バランスは、[0, 1]の範囲です。
fov_scale 新しい焦点距離の除数.

undistortImage()

CV_EXPORTS_W void cv::fisheye::undistortImage ( InputArray distorted,
OutputArray undistorted,
InputArray K,
InputArray D,
InputArray Knew = cv::noArray(),
const Size & new_size = Size()
)

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

引数
distorted 魚眼レンズの歪みがある画像を出力します。
undistorted 魚眼レンズの歪みが補正された出力画像。
K カメラ固有の行列$cameramatrix{K}$.
D 入力 歪み係数のベクトル$\distcoeffsfisheye$.
Knew 歪んだ画像のカメラ固有の行列.デフォルトでは単位行列ですが、追加で別の行列を使って結果を拡大・縮小することができます。
new_size 新しいサイズ

この関数は,半径方向と接線方向のレンズ歪みを補正するために,画像を変換します.

この関数は,単純に以下の組み合わせですfisheye::initUndistortRectifyMap(単一のRを持つ) とremap(バイリニア補間) を組み合わせたものです.実行される変換の詳細については,前者の関数を参照してください。

以下に,undistortImage の結果を示します.

  • a) 透視カメラモデルの歪み補正の結果(歪みのすべての係数(k_1, k_2, k_3, k_4, k_5, k_6)は,キャリブレーション時に最適化されています).
    • b) レンダリング結果fisheye::undistortImage魚眼カメラモデルの結果(魚眼レンズの歪みのすべての係数(k_1, k_2, k_3, k_4)がキャリブレーションにより最適化されている)
    • c) 魚眼レンズで撮影された元の画像

写真a)とb)は、ほぼ同じです。しかし、画像の中心から離れた場所にある画像の点を考えてみると、画像a)ではこれらの点が歪んでいることがわかります。

image

undistortPoints()

CV_EXPORTS_W void cv::fisheye::undistortPoints ( InputArray distorted,
OutputArray undistorted,
InputArray K,
InputArray D,
InputArray R = noArray(),
InputArray P = noArray()
)

魚眼レンズを用いた2次元点の歪みの補正

引数
distorted オブジェクトポイントの配列,1xN/Nx1 2-channel (または vector<Point2f> ),ここで N はビュー内のポイント数を表します.
K カメラ固有の行列$cameramatrix{K}$.
D 入力 歪み係数のベクトル$\distcoeffsfisheye$.
R オブジェクト空間における平行化変換:3x3 1チャンネル,またはベクトル.3x1/1x3 1ch または 1x1 3ch
P 新しいカメラ固有の行列(3x3)または新しい投影行列(3x4)。
undistorted 出力は,1xN/Nx1 2チャンネルの画像点の配列,または vector<Point2f> です.