美文网首页
OpenCV中stereoRectify函数的alpha参数和f

OpenCV中stereoRectify函数的alpha参数和f

作者: book_02 | 来源:发表于2024-05-01 12:47 被阅读0次

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的含义
P1= \begin{bmatrix} f & 0 & cx_1 & 0 \\ 0 & f & cy & 0 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix}

出参P2的含义
P2= \begin{bmatrix} f & 0 & cx_2 & T_x*f \\ 0 & f & cy & 0 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix}

出参Q的含义
Q= \begin{bmatrix} 1 & 0 & 0 & -cx_1 \\ 0 & 1 & 0 & -cy \\ 0 & 0 & 1 & f \\ 0 & 0 & -\frac{1}{T_x} & \frac{cx_1-cx_2}{T_x} \\ \end{bmatrix}
T_x是基线

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不相等了。

相关文章

网友评论

      本文标题:OpenCV中stereoRectify函数的alpha参数和f

      本文链接:https://www.haomeiwen.com/subject/zimffjtx.html