OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
自定义标定图案用于三维重建

详细说明

命名空间

命名空间  cv::omnidir::internal
 

类  cv::ccalib::CustomPattern
 
类  cv::multicalib::MultiCameraCalibration
 用于多相机标定的类,支持针孔相机和全向相机。对于全向相机模型,请参考ccalib模块下的omnidir.hpp。该类首先单独标定每个相机,然后应用类似Bundle Adjustment的优化来精炼外参。目前,它仅支持“随机”图案进行标定,详情请参见ccalib模块下的randomPattern.hpp。使用的图像应命名为“cameraIdx-timestamp.*”,具有相同时间戳的几张图像表示它们是同一时间拍摄的同一图案。cameraIdx应从0开始。更多...
 
类  cv::randpattern::RandomPatternCornerFinder
 用于查找“随机”图案的特征点及其在世界坐标系中对应点的类,可用于标定。当图案部分遮挡或在多相机标定中仅能观察到图案的一部分时,该类非常有用。图案可以通过文件中描述的RandomPatternGenerator类生成。更多...
 
类  cv::randpattern::RandomPatternGenerator
 

#define HEAD   -1
 
#define INVALID   -2
 

枚举

enum  {
  cv::omnidir::CALIB_USE_GUESS = 1 ,
  cv::omnidir::CALIB_FIX_SKEW = 2 ,
  cv::omnidir::CALIB_FIX_K1 = 4 ,
  cv::omnidir::CALIB_FIX_K2 = 8 ,
  cv::omnidir::CALIB_FIX_P1 = 16 ,
  cv::omnidir::CALIB_FIX_P2 = 32 ,
  cv::omnidir::CALIB_FIX_XI = 64 ,
  cv::omnidir::CALIB_FIX_GAMMA = 128 ,
  cv::omnidir::CALIB_FIX_CENTER = 256
}
 
enum  {
  cv::omnidir::RECTIFY_PERSPECTIVE = 1 ,
  cv::omnidir::RECTIFY_CYLINDRICAL = 2 ,
  cv::omnidir::RECTIFY_LONGLATI = 3 ,
  cv::omnidir::RECTIFY_STEREOGRAPHIC = 4
}
 
enum  {
  cv::omnidir::XYZRGB = 1 ,
  cv::omnidir::XYZ = 2
}
 

函数

double cv::omnidir::calibrate (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size size, InputOutputArray K, InputOutputArray xi, InputOutputArray D, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags, TermCriteria criteria, OutputArray idx=noArray())
 执行全向相机标定,输出的默认深度为CV_64F。
 
void cv::omnidir::initUndistortRectifyMap (InputArray K, InputArray D, InputArray xi, InputArray R, InputArray P, const cv::Size &size, int m1type, OutputArray map1, OutputArray map2, int flags)
 计算全向相机图像变换(由旋转R引起)的去畸变和校正映射。它输出两个用于cv::remap()的映射。如果D为空,则使用零畸变;如果R或P为空,则使用单位矩阵。
 
void cv::omnidir::projectPoints (InputArray objectPoints, OutputArray imagePoints, const Affine3d &affine, InputArray K, double xi, InputArray D, OutputArray jacobian=noArray())
 
void cv::omnidir::projectPoints (InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec, InputArray K, double xi, InputArray D, OutputArray jacobian=noArray())
 使用CMei模型投影全向相机点的三维坐标到图像像素。
 
double cv::omnidir::stereoCalibrate (InputOutputArrayOfArrays objectPoints, InputOutputArrayOfArrays imagePoints1, InputOutputArrayOfArrays imagePoints2, const Size &imageSize1, const Size &imageSize2, InputOutputArray K1, InputOutputArray xi1, InputOutputArray D1, InputOutputArray K2, InputOutputArray xi2, InputOutputArray D2, OutputArray rvec, OutputArray tvec, OutputArrayOfArrays rvecsL, OutputArrayOfArrays tvecsL, int flags, TermCriteria criteria, OutputArray idx=noArray())
 全向相机模型的立体标定。它计算两个相机的内参以及两个相机之间的外参。输出的默认深度为CV_64F。
 
