1. 函数的参数说明
stereoRectify的函数原型如下:
void cv::stereoRectify ( InputArray cameraMatrix1,
InputArray distCoeffs1,
InputArray cameraMatrix2,
InputArray distCoeffs2,
Size imageSize,
InputArray R,
InputArray T,
OutputArray R1,
OutputArray R2,
OutputArray P1,
OutputArray P2,
OutputArray Q,
int flags = CALIB_ZERO_DISPARITY,
double alpha = -1,
Size newImageSize = Size(),
Rect * validPixROI1 = 0,
Rect * validPixROI2 = 0
)
出参P1的含义
出参P2的含义
出参Q的含义
是基线
2. alpha 参数
和其他函数的alphas参数含义一致,是个缩放参数,默认值为-1.
当alpha为 -1 时, 函数执行默认缩放(fx/fy基本不变,但会把fx/fy的数值计算为同一个数值)。
否则alpha应为 [0,1],0和1的含义如下,(0, 1)则是两者之间
0:矫正图像会放大和平移使得最终图像中只有有效像素;
1:图像会缩小和平移使得原始图像中所有像素都可见
当图像发生缩放了,相应的内参就需要变化,可通过stereoRectify的出参投影矩阵P获取获取新内参。
stereoRectify之后使用initUndistortRectifyMap来生成remap的映射表时,initUndistortRectifyMap的NewCameraMatrix参数使用的就是stereoRectify的出参P。
下图是在实际项目中使用不同alpha参数的输出结果:
当alpha为-1时,内参基本不变,但是有微调,都会把fx和fy计算成一致;
当alpha为0时,fx和fy会放大,使得图像中只有有效像素。
3. flags 参数
一般设置cv::CALIB_ZERO_DISPARITY
目前有两种值:cv::CALIB_ZERO_DISPARITY 和 0
cv::CALIB_ZERO_DISPARITY : 如其名,是设置相同主点,所以左右相机的cx和cy是分别一致的,但是会缩小共同视野
0 : 会最大化公共视野,但是左右相机的cx会不同,所以从视差计算深度时,实际视差需要有个offset(cx1-cx2)
下图是在实际项目中使用不同 flags 参数的输出结果:
当 flags 为CALIB_ZERO_DISPARITY时,从pl和pr中可见左右相机的cx和cy分别一致;
当 flags 为0时,从pl和pr中可见左右相机的cx不相等了。








网友评论