什么叫做立体矫正
我理解就是将两个相机的画面进行一系列的矫正,最后的结果就是确保空间中的同一个点在左右相机相机的图片中位于同一行,也就是说空间中的一个点,在左相机的图片中是在90行,那么在右相机中也需要是90行。
这个是有理论支撑的,基于双目系统中的极线约束,有兴趣可以向AI了解一下。

上图所示的左右相机两张图片在经过立体矫正之后,对应点的像素是在同一行的;
立体矫正之后图像边缘会存在些许黑边。
如何实现立体矫正
直接上代码:

cv2.stereoRectify这个函数提供了立体矫正的功能;
先看输入的参数:
现在看名字已经非常明确了

这四个变量一眼看过去就是左相机的内参矩阵和畸变系数,右相机的内参矩阵和畸变系数;
![]()
下面三个参数是图像的尺寸,左右相机坐标系之间的RT矩阵转换关系。
![]()
这个参数比较重要,它是一个控制立体矫正方式的一个参数;
一般可以采用cv2.CALIB_ZERO_DISPARITY这个值,它可以确保两个相机光心那个点投影到图片上的像素点坐标一致;
说人话就是假如两个相机成夹角放置,并且基线距离是10mm,根据像素分辨率0.01来说,基线距离就是1000像素,那么假设无穷远处的一个点(都应该投影到两个相机的光轴上),在左相机的投影X坐标是500,那么在右相机的投影X坐标一定是1500,因为加上了基线的像素距离,这是立体矫正之后的。
拿一对标定板的图像来测试立体矫正
矫正之前

矫正之后


可以看到矫正之后,对应点都处于同一行了
16万+

被折叠的 条评论
为什么被折叠?