void cv::omnidir::stereoReconstruct (InputArray image1, InputArray image2, InputArray K1, InputArray D1, InputArray xi1, InputArray K2, InputArray D2, InputArray xi2, InputArray R, InputArray T, int flag, int numDisparities, int SADWindowSize, OutputArray disparity, OutputArray image1Rec, OutputArray image2Rec, const Size &newSize=Size(), InputArray Knew=cv::noArray(), OutputArray pointCloud=cv::noArray(), int pointType=XYZRGB)
 从一对图像进行立体三维重建。
 
void cv::omnidir::stereoRectify (InputArray R, InputArray T, OutputArray R1, OutputArray R2)
 全向相机模型的立体校正。它计算两个相机的校正旋转矩阵。
 
void cv::omnidir::undistortImage (InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray xi, int flags, InputArray Knew=cv::noArray(), const Size &new_size=Size(), InputArray R=Mat::eye(3, 3, CV_64F))
 将全向相机图像去畸变以得到透视图像。
 
void cv::omnidir::undistortPoints (InputArray distorted, OutputArray undistorted, InputArray K, InputArray D, InputArray xi, InputArray R)
 使用CMei模型去畸变全向相机的二维图像点。
 

宏定义文档

◆ HEAD

#define HEAD   -1

◆ INVALID

#define INVALID   -2

枚举类型文档 (Enumeration Type Documentation)

◆ anonymous enum

匿名枚举

#include <opencv2/ccalib/omnidir.hpp>

枚举值 (Enumerator)
CALIB_USE_GUESS 
Python: cv.omnidir.CALIB_USE_GUESS
CALIB_FIX_SKEW 
Python: cv.omnidir.CALIB_FIX_SKEW
CALIB_FIX_K1 
Python: cv.omnidir.CALIB_FIX_K1
CALIB_FIX_K2 
Python: cv.omnidir.CALIB_FIX_K2
CALIB_FIX_P1 
Python: cv.omnidir.CALIB_FIX_P1
CALIB_FIX_P2 
Python: cv.omnidir.CALIB_FIX_P2
CALIB_FIX_XI 
Python: cv.omnidir.CALIB_FIX_XI
CALIB_FIX_GAMMA 
Python: cv.omnidir.CALIB_FIX_GAMMA
CALIB_FIX_CENTER 
Python: cv.omnidir.CALIB_FIX_CENTER

◆ anonymous enum

匿名枚举

#include <opencv2/ccalib/omnidir.hpp>

枚举值 (Enumerator)
RECTIFY_PERSPECTIVE 
Python: cv.omnidir.RECTIFY_PERSPECTIVE
RECTIFY_CYLINDRICAL 
Python: cv.omnidir.RECTIFY_CYLINDRICAL
RECTIFY_LONGLATI 
Python: cv.omnidir.RECTIFY_LONGLATI
RECTIFY_STEREOGRAPHIC 
Python: cv.omnidir.RECTIFY_STEREOGRAPHIC

◆ anonymous enum

匿名枚举

#include <opencv2/ccalib/omnidir.hpp>

枚举值 (Enumerator)
XYZRGB 
Python: cv.omnidir.XYZRGB
XYZ 
Python: cv.omnidir.XYZ

函数文档 (Function Documentation)

◆ calibrate()

double cv::omnidir::calibrate ( InputArrayOfArrays objectPoints,
InputArrayOfArrays imagePoints,
Size size (大小),
InputOutputArray K,
InputOutputArray xi,
InputOutputArray D,
OutputArrayOfArrays rvecs,
OutputArrayOfArrays tvecs,
int flags (标志),
TermCriteria criteria,
OutputArray idx = noArray() )
Python
cv.omnidir.calibrate(objectPoints, imagePoints, size, K, xi, D, flags, criteria[, rvecs[, tvecs[, idx]]]) -> retval, K, xi, D, rvecs, tvecs, idx

