OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項

詳細描述

定義:設 P 是 3D 空間中的一個點,其在世界參考座標系中的座標為 X(儲存在矩陣 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} \]

總結:通用相機模型 [145],帶透視投影且無畸變校正

名稱空間

名稱空間  cv::fisheye
 此名稱空間中的方法使用所謂的魚眼相機模型。
 

列舉

列舉  {
  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 點進行去畸變。
 

列舉型別文件

◆ 匿名列舉

匿名列舉

#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 輸入的相機內參矩陣。,
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校準模式點投影的向量的向量。imagePoints.size() 和 objectPoints.size() 以及 imagePoints[i].size() 必須等於 objectPoints[i].size()(對於每個 i)。
image_size僅用於初始化相機內參矩陣的影像尺寸。
輸入的相機內參矩陣。輸出 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 輸入的相機內參矩陣。,
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>

使用魚眼模型扭曲 2D 點。

引數
undistorted物件點陣列,1xN/Nx1 2 通道(或 vector<Point2f>),其中 N 是檢視中的點數。
輸入的相機內參矩陣。相機內參矩陣 \(\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 輸入的相機內參矩陣。,
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>

這是一個過載成員函式,為方便起見而提供。它與上述函式的區別僅在於其接受的引數。distortPoints 函式的過載,用於處理未畸變點是透過非單位相機矩陣(例如 estimateNewCameraMatrixForUndistortRectify 的輸出)獲得的。

引數
undistorted物件點陣列,1xN/Nx1 2 通道(或 vector<Point2f>),其中 N 是檢視中的點數。
Kundistorted用作去畸變新相機矩陣的相機內參矩陣。
輸入的相機內參矩陣。相機內參矩陣 \(\cameramatrix{K}\)。
D畸變係數輸入向量 \(\distcoeffsfisheye\)。
alpha傾斜係數。
distorted影像點輸出陣列,1xN/Nx1 2 通道,或 vector<Point2f>。
另請參見
estimateNewCameraMatrixForUndistortRectify
此函式的呼叫圖如下

◆ estimateNewCameraMatrixForUndistortRectify()

void cv::fisheye::estimateNewCameraMatrixForUndistortRectify ( InputArray 輸入的相機內參矩陣。,
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>

估計用於去畸變或校正的新相機內參矩陣。

引數
輸入的相機內參矩陣。相機內參矩陣 \(\cameramatrix{K}\)。
image_size影像尺寸
D畸變係數輸入向量 \(\distcoeffsfisheye\)。
R物件空間中的校正變換:3x3 1 通道,或向量:3x1/1x3 1 通道或 1x1 3 通道
P新相機內參矩陣 (3x3) 或新投影矩陣 (3x4)
平衡將新焦距設定在最小焦距和最大焦距之間。平衡範圍在 [0, 1]。
new_size新尺寸
fov_scale新焦距的除數。
此函式的呼叫圖如下

◆ initUndistortRectifyMap()

void cv::fisheye::initUndistortRectifyMap ( InputArray 輸入的相機內參矩陣。,
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 為空,則使用單位矩陣。

引數
輸入的相機內參矩陣。相機內參矩陣 \(\cameramatrix{K}\)。
D畸變係數輸入向量 \(\distcoeffsfisheye\)。
R物件空間中的校正變換:3x3 1 通道,或向量:3x1/1x3 1 通道或 1x1 3 通道
P新相機內參矩陣 (3x3) 或新投影矩陣 (3x4)
size去畸變影像尺寸。
m1type第一個輸出對映的型別,可以是 CV_32FC1 或 CV_16SC2。有關詳細資訊,請參見 convertMaps
map1第一個輸出對映。
map2第二個輸出對映。

◆ projectPoints() [1/2]

void cv::fisheye::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
const Affine3d & affine,
InputArray 輸入的相機內參矩陣。,
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
輸入的相機內參矩陣。相機內參矩陣 \(\cameramatrix{K}\)。
D畸變係數輸入向量 \(\distcoeffsfisheye\)。
alpha傾斜係數。
jacobian可選輸出 2Nx15 雅可比矩陣,包含影像點相對於焦距分量、主點座標、畸變係數、旋轉向量、平移向量和傾斜的導數。在舊介面中,雅可比矩陣的不同分量透過不同的輸出引數返回。

該函式根據相機的內參和外參,計算 3D 點在影像平面上的投影。可選地,該函式計算雅可比矩陣——影像點座標(作為所有輸入引數的函式)相對於特定引數(內參和/或外參)的偏導數矩陣。

◆ projectPoints() [2/2]

void cv::fisheye::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
InputArray rvec,
InputArray tvec,
InputArray 輸入的相機內參矩陣。,
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>

針對魚眼相機模型,從 3D-2D 點對應中查詢物件姿態。

引數
objectPoints物件座標空間中的物件點陣列,Nx3 1 通道或 1xN/Nx1 3 通道,其中 N 是點數。這裡也可以傳入 vector<Point3d>。
imagePoints對應的影像點陣列,Nx2 1 通道或 1xN/Nx1 2 通道,其中 N 是點數。這裡也可以傳入 vector<Point2d>。
cameraMatrixInput camera intrinsic matrix \(\cameramatrix{A}\) .
distCoeffs畸變係數輸入向量 (4x1/1x4)。
rvec輸出旋轉向量(參見 Rodrigues),與 tvec 一起將點從模型座標系轉換為相機座標系。
tvecOutput translation vector.
useExtrinsicGuess用於 SOLVEPNP_ITERATIVE 的引數。如果為 true (1),函式將提供的 rvec 和 tvec 值用作旋轉和平移向量的初始近似值,並進一步最佳化它們。
flags解決 PnP 問題的方法:參見 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 方案為魚眼相機模型從 3D-2D 點對應中查詢物件姿態。

引數
objectPoints物件座標空間中的物件點陣列,Nx3 1 通道或 1xN/Nx1 3 通道,其中 N 是點數。這裡也可以傳入 vector<Point3d>。
imagePoints對應的影像點陣列,Nx2 1 通道或 1xN/Nx1 2 通道,其中 N 是點數。這裡也可以傳入 vector<Point2d>。
cameraMatrixInput camera intrinsic matrix \(\cameramatrix{A}\) .
distCoeffs畸變係數輸入向量 (4x1/1x4)。
rvec輸出旋轉向量(參見 Rodrigues),與 tvec 一起將點從模型座標系轉換為相機座標系。
tvecOutput translation vector.
useExtrinsicGuess用於 SOLVEPNP_ITERATIVE 的引數。如果為 true (1),函式將提供的 rvec 和 tvec 值用作旋轉和平移向量的初始近似值,並進一步最佳化它們。
iterationsCountNumber of iterations.
reprojectionErrorRANSAC 過程使用的內點閾值。引數值是觀測點和計算點投影之間的最大允許距離,以將其視為內點。
confidenceThe probability that the algorithm produces a useful result.
inliers輸出向量,包含 objectPoints 和 imagePoints 中的內點索引。
flags解決 PnP 問題的方法:參見 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校準模式點向量的向量。
    imagePoints1由第一個相機觀測到的校準模式點投影向量的向量。
    imagePoints2由第二個相機觀測到的校準模式點投影向量的向量。
    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_GUESSfisheye::CALIB_FIX_INTRINSIC,則必須初始化矩陣的部分或全部元件。
    D14 個元素的畸變係數輸入/輸出向量 \(\distcoeffsfisheye\)。
    K2輸入/輸出第二個相機內參矩陣。引數類似於 K1。
    D2第二個相機的輸入/輸出鏡頭畸變係數。引數類似於 D1。
    imageSize僅用於初始化相機內參矩陣的影像尺寸。
    R第一和第二個相機座標系之間的輸出旋轉矩陣。
    T相機座標系之間的輸出平移向量。
    rvecs為立體對的第一個相機的座標系中估計的每個模式檢視的旋轉向量(Rodrigues)的輸出向量(例如 std::vector<cv::Mat>)。更詳細地說,每個第 i 個旋轉向量與對應的第 i 個平移向量(參見前一個輸出引數 rvecs 的描述)將校準模式從物件座標空間(其中指定了物件點)帶到立體對的第一個相機的相機座標空間。用更專業的術語來說,第 i 個旋轉和平移向量的元組執行從物件座標空間到立體對的第一個相機的相機座標空間的基變換。
    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 一個可能的旋轉矩陣。,
    OutputArray 另一個可能的旋轉矩陣。,
    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>

    魚眼相機模型的立體校正。

    引數
    K1第一個相機內參矩陣。
    D1第一個相機畸變引數。
    K2第二個相機內參矩陣。
    D2第二個相機畸變引數。
    imageSize用於立體校準的影像大小。
    R第一和第二個相機座標系之間的旋轉矩陣。
    tvec相機座標系之間的平移向量。
    一個可能的旋轉矩陣。第一個相機的新的(校正後的)座標系中的 3x3 校正變換(旋轉矩陣)。
    另一個可能的旋轉矩陣。第二個相機的新的(校正後的)座標系中的 3x3 校正變換(旋轉矩陣)。
    P1第一個相機的新的(校正後的)座標系中的 3x4 投影矩陣。
    P2第二個相機的新的(校正後的)座標系中的 3x4 投影矩陣。
    Q輸出 \(4 \times 4\) 視差到深度對映矩陣(參見 reprojectImageTo3D)。
    flags操作標誌,可以是零或 fisheye::CALIB_ZERO_DISPARITY 。如果設定了該標誌,函式將使每個相機的主點在校正後的檢視中具有相同的畫素座標。如果未設定該標誌,函式仍可能在水平或垂直方向(取決於對極線的方向)移動影像以最大化可用影像區域。
    newImageSize校正後的新影像解析度。應將相同的尺寸傳遞給 initUndistortRectifyMap(參見 OpenCV 示例目錄中的 stereo_calib.cpp 示例)。當傳入 (0,0)(預設值)時,它被設定為原始 imageSize。將其設定為更大的值可以幫助您保留原始影像中的細節,特別是當存在大的徑向畸變時。
    平衡將新焦距設定在最小焦距和最大焦距之間。平衡範圍在 [0, 1]。
    fov_scale新焦距的除數。

    ◆ undistortImage()

    void cv::fisheye::undistortImage ( InputArray distorted,
    OutputArray undistorted,
    InputArray 輸入的相機內參矩陣。,
    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具有補償魚眼鏡頭畸變的輸出影像。
    輸入的相機內參矩陣。相機內參矩陣 \(\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()

    void cv::fisheye::undistortPoints ( InputArray distorted,
    OutputArray undistorted,
    InputArray 輸入的相機內參矩陣。,
    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>

    使用魚眼模型對 2D 點進行去畸變。

    引數
    distorted物件點陣列,1xN/Nx1 2 通道(或 vector<Point2f>),其中 N 是檢視中的點數。
    輸入的相機內參矩陣。相機內參矩陣 \(\cameramatrix{K}\)。
    D畸變係數輸入向量 \(\distcoeffsfisheye\)。
    R物件空間中的校正變換:3x3 1 通道,或向量:3x1/1x3 1 通道或 1x1 3 通道
    P新相機內參矩陣 (3x3) 或新投影矩陣 (3x4)
    criteria終止準則
    undistorted影像點輸出陣列,1xN/Nx1 2 通道,或 vector<Point2f>。