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

この名前空間のメソッドは、いわゆる魚眼カメラモデルを使用する。続き...

関数

double 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 distortPoints (InputArray undistorted, OutputArray distorted, InputArray K, InputArray D, double alpha=0)
 魚眼モデルを用いて2D点を歪ませる。
 
void distortPoints (InputArray undistorted, OutputArray distorted, InputArray Kundistorted, InputArray K, InputArray D, double alpha=0)
 
void 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 initUndistortRectifyMap (InputArray K, InputArray D, InputArray R, InputArray P, const cv::Size &size, int m1type, OutputArray map1, OutputArray map2)
 cv::remap() による画像変換のための歪み除去・平行化マップを計算する。D が空の場合は歪みゼロが使用され、R または P が空の場合は恒等行列が使用される。
 
void projectPoints (InputArray objectPoints, OutputArray imagePoints, const Affine3d &affine, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
 魚眼モデルを用いて点を投影する。
 
void projectPoints (InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
 
bool 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 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 stereoCalibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray K1, InputOutputArray D1, InputOutputArray K2, InputOutputArray D2, Size imageSize, OutputArray R, OutputArray T, int flags=CALIB_FIX_INTRINSIC, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON))
 これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは受け取る引数のみが異なる。
 
double 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=CALIB_FIX_INTRINSIC, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON))
 ステレオキャリブレーションを実行する。
 
void 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 undistortImage (InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray Knew=cv::noArray(), const Size &new_size=Size())
 魚眼レンズの歪みを補正するために画像を変換する。
 
void 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点の歪みを除去する。
 

詳細説明

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

関数詳解

◆ 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

魚眼モデルを用いて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

これはオーバーロードされたメンバ関数であり、利便性のために提供されている。上記の関数とは受け取る引数のみが異なる。歪み除去された点が恒等でないカメラ行列で得られた場合(例えば 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

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

引数
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

cv::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

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

引数
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

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

◆ 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

魚眼カメラモデルに対して、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 を参照。この関数は、物体座標系で表現された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-Point については 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

魚眼カメラモデルに対して、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 を参照。
criteria内部の undistortPoints 呼び出しの終了条件。この関数は内部で undistortPoints を用いて点の歪みを除去し、cv::solvePnP を呼び出すため、入力は非常によく似ている。Perspective-n-Point に関する詳しい情報は Perspective-n-Point (PnP) による姿勢推定 で説明されている。

◆ 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

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

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

この関数は、半径方向および接線方向のレンズ歪みを補償するために画像を変換する。

この関数は単に cv::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) 魚眼カメラモデルの cv::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

魚眼カメラモデルを用いて2D点の歪みを除去する。

この関数は魚眼カメラモデルに対して歪み除去を行う。魚眼モデルは、undistortPoints で使用される標準的なピンホールカメラモデルとは異なる歪みモデルを用いる。魚眼モデルは広角カメラに適している。

この関数は、歪んだ魚眼画像から歪みを除去した座標へ点を変換し、必要に応じて平行化変換 (R) を適用し、新しい画像平面 (P) へ射影する。

覚え書き
Coordinate Systems:
  • 入力 (distorted): 点は歪んだ魚眼画像のピクセル座標、すなわち画像の左上隅からピクセル単位で測った座標で与えられることが期待される。
  • Output (undistorted): The coordinate system depends on parameter P:
    • P が指定されている(空でない)場合: 出力点は、カメラ行列 P を用いた平行化/歪み除去後の画像平面のピクセル座標になる。
    • P が空または恒等の場合: 出力点は正規化カメラ座標(正規化画像座標)になる。これは内部パラメータに依存しない、カメラの焦点面における無次元の座標である。
魚眼モデル vs. 標準モデル: 魚眼カメラ(広角レンズ)にはこの関数(cv::fisheye::undistortPoints)を使用する。標準的なピンホールカメラには、代わりに undistortPoints を使用する。魚眼モデルは、標準モデル(4〜14個の係数)とは異なる歪みパラメータ化(4個の係数)を用いる。
引数
distorted魚眼画像のピクセル座標における歪んだ点座標の配列。1xN/Nx1 の2チャンネル(または vector<Point2f> )で、N はビュー内の点の数。
K魚眼カメラのカメラ内部行列 \(\cameramatrix{K}\)。
D魚眼歪み係数の入力ベクトル \(\distcoeffsfisheye\) (ちょうど4個の係数を含む必要がある)。
R物体空間における平行化(レクティフィケーション)変換。3x3 の1チャンネル、またはベクトル: 3x1/1x3 の1チャンネルか 1x1 の3チャンネル。空の場合は恒等変換が使用される。
P新しいカメラ内部行列(3x3)または新しい射影行列(3x4)。空または恒等の場合、出力は正規化カメラ座標になる。
criteria反復的な歪み除去アルゴリズムの終了条件。
undistorted歪みを除去した画像点の出力配列。1xN/Nx1 の2チャンネル、または vector<Point2f> 。座標系は引数 P に依存する(上記参照)。