#include <opencv2/ccalib/omnidir.hpp>

执行全向相机标定,输出的默认深度为CV_64F。

参数
objectPoints世界(图案)坐标系中的三维点对象,为`vector>`。也可以是`Mat`类型,大小为1xN/Nx1,CV_32FC3。也接受CV_64F类型的数据。
imagePoints对应的二维图像点,与`objectPoints`的大小和类型必须相同。
size (大小)标定图像的尺寸。
K输出的标定相机矩阵。
xiCMei模型输出参数xi。
D输出畸变参数 \((k_1, k_2, p_1, p_2)\)。
rvecs输出每个标定图像的旋转向量。
tvecs输出每个标定图像的平移向量。
flags (标志)控制标定的标志。
criteria优化的终止条件。
idx (索引)通过初始化检查的图像索引,这些图像将被实际用于标定。因此,`rvecs`的大小与`idx.total()`相同。

◆ initUndistortRectifyMap()

void cv::omnidir::initUndistortRectifyMap ( InputArray K,
InputArray D,
InputArray xi,
InputArray R,
InputArray P,
const cv::Size & size (大小),
int m1type,
OutputArray map1,
OutputArray map2,
int flags (标志) )
Python
cv.omnidir.initUndistortRectifyMap(K, D, xi, R, P, size, m1type, flags[, map1[, map2]]) -> map1, map2

#include <opencv2/ccalib/omnidir.hpp>

计算全向相机图像变换(由旋转R引起)的去畸变和校正映射。它输出两个用于cv::remap()的映射。如果D为空,则使用零畸变;如果R或P为空,则使用单位矩阵。

参数
K相机矩阵 \(K = \vecthreethree{f_x}{s}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\),深度为CV_32F或CV_64F。
D输入畸变系数向量 \((k_1, k_2, p_1, p_2)\),深度为CV_32F或CV_64F。
xiCMei模型的参数xi。
R原始空间与物体空间之间的旋转变换:3x3单通道,或向量:3x1/1x3,深度为CV_32F或CV_64F。
P新的相机矩阵(3x3)或新的投影矩阵(3x4)。
size (大小)去畸变图像的大小。
m1type第一个输出映射的类型,可以是CV_32FC1或CV_16SC2。详情请参见convertMaps()
map1第一个输出映射。
map2第二个输出映射。
flags (标志)标志指示校正类型,支持RECTIFY_PERSPECTIVE、RECTIFY_CYLINDRICAL、RECTIFY_LONGLATI和RECTIFY_STEREOGRAPHIC。

◆ projectPoints() [1/2]

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

#include <opencv2/ccalib/omnidir.hpp>

这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数不同。

◆ projectPoints() [2/2]

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

#include <opencv2/ccalib/omnidir.hpp>

使用CMei模型投影全向相机点的三维坐标到图像像素。

该模块是作为OpenCV的GSoC 2015项目被接受的,作者是Baisheng Lai,导师是Bo Li。

参数
objectPoints世界坐标系中的三维点对象,为`vector>`或`Mat`类型,大小为1xN/Nx1,3通道,CV_32F类型,N为点的数量。CV_64F也可用。
imagePoints输出的二维图像点,为`vector>`或1xN/Nx1,2通道,CV_32F类型。CV_64F也可用。
rvec世界坐标系到相机坐标系的旋转向量数组,即om。
tvec图案坐标系到相机坐标系的平移向量数组。
K相机矩阵 \(K = \vecthreethree{f_x}{s}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\)。
D输入畸变系数向量 \((k_1, k_2, p_1, p_2)\)。
xiCMei模型的参数xi。
jacobian可选的输出2Nx16的CV_64F雅可比矩阵,包含图像像素点相对于参数(包括 \(om, T, f_x, f_y, s, c_x, c_y, xi, k_1, k_2, p_1, p_2\))的导数。该矩阵将用于优化标定。

该函数通过内参和外参将世界坐标系的三维点投影到图像像素。此外,它还可选地计算一个副产品:包含图像像素点相对于内参和外参的导数的雅可比矩阵。

