本节中的功能使用所谓的针孔相机模型。在此模型中,通过使用透视变换将3D点投影到图像平面中形成场景视图。
要么
哪里:
- 是世界坐标空间中3D点的坐标
- 是以像素为单位的投影点的坐标
- 是一个相机矩阵,或一个内在参数的矩阵
- 是通常在形象中心的一个主要观点
- 是以像素单位表示的焦距。
因此,如果来自摄像机的图像按比例缩放,则所有这些参数都应该按相同的因子缩放(分别乘以/除)。内在参数的矩阵不依赖于所观看的场景。所以,一旦估计,只要焦距固定(在变焦镜头的情况下),它可以重新使用。联合旋转 - 平移矩阵 称为外部参数矩阵。它用于描述静态场景周围的相机运动,反之亦然,静止相机前面的物体的刚性运动。也就是说, 将点的坐标转换 成相对于相机固定的坐标系。上面的转换等价于下面的(when ):
下图说明了针孔摄像机的型号。
真实的镜头通常会有一些失真,主要是径向失真和轻微的切向失真。所以,上面的模型被扩展为:
, , , , ,和 是径向失真系数。 并且 是切向失真系数。在OpenCV中不考虑高阶系数。
下图显示了两种常见类型的径向失真:桶形失真(典型的是枕形失真(典型))。
在下面的函数中,系数被传递或返回
向量。也就是说,如果矢量包含四个元素,则意味着 。失真系数不取决于观看的场景。因此,它们也属于内在摄像机参数。不管拍摄的图像分辨率如何,它们都保持不变。如果,例如,一个摄像机被校准上的图像 的分辨率,绝对相同的失真系数可以被用于从相同的摄影机的图像的同时, , ,和 需要被适当地缩放。320 x 240
640 x 480
以下功能使用上述模型来执行以下操作:
- 项目3D指向给定内在和外在参数的图像平面。
- 计算给定内部参数的外部参数,几个3D点和它们的投影。
- 根据已知校准图案的几个视图估计内部和外部摄像机参数(每个视图由几个3D-2D点对应描述)。
- 估计立体相机“头部”的相对位置和方向,并计算使相机光轴平行的整流变换。
注意
从校准模式的几个视图中查找相机的内在和外在参数。
double
calibrateCamera
(
InputArrayOfArrays
objectPoints
,InputArrayOfArrays
imagePoints
,Size
imageSize
,InputOutputArray
cameraMatrix
,InputOutputArray
distCoeffs
,OutputArrayOfArrays
rvecs
,OutputArrayOfArrays
tvecs
,int
flags
= 0,TermCriteria
criteria
= TermCriteria(TermCriteria :: COUNT + TermCriteria :: EPS,30,DBL_EPSILON)
)
cv2.
calibrateCamera
(
objectPoints,imagePoints,IMAGESIZE
[
,cameraMatrix
[
,distCoeffs
[
,rvecs
[
,tvecs
[
,旗帜
[
,标准
]
]
]
]
]
]
)
→RETVAL,cameraMatrix,distCoeffs,rvecs,tvecs
double
cvCalibrateCamera2
(
const CvMat *
object_points
,const CvMat *
image_points
,const CvMat *
point_counts
,CvSize
image_size
,CvMat *
camera_matrix
,CvMat *
distortion_coeffs
,CvMat *
rotation_vectors
= NULL,CvMat *
translation_vectors
= NULL,int
flags
= 0,CvTermCriteria
term_crit
= cvTermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS,30,DBL_EPSILON)
)
cv.
CalibrateCamera2
(
objectPoints,imagePoints,pointCounts,IMAGESIZE,cameraMatrix,distCoeffs,rvecs,tvecs,标志= 0
)
→无
该函数估计每个视图的内在摄像机参数和外部参数。该算法基于[Zhang2000]和[BouguetMCT]。必须指定每个视图中3D对象点的坐标和相应的2D投影。这可以通过使用具有已知几何形状和易于检测的特征点的对象来实现。这样的对象称为校准装置或校准模式,而OpenCV已经内置了作为校准装置的棋盘支持(参见参考资料 findChessboardCorners()
)。目前,内部参数的初始化(当CV_CALIB_USE_INTRINSIC_GUESS
未设置时)仅用于平面校准图案(其中对象点的Z坐标必须全部为零)。3D校准钻机也可以使用,只要初始cameraMatrix
被提供。
该算法执行以下步骤:
CV_CALIB_FIX_K?
指定了一些,否则最初的失真系数都被设置为零。solvePnP()
。imagePoints
与投影(使用相机参数和姿态的当前估计值)对象点之间的平方距离总和objectPoints
。见projectPoints()
细节。该函数返回最终的重新投影错误。
注意
如果使用非正方形(=非N×N)网格并 findChessboardCorners()
进行校准,并calibrateCamera
返回错误的值(零失真系数,图像中心距离很远(w/2-0.5,h/2-0.5)
,和/或差异较大和(比例为10:1或更大) ),那么你有可能使用patternSize=cvSize(rows,cols)
的,而不是用patternSize=cvSize(cols,rows)
在findChessboardCorners()
。
也可以看看
findChessboardCorners()
, solvePnP()
, initCameraMatrix2D()
, stereoCalibrate()
, undistort()
从相机矩阵计算有用的相机特性。
void
calibrationMatrixValues
(
InputArray
cameraMatrix
,Size
imageSize
,double
apertureWidth
,double
apertureHeight
,double&
fovx
,double&
fovy
,double&
focalLength
,Point2d&
principalPoint
,double&
aspectRatio
)
cv2.
calibrationMatrixValues
(
cameraMatrix,IMAGESIZE,apertureWidth,apertureHeight
)
→fovx,fovy,长焦点,principalPoint,的aspectRatio
参数: |
|
---|
该功能从先前估计的相机矩阵计算各种有用的相机特性。
注意
请记住统一度“mm”代表棋盘球场所选择的任何度量单位(因此可以是任何值)。
结合两个旋转和平移转换。
void
composeRT
(
InputArray
rvec1
,InputArray
tvec1
,InputArray
rvec2
,InputArray
tvec2
,OutputArray
rvec3
,OutputArray
tvec3
,OutputArray
dr3dr1
= noArray(),OutputArray
dr3dt1
= noArray(),OutputArray
dr3dr2
= noArray(),OutputArray
dr3dt2
= noArray(), OutputArray
dt3dr1
= noArray(),OutputArray
dt3dt1
= noArray(),OutputArray
dt3dr2
= noArray(),OutputArray
dt3dt2
= noArray()
)
cv2.
composeRT
(
rvec1,tvec1,rvec2,tvec2
[
,rvec3
[
,tvec3
[
,dr3dr1
[
,dr3dt1
[
,dr3dr2
[
,dr3dt2
[
,dt3dr1
[
,dt3dt1
[
,dt3dr2
[
,dt3dt2
]
]
]
]
]
]
]
]
]
]
)
→rvec3,tvec3,dr3dr1,dr3dt1,dr3dr2,dr3dt2,dt3dr1,dt3dt1,dt3dr2,dt3dt2
参数: |
|
---|
函数计算:
其中表示对旋转矩阵变换的旋转矢量,并且 表示逆变换。见Rodrigues()
细节。
此外,函数可以计算输出向量相对于输入向量的导数(参见参考资料matMulDeriv()
)。这些函数在里面使用,stereoCalibrate()
但也可以用在你自己的代码中,其中使用Levenberg-Marquardt或其他基于梯度的求解器来优化包含矩阵乘法的函数。
对于立体对的图像中的点,计算另一图像中的对应的线。
void
computeCorrespondEpilines
(
InputArray
points
,int
whichImage
,InputArray
F
,OutputArray
行
)
void
cvComputeCorrespondEpilines
(
const CvMat *
points
,int
which_image
,const CvMat *
fundamental_matrix
,CvMat *
correspondent_lines
)
cv.
ComputeCorrespondEpilines
(
分,whichImage,F,线
)
→无
参数: |
|
---|
对于立体对的两个图像之一中的每个点,函数找出另一个图像中对应的极线的方程。
从基本矩阵定义(请参阅 findFundamentalMat()
),在第一个图像(当)计算为第二个图像中的点 行 :whichImage=1
反之亦然,当whichImage=2
, 从计算 如下:
线系数定义为一个比例。他们正常化,所以 。
将欧几里得的点转换为同质空间。
void
convertPointsToHomogeneous
(
InputArray
src
,OutputArray
dst
)
cv2.
convertPointsToHomogeneous
(
src
[
,dst
]
)
→
参数: |
|
---|
该函数将点从欧几里得转换为齐次空间,方法是将1附加到点坐标元组中。也就是说,每个点都被转换成了。(x1, x2, ..., xn)
(x1, x2, ..., xn, 1)
将点从齐次转换到欧几里得空间。
void
convertPointsFromHomogeneous
(
InputArray
src
,OutputArray
dst
)
cv2.
convertPointsFromHomogeneous
(
src
[
,dst
]
)
→
参数: |
|
---|
该函数使用透视投影将点均匀地转换成欧几里德空间。也就是说,每个点都被转换成了。当,输出点坐标将是。(x1, x2, ... x(n-1), xn)
(x1/xn, x2/xn,..., x(n-1)/xn)
xn=0
(0,0,0,...)
将点转换为齐次坐标。
void
convertPointsHomogeneous
(
InputArray
src
,OutputArray
dst
)
void
cvConvertPointsHomogeneous
(
const CvMat *
src
,CvMat *
dst
)
cv.
ConvertPointsHomogeneous
(
src,dst
)
→
参数: |
|
---|
该函数通过调用convertPointsToHomogeneous()
或来将二维点或三维点转换为齐次坐标convertPointsFromHomogeneous()
。
注意
该功能已过时。改用前面两个函数之一。
细化相应点的坐标。
空隙
correctMatches
(
InputArray
˚F
,InputArray
points1
,InputArray
points2
,OutputArray
newPoints1
,OutputArray
newPoints2
)
cv2.
correctMatches
(
女,points1,points2
[
,newPoints1
[
,newPoints2
]
]
)
→newPoints1,newPoints2
空隙
cvCorrectMatches
(
与CvMat *
˚F
,*与CvMat
points1
,*与CvMat
points2
,*与CvMat
new_points1
,*与CvMat
new_points2
)
参数: |
|
---|
该功能实现了最佳三角剖分法(有关详细信息,请参阅多视图几何图形)。对于每个给定的点对应points1 [I] < - > points2 [i]和一个基本矩阵F,它计算校正后的对应关系newPoints1 [I] < - > newPoints2 [I]最小化的几何误差 (其中 是几何距离在点 和 之间 )受到极线约束。
将投影矩阵分解为旋转矩阵和相机矩阵。
空隙
decomposeProjectionMatrix
(
InputArray
projMatrix
,OutputArray
cameraMatrix
,OutputArray
rotMatrix
,OutputArray
transVect
,OutputArray
rotMatrixX
= noArray(),OutputArray
rotMatrixY
= noArray(),OutputArray
rotMatrixZ
= noArray(),OutputArray
为:eulerAngles
= noArray()
)
cv2.
decomposeProjectionMatrix
(
projMatrix
[
,cameraMatrix
[
,rotMatrix
[
,transVect
[
,rotMatrixX
[
,rotMatrixY
[
,rotMatrixZ
[
,为:eulerAngles
]
]
]
]
]
]
]
)
→cameraMatrix,rotMatrix,transVect,rotMatrixX,rotMatrixY,rotMatrixZ,为:eulerAngles
空隙
cvDecomposeProjectionMatrix
(
常量*与CvMat
projMatr
,*与CvMat
calibMatr
,*与CvMat
rotMatr
,*与CvMat
posVect
,*与CvMat
rotMatrX
= NULL,*与CvMat
rotMatrY
= NULL,*与CvMat
rotMatrZ
= NULL,CvPoint3D64f *
为:eulerAngles
= NULL
)
cv.
DecomposeProjectionMatrix
(
projMatrix,cameraMatrix,rotMatrix,transVect,rotMatrX =无,rotMatrY =无,rotMatrZ =无
)
→为:eulerAngles
参数: |
|
---|
该函数计算投影矩阵分解成校准和旋转矩阵以及相机的位置。
它可以选择返回三个旋转矩阵,每个轴一个,以及可以在OpenGL中使用的三个欧拉角。请注意,总是有三个以上的主轴旋转的顺序,导致相同的方向的一个对象,例如。见[Slabaugh]。返回的树旋转矩阵和相应的三个欧拉角仅是可能的解决方案之一。
该功能是基于 RQDecomp3x3()
。
呈现检测到的棋盘角落。
void
drawChessboardCorners
(
InputOutputArray
图像
,大小
patternSize
,InputArray
角落
,布尔
patternWasFound
)
cv2.
drawChessboardCorners
(
图像,patternSize,拐角,patternWasFound
)
→无
空隙
cvDrawChessboardCorners
(
CvArr *
图像
,CvSize
pattern_size
,CvPoint2D32f *
角
,INT
计数
,INT
pattern_was_found
)
cv.
DrawChessboardCorners
(
图像,patternSize,拐角,patternWasFound
)
→无
参数: |
|
---|
该功能将单独的棋盘角落绘制为红色圆圈(如果没有找到该板),或者如果找到该板,则将其作为彩色拐角与线连接。
查找棋盘内角的位置。
bool
findChessboardCorners
(
InputArray
图像
,大小
patternSize
,OutputArray
角
,int
标志
= CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE
)
cv2.
findChessboardCorners
(
图像,patternSize
[
,角
[
,旗帜
]
]
)
→RETVAL,拐角
INT
cvFindChessboardCorners
(
const的无效*
图像
,CvSize
pattern_size
,CvPoint2D32f *
角
,INT *
corner_count
= NULL,整数
标志
= CV_CALIB_CB_ADAPTIVE_THRESH + CV_CALIB_CB_NORMALIZE_IMAGE
)
cv.
FindChessboardCorners
(
图像,patternSize,旗帜= CV_CALIB_CB_ADAPTIVE_THRESH
)
→拐角
参数: |
|
---|
该函数试图确定输入图像是否是棋盘图案的视图并定位内部棋盘角。如果找到了所有的角点并且它们按照一定的顺序(在每一行中从左到右逐行)被放置,则该函数返回一个非零值。否则,如果函数找不到所有的角或重新排序,则返回0.例如,一个规则的棋盘有8×8的方块和7×7的内角,也就是黑方块相互接触的点。检测到的坐标是近似的,并且更准确地确定它们的位置,函数调用cornerSubPix()
。cornerSubPix()
如果返回的坐标不够准确,也可以使用不同参数的函数。
检测和绘制棋盘角的示例用法:
注意
该功能需要白板(如方形厚的边框,越宽越好)围绕电路板,使检测更加强大的各种环境。否则,如果没有边界且背景是黑暗的,则外部黑色方块不能被正确分割,因此方形分组和排序算法失败。
在圈子网格中查找中心。
布尔
findCirclesGrid
(
InputArray
图像
,尺寸
patternSize
,OutputArray
中心
,整数
标志
= CALIB_CB_SYMMETRIC_GRID,常量PTR
cv2.
findCirclesGridDefault
(
image,patternSize
[
,centers
[
,flags
]
]
)
→retval,居中
参数: |
|
---|
该函数尝试确定输入图像是否包含圆形网格。如果是,则该函数定位圆的中心。如果找到了所有的中心,并且它们按照特定的顺序(在每一行中从左到右逐行排列)放置,则该函数返回一个非零值。否则,如果函数找不到所有的角或者重新排序,它将返回0。
检测和绘制圆心的示例用法:
注意
该功能需要白板(如方形厚的边框,越宽越好)围绕电路板,使检测更加强大的各种环境。
从3D-2D点对应中查找对象姿势。
bool
solvePnP
(
InputArray
objectPoints
,InputArray
imagePoints
,InputArray
cameraMatrix
,InputArray
distCoeffs
,OutputArray
rvec
,OutputArray
tvec
,bool
useExtrinsicGuess
= false,int
flags
= ITERATIVE
)
cv2.
solvePnP
(
objectPoints,imagePoints,cameraMatrix,distCoeffs
[
,RVEC
[
,tvec
[
,useExtrinsicGuess
[
,旗帜
]
]
]
]
)
→RETVAL,RVEC,tvec
空隙
cvFindExtrinsicCameraParams2
(
常量*与CvMat
object_points
,常量*与CvMat
image_points
,常量*与CvMat
camera_matrix
,常量*与CvMat
distortion_coeffs
,*与CvMat
rotation_vector
,*与CvMat
translation_vector
,INT
use_extrinsic_guess
= 0
)
cv.
FindExtrinsicCameraParams2
(
objectPoints,imagePoints,cameraMatrix,distCoeffs,RVEC,tvec,useExtrinsicGuess = 0
)
→无
参数: |
|
---|
该函数在给定一组目标点,它们对应的图像投影以及相机矩阵和失真系数的情况下估计目标姿态。
注意
使用RANSAC方案从3D-2D点对应中查找对象姿态。
空隙
solvePnPRansac
(
InputArray
objectPoints
,InputArray
imagePoints
,InputArray
cameraMatrix
,InputArray
distCoeffs
,OutputArray
RVEC
,OutputArray
tvec
,布尔
useExtrinsicGuess
=假,INT
iterationsCount
= 100,浮
reprojectionError
= 8.0,INT
minInliersCount
= 100,OutputArray
内围层
= noArray(),INT
flags
= ITERATIVE
)
cv2.
solvePnPRansac
(
objectPoints,imagePoints,cameraMatrix,distCoeffs
[
,RVEC
[
,tvec
[
,useExtrinsicGuess
[
,iterationsCount
[
,reprojectionError
[
,minInliersCount
[
,内点
[
,旗帜
]
]
]
]
]
]
]
]
)
→RVEC,tvec,内围层
参数: |
|
---|
该函数在给定一组目标点,它们对应的图像投影以及相机矩阵和失真系数的情况下估计目标姿态。这个函数找到了这样一个姿态,使重投影误差最小化,也就是观察到的投影imagePoints
与投影(使用 projectPoints()
)之间的平方和的总和objectPoints
。RANSAC的使用使该功能可以抵抗异常值。该功能与TBB库并行。
根据两幅图像中的相应点计算基本矩阵。
垫
findFundamentalMat
(
InputArray
points1
,InputArray
points2
,INT
方法
= FM_RANSAC,双
参数1
。= 3,双
param2的
= 0.99,OutputArray
掩模
= noArray()
)
cv2.
findFundamentalMat
(
points1,points2
[
,method
[
,param1
[
,param2
[
,mask
]
]
]
]
)
→retval,
INT
cvFindFundamentalMat
(
常量*与CvMat
points1
,常量*与CvMat
points2
,*与CvMat
fundamental_matrix
,INT
方法
= CV_FM_RANSAC,双
参数1
。= 3,双
param2的
= 0.99,*与CvMat
状态
= NULL
)
cv.
FindFundamentalMat
(
points1,points2,fundamentalMatrix,方法= CV_FM_RANSAC,参数1 = 1,参数2 = 0.99,状态=无。
)
→RETVAL
参数: |
|
---|
对极几何由以下等式描述:
其中 是一个基本矩阵, 和 分别对应于所述第一和第二图像,分。
该函数使用上面列出的四种方法之一计算基本矩阵,并返回找到的基本矩阵。通常只找到一个矩阵。但是在7点算法的情况下,函数最多可以返回3个解( 矩阵可以存储所有3个矩阵)。
所计算的基本矩阵可以进一步传递到 computeCorrespondEpilines()
找到对应于指定点的极线。也可以通过 stereoRectifyUncalibrated()
计算整改转化。
找到两架飞机之间的角度转换。
Mat
findHomography
(
InputArray
srcPoints
,InputArray
dstPoints
,int
方法
= 0,double
ransacReprojThreshold
= 3,OutputArray
mask
= noArray()
)
cv2.
findHomography
(
srcPoints,dstPoints
[
,方法
[
,ransacReprojThreshold
[
,面罩
]
]
]
)
→RETVAL,掩模
int
cvFindHomography
(
const CvMat *
src_points
,const CvMat *
dst_points
,CvMat *
单应性
,int
方法
= 0,double
ransacReprojThreshold
= 3,CvMat *
mask
= 0
)
cv.
FindHomography
(
srcPoints,dstPoints,H,方法= 0,ransacReprojThreshold = 3.0,状态=无
)
→无
参数: |
|
---|
函数查找并返回源平面和目标平面之间的透视转换:
使反投影错误
被最小化。如果参数method
设置为默认值0,则该函数使用所有的点对以简单的最小二乘方案计算初始单应性估计。
然而,如果不是所有的点对( ,)都符合刚性透视变换(即有一些异常值),那么这个初始估计就会很差。在这种情况下,您可以使用两种健壮的方法之一。这两种方法,RANSAC
并且LMeDS
,尝试对应点对(的各4对)的许多不同的随机子集,使用这种子集和一个简单的最小二乘法估计的单应矩阵,然后计算所计算的单应性的质量/善(其是RANSAC的内点数或LMeD的中值重投影误差)。然后使用最佳子集来产生单应矩阵的初始估计和内点/外点的掩码。
不管方法是否稳健,计算的单应性矩阵都用Levenberg-Marquardt方法进一步细化(仅在强健方法的情况下使用inlier)以更多地减少再投影误差。
该方法RANSAC
几乎可以处理任何异常值的比率,但是需要一个阈值来区分异常值和异常值。该方法LMeDS
不需要任何阈值,但只有在超过50%的内部值时才能正确工作。最后,如果没有异常值且噪声相当小,则使用默认方法(method=0
)。
该函数用于查找初始内在和外在矩阵。Homography矩阵决定一个规模。因此,这是正常化的 。请注意,无法估计H矩阵时,将返回一个空矩阵。
也可以看看
getAffineTransform()
, getPerspectiveTransform()
, estimateRigidTransform()
, warpPerspective()
, perspectiveTransform()
注意
计算两个三维点集之间的最佳仿射变换。
int
estimateAffine3D
(
InputArray
src
,InputArray
dst
,OutputArray
out
,OutputArray
inliers
,double
ransacThreshold
= 3,double
confidence
= 0.99
)
cv2.
estimateAffine3D
(
SRC,DST
[
,出
[
,内点
[
,ransacThreshold
[
,信心
]
]
]
]
)
→RETVAL,指出,内围层
参数: |
|
---|
该函数使用RANSAC算法估计两个3D点集之间的最佳3D仿射变换。
滤除视差图中的小噪声斑点(斑点)
void
filterSpeckles
(
InputOutputArray
img
,double
newVal
,int
maxSpeckleSize
,double
maxDiff
,InputOutputArray
buf
= noArray()
)
cv2.
filterSpeckles
(
img,newVal,maxSpeckleSize,maxDiff
[
,buf
]
)
→无
参数: |
|
---|
根据自由缩放参数返回新的相机矩阵。
Mat
getOptimalNewCameraMatrix
(
InputArray
cameraMatrix
,InputArray
distCoeffs
,Size
imageSize
,double
alpha
,Size
newImgSize
= Size(),Rect *
validPixROI
= 0,bool
centerPrincipalPoint
= false
)
cv2.
getOptimalNewCameraMatrix
(
cameraMatrix,distCoeffs,IMAGESIZE,α-
[
,newImgSize
[
,centerPrincipalPoint
]
]
)
→RETVAL,validPixROI
空隙
cvGetOptimalNewCameraMatrix
(
常量*与CvMat
camera_matrix
,常量*与CvMat
dist_coeffs
,CvSize
IMAGE_SIZE
,双
阿尔法
,*与CvMat
new_camera_matrix
,CvSize
new_imag_size
= cvSize(0,0),CvRect *
valid_pixel_ROI
= 0,INT
center_principal_point
= 0
)
cv.
GetOptimalNewCameraMatrix
(
cameraMatrix,distCoeffs,IMAGESIZE,α,newCameraMatrix,newImageSize =(0,0),validPixROI = 0,centerPrincipalPoint = 0
)
→无
参数: |
|
---|
该功能根据自由缩放参数计算并返回最佳的新相机矩阵。通过改变这个参数,你可以只检索合适的像素alpha=0
,如果在角落里有有价值的信息alpha=1
,或者在两者之间得到一些东西,就保留所有的原始图像像素。当alpha>0
失真结果可能具有对应于所捕获的失真图像之外的“虚拟”像素的一些黑色像素时。原始摄像机矩阵,失真系数,计算出的新摄像机矩阵,并newImageSize
应传递 initUndistortRectifyMap()
给产生的地图 remap()
。
从3D-2D点对应中查找初始相机矩阵。
垫
initCameraMatrix2D
(
InputArrayOfArrays
objectPoints
,InputArrayOfArrays
imagePoints
,尺寸
IMAGESIZE
,双
的aspectRatio
= 1。
)
cv2.
initCameraMatrix2D
(
objectPoints,imagePoints,IMAGESIZE
[
,的aspectRatio
]
)
→RETVAL
空隙
cvInitIntrinsicParams2D
(
常量*与CvMat
object_points
,常量*与CvMat
image_points
,常量*与CvMat
npoints
,CvSize
IMAGE_SIZE
,*与CvMat
camera_matrix
,双
ASPECT_RATIO
= 1。
)
cv.
InitIntrinsicParams2D
(
objectPoints,imagePoints,npoints,IMAGESIZE,cameraMatrix,的aspectRatio = 1。
)
→无
参数: |
|
---|
该功能估算并返回相机校准过程的初始相机矩阵。目前,该功能仅支持平面校准图案,这是每个物点具有z坐标= 0的图案。
计算每个乘法矩阵的矩阵乘积的偏导数。
void
matMulDeriv
(
InputArray
A
,InputArray
B
,OutputArray
dABdA
,OutputArray
dABdB
)
cv2.
matMulDeriv
(
A,B
[
,dABdA
[
,dABdB
]
]
)
→dABdA,dABdB
参数: |
|
---|
该函数针对两个输入矩阵中的每一个的元素来计算矩阵积的元素的偏导 数。该函数用于计算雅可比矩阵, stereoCalibrate()
但也可用于任何其他类似的优化函数。
项目3D指向图像平面。
void
projectPoints
(
InputArray
objectPoints
,InputArray
rvec
,InputArray
tvec
,InputArray
cameraMatrix
,InputArray
distCoeffs
,OutputArray
imagePoints
,OutputArray
jacobian
= noArray(),double
aspectRatio
= 0
)
cv2.
projectPoints
(
objectPoints,RVEC,tvec,cameraMatrix,distCoeffs
[
,imagePoints
[
,雅可比
[
,的aspectRatio
]
]
]
)
→imagePoints,雅可比
void
cvProjectPoints2
(
const CvMat *
object_points
,const CvMat *
rotation_vector
,const CvMat *
translation_vector
,const CvMat *
camera_matrix
,const CvMat *
distortion_coeffs
,CvMat *
image_points
,CvMat *
dpdrot
= NULL,CvMat *
dpdt
= NULL,CvMat *
dpdf
= NULL ,CvMat *
dpdc
= NULL,CvMat *
dpddist
= NULL,double
aspect_ratio
= 0
)
cv.
ProjectPoints2
(
objectPoints,RVEC,tvec,cameraMatrix,distCoeffs,imagePoints,dpdrot =无,DPDT =无,dpdf =无,DPDC =无,dpddist =无
)
→无
该功能计算给定固有和非固有摄像机参数的三维点到图像平面的投影。可选地,该函数针对特定参数(内在的和/或外在的)计算图像点坐标的偏导数的雅可比矩阵(作为所有输入参数的函数)。在雅可比在全局优化过程中使用 calibrateCamera()
, solvePnP()
和 stereoCalibrate()
。考虑到当前的内部和外部参数,函数本身也可以用来计算重新投影误差。
注意
通过设置rvec=tvec=(0,0,0)
或设置cameraMatrix
为3×3的单位矩阵,或通过零失真系数,可以得到各种有用的功能部分情况。这意味着您可以计算稀疏点集的失真坐标,或者在理想的零失真设置中应用透视变换(并计算导数)。
将差异图像重新投影到3D空间。
void
reprojectImageTo3D
(
InputArray
disparity
,OutputArray
_3dImage
,InputArray
Q
,bool
handleMissingValues
= false,int
ddepth
= -1
)
cv2.
reprojectImageTo3D
(
视差,Q
[
,_3dImage
[
,handleMissingValues
[
,ddepth
]
]
]
)
→_3dImage
空隙
cvReprojectImageTo3D
(
常量CvArr *
disparityImage
,CvArr *
_3dImage
,常量与CvMat *
Q
,INT
handleMissingValues
= 0
)
cv.
ReprojectImageTo3D
(
视差,_3dImage,Q,handleMissingValues = 0
)
→无
参数: |
|
---|
该功能将单通道视差图转换成代表3D表面的3通道图像。也就是说,对于每个像素(x,y)
和相应的视差d=disparity(x,y)
,它计算:
该矩阵Q
可以是任意 矩阵(例如,通过计算的矩阵 stereoRectify()
)。要将一组稀疏的点{(x,y,d),...}重新映射到三维空间,请使用perspectiveTransform()
。
计算3x3矩阵的RQ分解。
Vec3d
RQDecomp3x3
(
InputArray
src
,OutputArray
mtxR
,OutputArray
mtxQ
,OutputArray
Qx
= noArray(),OutputArray
Qy
= noArray(),OutputArray
Qz
= noArray()
)
cv2.
RQDecomp3x3
(
SRC
[
,mtxR
[
,mtxQ
[
,QX
[
,QY
[
,QZ
]
]
]
]
]
)
→RETVAL,mtxR,mtxQ,QX,QY,QZ
空隙
cvRQDecomp3x3
(
常量*与CvMat
matrixM
,*与CvMat
matrixR
,*与CvMat
matrixQ
,*与CvMat
matrixQx
= NULL,*与CvMat
matrixQy
= NULL,*与CvMat
matrixQz
= NULL,CvPoint3D64f *
为:eulerAngles
= NULL
)
cv.
RQDecomp3x3
(
M,R,Q,QX =无,QY =无,QZ =无
)
→为:eulerAngles
参数: |
|
---|
该函数使用给定的旋转计算RQ分解。该函数用于 decomposeProjectionMatrix()
将投影矩阵的左侧3x3子矩阵分解为相机和旋转矩阵。
它可以选择返回三个旋转矩阵,每个轴一个,以及可以在OpenGL中使用的以度为单位的三个欧拉角(作为返回值)。请注意,总是有三个以上的主轴旋转的顺序,导致相同的方向的一个对象,例如。见[Slabaugh]。返回的树旋转矩阵和相应的三个欧拉角仅是可能的解决方案之一。
将旋转矩阵转换为旋转矢量,反之亦然。
void
Rodrigues
(
InputArray
src
,OutputArray
dst
,OutputArray
jacobian
= noArray()
)
cv2.
Rodrigues
(
SRC
[
,DST
[
,雅可比
]
]
)
→DST,雅可比
int
cvRodrigues2
(
const CvMat *
src
,CvMat *
dst
,CvMat *
jacobian
= 0
)
cv.
Rodrigues2
(
SRC,DST,雅可比= 0
)
→无
参数: |
|
---|
反转换也可以很容易完成,因为
旋转矢量是旋转矩阵的一种方便和最紧凑的表示(因为任何旋转矩阵只有3个自由度)。表现形式为全球3D几何优化程序一样使用calibrateCamera()
, stereoCalibrate()
或 solvePnP()
。
StereoBM
使用块匹配算法计算立体对应的类。
该类是相关函数的C ++包装器。特别StereoBM::operator()
是包装 cvFindStereoCorrespondenceBM()
。
构造函数
StereoBM::
StereoBM
StereoBM::
StereoBM
(
INT
预置
,INT
ndisparities
= 0,INT
SADWindowSize
= 21
)
cv2.
StereoBM
(
[
preset
[
,ndisparities
[
,SADWindowSize
]
]
]
)
→
CvStereoBMState *
cvCreateStereoBMState
(
int
preset
= CV_STEREO_BM_BASIC,int
numberOfDisparities
= 0
)
cv.
CreateStereoBMState
(
预设= CV_STEREO_BM_BASIC,numberOfDisparities = 0
)
→CvStereoBMState
参数: |
|
---|
构造函数初始化StereoBM
状态。然后可以调用StereoBM::operator()
计算特定立体声对的差异。
注意
在C API中,CvStereoBM
当不再需要使用状态时,需要释放状态cvReleaseStereoBMState(&stereobm)
。
使用BM算法计算校正立体声对的差异。
void
StereoBM::
operator()
(
InputArray
left
,InputArray
right
,OutputArray
disparity
,int
disptype
= CV_16S
)
cv2.StereoBM.
compute
(
左,右
[
视差
[
,disptype
]
]
)
→视差
void
cvFindStereoCorrespondenceBM
(
const CvArr *
left
,const CvArr *
right
,CvArr *
disparity
,CvStereoBMState *
state
)
cv.
FindStereoCorrespondenceBM
(
左,右,差距,状态
)
→无
参数: |
|
---|
该方法在整流立体声对上执行BM算法。请参阅stereo_match.cpp
OpenCV示例以了解如何准备映像并调用该方法。请注意,该方法是不恒定的,因此你不应该StereoBM
在不同的线程同时使用同一个实例。该功能与TBB库并行。
StereoSGBM
使用半全局块匹配算法计算立体对应的类。
该类实现了修改后的H. Hirschmuller算法[HH08],与以前的算法不同,如下所示:
- 默认情况下,算法是单通道,这意味着您只考虑5个方向而不是8个。设置
fullDP=true
为运行算法的完整变体,但要注意可能会消耗大量内存。- 该算法匹配块,而不是单个像素。虽然,设置
SADWindowSize=1
减少块为单个像素。- 互信息成本函数没有实现。相反,使用[BT98]中更简单的Birchfield-Tomasi子像素度量。虽然,彩色图像也支持。
StereoBM::operator()
包括K. Konolige算法的一些预处理和后处理步骤,例如:预滤波(CV_STEREO_BM_XSOBEL
类型)和后滤波(唯一性检查,二次插值和斑点滤波)。
注意
StereoSGBM::
StereoSGBM
StereoSGBM::
StereoSGBM
(
INT
minDisparity
,INT
numDisparities
,INT
SADWindowSize
,INT
P1
= 0,INT
P2
= 0,INT
disp12MaxDiff
= 0,INT
preFilterCap
= 0,INT
uniquenessRatio
= 0,INT
speckleWindowSize
= 0,INT
speckleRange
= 0,布尔
fullDP
=假
)
cv2.
StereoSGBM
(
[
minDisparity,numDisparities,SADWindowSize
[
,P1
[
,P2
[
,disp12MaxDiff
[
,preFilterCap
[
,uniquenessRatio
[
,speckleWindowSize
[
,speckleRange
[
,fullDP
]
]
]
]
]
]
]
]
]
)
→初始化StereoSGBM
并将参数设置为自定义值。
参数: |
|
---|
第一个构造函数StereoSGBM
使用所有的默认参数进行初始化。所以,你只需要设置StereoSGBM::numberOfDisparities
最低限度。第二个构造函数使您可以将每个参数设置为一个自定义值。
void
StereoSGBM::
operator()
(
InputArray
left
,InputArray
right
,OutputArray
disp
)
cv2.StereoSGBM.
compute
(
左,右
[
,DISP
]
)
→DISP
使用SGBM算法计算整幅立体对的差异。
参数: |
|
---|
该方法在整流的立体声对上执行SGBM算法。有关stereo_match.cpp
如何准备图像并调用方法,请参阅OpenCV示例。
注意
该方法不是一成不变的,所以你不应该StereoSGBM
从不同的线程同时使用同一个实例。
校准立体相机。
双
stereoCalibrate
(
InputArrayOfArrays
objectPoints
,InputArrayOfArrays
imagePoints1
,InputArrayOfArrays
imagePoints2
,InputOutputArray
cameraMatrix1
,InputOutputArray
distCoeffs1
,InputOutputArray
cameraMatrix2
,InputOutputArray
distCoeffs2
,尺寸
IMAGESIZE
,OutputArray
- [R
,OutputArray
Ť
,OutputArray
ê
,OutputArray
˚F
,TermCriteria
标准
= TermCriteria(TermCriteria :: COUNT + TermCriteria :: EPS,30,1e-6),int
flags
= CALIB_FIX_INTRINSIC
)
cv2.
stereoCalibrate
(
objectPoints,imagePoints1,imagePoints2,imageSize
[
,cameraMatrix1
[
,distCoeffs1
[
,cameraMatrix2
[
,distCoeffs2
[
,R
[
,T
[
,E
[
,F
[
,criteria
[
,flags
]
]
]
]
]
]
]
]
]
]]
)
→RETVAL,cameraMatrix1,distCoeffs1,cameraMatrix2,distCoeffs2,R,T,E,F
double
cvStereoCalibrate
(
const CvMat *
object_points
,const CvMat *
image_points1
,const CvMat *
image_points2
,const CvMat *
npoints
,CvMat *
camera_matrix1
,CvMat *
dist_coeffs1
,CvMat *
camera_matrix2
,CvMat *
dist_coeffs2
,CvSize
image_size
,CvMat *
R
,CvMat *
T
,与CvMat *
ë
= 0,*与CvMat
˚F
= 0,CvTermCriteria
term_crit
= cvTermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS,30,1e-6),整数
标志
= CV_CALIB_FIX_INTRINSIC
)
cv.
StereoCalibrate
(
objectPoints,imagePoints1,imagePoints2,pointCounts,cameraMatrix1,distCoeffs1,cameraMatrix2,distCoeffs2,imageSize,R,T,E = None,F = None,term_crit =(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS,30,1e-6),flags = CV_CALIB_FIX_INTRINSIC
)
→无
参数: |
|
---|
该功能估计两个摄像机之间的转换成立体声对。如果您有一台立体相机,其中两台相机的相对位置和方向是固定的,并且如果您计算了一个物体相对于第一台相机和第二台相机的姿势(R1,T1)和(R2,T2) (这可以完成 solvePnP()
),那么这些姿势肯定是相互关联的。这意味着,给定(,:数学:T_1),应该可以计算( ,:数学:T_2)。您只需要知道第二台摄像机相对于第一台摄像机的位置和方向。这是所描述的功能所做的。它计算( ,:数学:T),以便:
可选地,它计算基本矩阵E:
这里 是平移矢量的分量 : 。该函数还可以计算基本矩阵F:
除了立体声相关信息之外,该功能还可以对两台摄像机进行全面校准。但是,由于输入数据中的参数空间和噪声的高维度,函数可能偏离正确的解决方案。如果可以为每个摄像机单独(例如,使用calibrateCamera()
)高精度地估计内部参数 ,则建议您这样做,然后将CV_CALIB_FIX_INTRINSIC
标志与所计算的内部参数一起传递给函数。否则,如果所有的参数都是一次估计的,那么限制一些参数是合理的,例如pass CV_CALIB_SAME_FOCAL_LENGTH
和CV_CALIB_ZERO_TANGENT_DIST
flags,这通常是一个合理的假设。
类似地calibrateCamera()
,该功能使来自两个相机的所有可用视图中的所有点的总的重新投影误差最小化。该函数返回重新投影错误的最终值。
计算校准立体相机的每个头部的校正变换。
空隙
stereoRectify
(
InputArray
cameraMatrix1
,InputArray
distCoeffs1
,InputArray
cameraMatrix2
,InputArray
distCoeffs2
,尺寸
IMAGESIZE
,InputArray
- [R
,InputArray
Ť
,OutputArray
R1
,OutputArray
R2
,OutputArray
P1
,OutputArray
P2
,OutputArray
Q
,整数
标志
= CALIB_ZERO_DISPARITY,双
阿尔法
= -1 ,大小
newImageSize
= Size(),Rect *
validPixROI1
= 0,Rect *
validPixROI2
= 0
)
void
cvStereoRectify
(
const CvMat *
camera_matrix1
,const CvMat *
camera_matrix2
,const CvMat *
dist_coeffs1
,const CvMat *
dist_coeffs2
,CvSize
image_size
,const CvMat *
R
,const CvMat *
T
,CvMat *
R1
,CvMat *
R2
,CvMat *
P1
,CvMat *
P2
,CvMat *
Q
= 0,int
flags
= CV_CALIB_ZERO_DISPARITY,double
alpha
= -1,CvSize
new_image_size
= cvSize(0,0),CvRect *
valid_pix_ROI1
= 0,CvRect *
valid_pix_ROI2
= 0
)
cv.
StereoRectify
(
cameraMatrix1,cameraMatrix2,distCoeffs1,distCoeffs2,IMAGESIZE,R,T,R1,R2,P1,P2,Q =无,标志= CV_CALIB_ZERO_DISPARITY,α-= -1,newImageSize =(0,0)) - >(ROI1 ,roi2
)
参数: |
|
---|
该功能计算每个摄像机的旋转矩阵(虚拟)使两个摄像机图像平面在同一平面上。因此,这使得所有的核线平行,从而简化了密集的立体对应问题。该函数将stereoCalibrate()
输入的矩阵计算出来 。作为输出,它在新坐标中提供了两个旋转矩阵和两个投影矩阵。该功能区分以下两种情况:
水平立体声:第一个和第二个摄像机视图主要沿x轴相对移动(可能有小的垂直位移)。在校正的图像中,左侧和右侧相机中对应的极线是水平的并且具有相同的y坐标。P1和P2看起来像:
哪里 是相机之间的水平移动, 如果CV_CALIB_ZERO_DISPARITY
设置。
垂直立体声:第一和第二摄像机视图主要在垂直方向上彼此相对移动(也可能在水平方向上稍微移动一点)。校正图像中的核线是垂直的并具有相同的x坐标。P1和P2看起来像:
其中 在摄影机间和垂直移位 如果CALIB_ZERO_DISPARITY
被设置。
正如你所看到的,前三列P1
和P2
将有效地成为新的“纠正”相机矩阵。然后可以将这些矩阵与R1
和一起R2
传递 initUndistortRectifyMap()
给初始化每个摄像机的校正图。
从stereo_calib.cpp
示例中看下面的截图。一些红色的水平线穿过相应的图像区域。这意味着图像很好地纠正了,这是大多数立体声对应算法所依赖的。绿色的矩形是roi1
和roi2
。你看到他们的内部都是有效的像素。
计算未校准的立体相机的校正变换。
布尔
stereoRectifyUncalibrated
(
InputArray
points1
,InputArray
points2
,InputArray
˚F
,尺寸
imgSize
,OutputArray
H1
,OutputArray
H2
,双
阈值
= 5
)
cv2.
stereoRectifyUncalibrated
(
points1,points2,F,imgSize
[
,H1
[
,H2
[
,阈
]
]
]
)
→RETVAL,H1,H2
INT
cvStereoRectifyUncalibrated
(
常量*与CvMat
points1
,常量*与CvMat
points2
,常量与CvMat *
˚F
,CvSize
img_size
,*与CvMat
H1
,与CvMat *
H2
,双
阈值
= 5
)
cv.
StereoRectifyUncalibrated
(
points1,points2,F,imageSize,H1,H2,threshold = 5
)
→
参数: |
|
---|
该功能在不知道相机的内在参数及其在空间中的相对位置的情况下计算整流变换,这解释了后缀“未校准”。另一个与之不同的地方 stereoRectify()
在于,函数不是输出对象(3D)空间中的整形变换,而是输出单应矩阵H1
和平面的平面透视变换H2
。该函数实现了算法 [Hartley99]。
注意
虽然该算法不需要知道摄像机的内部参数,但它极大地依赖于极线几何。因此,如果摄像机镜头有明显的失真,在计算基本矩阵和调用这个函数之前,最好纠正它。例如,可以通过使用分别为立体相机的每个头部估计失真系数calibrateCamera()
。然后,图像可以使用校正undistort()
,或只是点坐标可以纠正undistortPoints()
。
通过三角测量重建点。
void
triangulatePoints
(
InputArray
projMatr1
,InputArray
projMatr2
,InputArray
projPoints1
,InputArray
projPoints2
,OutputArray
points4D
)
cv2.
triangulatePoints
(
projMatr1,projMatr2,projPoints1,projPoints2
[
,points4D
]
)
→points4D
void
cvTriangulatePoints
(
CvMat *
projMatr1
,CvMat *
projMatr2
,CvMat *
projPoints1
,CvMat *
projPoints2
,CvMat *
points4D
)
参数: |
|
---|
该函数通过使用立体相机的观察来重建三维点(在齐次坐标中)。投影矩阵可以从中获得stereoRectify()
。
注意
请记住,所有的输入数据都应该是浮点型的,以便这个函数能够工作。
也可以看看
reprojectImageTo3D()
这个命名空间中的方法使用所谓的鱼眼相机模型。
定义:设P是世界坐标系X(存储在矩阵X中)中坐标X的三维点。相机坐标系中P的坐标向量为:
center
其中R是与旋转向量om对应的旋转矩阵:R = rodrigues(om); 调用x,y和z Xc的3个坐标:
center
P的松孔投影坐标是[a; b]在哪里
center
鱼眼畸变:
center
失真的点坐标是[x'; y']在哪里
..class :: center ..数学:
最后,转换成像素坐标:最后的像素坐标矢量[u; v]其中:
center
项目要点使用鱼眼模型
void
fisheye::
projectPoints
(
InputArray
objectPoints
,OutputArray
imagePoints
,const Affine3d&
affine
,InputArray
K
,InputArray
D
,double
alpha
= 0,OutputArray
jacobian
= noArray()
)
void
fisheye::
projectPoints
(
InputArray
objectPoints
,OutputArray
imagePoints
,InputArray
rvec
,InputArray
tvec
,InputArray
K
,InputArray
D
,double
alpha
= 0,OutputArray
jacobian
= noArray()
)
参数: |
---|
该功能计算给定固有和非固有摄像机参数的三维点到图像平面的投影。可选地,该函数针对特定参数(内在的和/或外在的)计算图像点坐标的偏导数的雅可比矩阵(作为所有输入参数的函数)。
使用鱼眼模型扭曲2D点。
使用鱼眼模型来防止2D点
空隙
fisheye::
undistortPoints
(
InputArray
扭曲
,OutputArray
不失真
,InputArray
ķ
,InputArray
d
,InputArray
- [R
= noArray(),InputArray
P
= noArray()
)
参数: |
---|
通过cv :: remap()计算图像变形的失真和校正图。如果D是空的,则使用零失真,如果R或P为空,则使用单位矩阵。
void
fisheye::
initUndistortRectifyMap
(
InputArray
K
,InputArray
D
,InputArray
R
,InputArray
P
,const cv :: Size&
size
,int
m1type
,OutputArray
map1
,OutputArray
map2
)
参数: |
---|
转换图像以补偿鱼眼镜头失真。
空隙
fisheye::
undistortImage
(
InputArray
扭曲
,OutputArray
不失真
,InputArray
ķ
,InputArray
d
,InputArray
自知
= CV :: noArray(),常量大小和
new_size
=尺寸()
)
参数: |
---|
该功能转换图像以补偿径向和切向镜头失真。
该函数只是 fisheye::initUndistortRectifyMap()
(具有统一性R
)和 remap()
(具有双线性内插)的组合。有关正在执行的转换的详细信息,请参阅前一个函数。
undistort()
透视相机模型的结果(在校准下优化所有可能的失真系数(k_1,k_2,k_3,k_4,k_5,k_6)fisheye::undistortImage()
鱼眼相机模型的结果(在校准下优化鱼眼失真的所有可能的系数(k_1,k_2,k_3,k_4)图片a)和b)几乎一样。但是如果我们考虑远离图像中心的图像点,我们可以注意到在图像a)上这些点是失真的。
估算新的相机矩阵的失真或纠正。
void
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
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
)
参数: |
|
---|
执行相机校准
double
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)
)
执行立体声校准
双
fisheye::
stereoCalibrate
(
InputArrayOfArrays
objectPoints
,InputArrayOfArrays
imagePoints1
,InputArrayOfArrays
imagePoints2
,InputOutputArray
K1
,InputOutputArray
D1
,InputOutputArray
K2
,InputOutputArray
D2
,尺寸
IMAGESIZE
,OutputArray
- [R
,OutputArray
Ť
,整数
标志
= CALIB_FIX_INTRINSIC,TermCriteria
标准
= TermCriteria(TermCriteria :: COUNT + TermCriteria :: EPS,100,DBL_EPSILON)
)
参数: |
|
---|
[BT98] | Birchfield,S.和Tomasi,C。对图像采样不敏感的像素相异度量。IEEE模式分析与机器智能汇刊。1998年。 |
[BouguetMCT] | JYBouguet。MATLAB校准工具。http://www.vision.caltech.edu/bouguetj/calib_doc/ |
[Hartley99] | Hartley,RI,“投射矫正的理论与实践”。IJCV 35 2,pp 115-127(1999) |
[HH08] | Hirschmuller,H.Stereo Processing by Semiglobal Matching and Mutual Information,PAMI(30),第2期,2008年2月,第328-341页。 |
[Slabaugh] | (1,2) Slabaugh,GG计算欧拉从旋转矩阵角。http://www.soi.city.ac.uk/~sbbh653/publications/euler.pdf(已核实:2013-04-15) |
[Zhang2000] |
|