◆ stereoCalibrate()

double cv::omnidir::stereoCalibrate ( InputOutputArrayOfArrays objectPoints,
InputOutputArrayOfArrays imagePoints1,
InputOutputArrayOfArrays imagePoints2,
const Size & imageSize1,
const Size & imageSize2,
InputOutputArray K1,
InputOutputArray xi1,
InputOutputArray D1,
InputOutputArray K2,
InputOutputArray xi2,
InputOutputArray D2,
OutputArray rvec,
OutputArray tvec,
OutputArrayOfArrays rvecsL,
OutputArrayOfArrays tvecsL,
int flags (标志),
TermCriteria criteria,
OutputArray idx = noArray() )
Python
cv.omnidir.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, imageSize1, imageSize2, K1, xi1, D1, K2, xi2, D2, flags, criteria[, rvec[, tvec[, rvecsL[, tvecsL[, idx]]]]]) -> retval, objectPoints, imagePoints1, imagePoints2, K1, xi1, D1, K2, xi2, D2, rvec, tvec, rvecsL, tvecsL, idx

#include <opencv2/ccalib/omnidir.hpp>

全向相机模型的立体标定。它计算两个相机的内参以及两个相机之间的外参。输出的默认深度为CV_64F。

参数
objectPoints世界(图案)坐标系中的三维点对象,类型为`vector>`。也可以是`Mat`类型,大小为1xN/Nx1,CV_32FC3。也接受CV_64F类型的数据。
imagePoints1第一个相机的对应图像点,类型为`vector>`。它的大小和类型必须与`objectPoints`相同。
imagePoints2第二个相机的对应图像点,类型为`vector>`。它的大小和类型必须与`objectPoints`相同。
imageSize1第一个相机的标定图像尺寸。
imageSize2第二个相机的标定图像尺寸。
K1第一个相机的输出相机矩阵。
xi1第一个相机的CMei模型输出参数xi。
D1第一个相机的输出畸变参数 \((k_1, k_2, p_1, p_2)\)。
K2第一个相机的输出相机矩阵。
xi2第二个相机的CMei模型输出参数xi。
D2第二个相机的输出畸变参数 \((k_1, k_2, p_1, p_2)\)。
rvec第一个相机与第二个相机之间的输出旋转矩阵。
tvec第一个相机与第二个相机之间的输出平移向量。
rvecsL第一个相机每个图像的输出旋转向量。
tvecsL第一个相机每个图像的输出平移向量。
flags (标志)控制立体标定的标志。
criteria优化的终止条件。
idx (索引)通过初始化检查的图像对索引,这些图像对将被实际用于标定。因此,`rvecs`的大小与`idx.total()`相同。@

◆ stereoReconstruct()

void cv::omnidir::stereoReconstruct ( InputArray image1,
InputArray image2,
InputArray K1,
InputArray D1,
InputArray xi1,
InputArray K2,
InputArray D2,
InputArray xi2,
InputArray R,
InputArray T,
int 标志,
int numDisparities,
int SADWindowSize,
OutputArray disparity,
OutputArray image1Rec,
OutputArray image2Rec,
const Size & newSize = Size(),
InputArray Knew = cv::noArray(),
OutputArray pointCloud = cv::noArray(),
int pointType = XYZRGB )
Python
cv.omnidir.stereoReconstruct(image1, image2, K1, D1, xi1, K2, D2, xi2, R, T, flag, numDisparities, SADWindowSize[, disparity[, image1Rec[, image2Rec[, newSize[, Knew[, pointCloud[, pointType]]]]]]]) -> disparity, image1Rec, image2Rec, pointCloud

#include <opencv2/ccalib/omnidir.hpp>

从一对图像进行立体三维重建。

参数
image1第一张输入图像。
image2第二张输入图像。
K1第一个相机的输入相机矩阵。
D1第一个相机的输入畸变参数 \((k_1, k_2, p_1, p_2)\)。
xi1第一个相机的CMei模型输入参数xi。
K2第二个相机的输入相机矩阵。
D2第二个相机的输入畸变参数 \((k_1, k_2, p_1, p_2)\)。
xi2第二个相机的CMei模型输入参数xi。
R第一个相机与第二个相机之间的旋转矩阵。
T第一个相机与第二个相机之间的平移向量。
标志校正类型的标志,RECTIFY_PERSPECTIVE或RECTIFY_LONGLATI。
numDisparitiesStereoSGBM中的参数`numDisparities`,详情请参见StereoSGBM
SADWindowSizeStereoSGBM中的参数`SADWindowSize`,详情请参见StereoSGBM
disparity立体匹配生成的视差图。
image1Rec第一个图像的校正后图像。
image2Rec第二个图像的校正后图像。
newSize校正后图像的尺寸,参见omnidir::undistortImage
Knew校正后图像的新相机矩阵,参见omnidir::undistortImage
pointCloud三维重建的点云,类型为CV_64FC3。
pointType点云类型,可以是XYZRGB或XYZ。

◆ stereoRectify()

void cv::omnidir::stereoRectify ( InputArray R,
InputArray T,
OutputArray R1,
OutputArray R2 )
Python
cv.omnidir.stereoRectify(R, T[, R1[, R2]]) -> R1, R2

#include <opencv2/ccalib/omnidir.hpp>

全向相机模型的立体校正。它计算两个相机的校正旋转矩阵。

参数
R第一个相机与第二个相机之间的旋转矩阵。
T第一个相机与第二个相机之间的平移向量。
R1第一个相机的输出3x3旋转矩阵。
R2第二个相机的输出3x3旋转矩阵。

◆ undistortImage()

void cv::omnidir::undistortImage ( InputArray distorted,
OutputArray undistorted,
InputArray K,
InputArray D,
InputArray xi,
int flags (标志),
InputArray Knew = cv::noArray(),
const Size & new_size = Size(),
InputArray R = Mat::eye(3, 3, CV_64F) )
Python
cv.omnidir.undistortImage(distorted, K, D, xi, flags[, undistorted[, Knew[, new_size[, R]]]]) -> undistorted

#include <opencv2/ccalib/omnidir.hpp>

将全向相机图像去畸变以得到透视图像。

参数
distorted输入的畸变全向图像。
undistorted输出的去畸变图像。
K相机矩阵 \(K = \vecthreethree{f_x}{s}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\)。
D输入畸变系数向量 \((k_1, k_2, p_1, p_2)\)。
xiCMei模型的参数xi。
flags (标志)标志指示校正类型,RECTIFY_PERSPECTIVE、RECTIFY_CYLINDRICAL、RECTIFY_LONGLATI和RECTIFY_STEREOGRAPHIC。
Knew畸变图像的相机矩阵。如果未指定,则为K。
new_size新图像尺寸。默认为畸变图像的尺寸。
R输入图像与输出图像之间的旋转矩阵。默认为单位矩阵。

◆ undistortPoints()

void cv::omnidir::undistortPoints ( InputArray distorted,
OutputArray undistorted,
InputArray K,
InputArray D,
InputArray xi,
InputArray R )
Python
cv.omnidir.undistortPoints(distorted, K, D, xi, R[, undistorted]) -> undistorted

#include <opencv2/ccalib/omnidir.hpp>

使用CMei模型去畸变全向相机的二维图像点。

参数
distorted畸变的图像点数组,为`vector`或1xN/Nx1,2通道`Mat`,CV_32F类型,CV_64F深度也可用。
K相机矩阵 \(K = \vecthreethree{f_x}{s}{c_x}{0}{f_y}{c_y}{0}{0}{_1}\)。
D畸变系数 \((k_1, k_2, p_1, p_2)\)。
xiCMei模型的参数xi。
R原始空间与物体空间之间的旋转变换:3x3单通道,或向量:3x1/1x3单通道或1x1 3通道。
undistorted归一化的物体点数组,为`vector`/`Vec2d`或1xN/Nx1,2通道`Mat`,与畸变点的深度相同。