我在 Matlab 上运行了 Bouguet 的校准工具箱(http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html),并获得了校准参数(内在 [焦距和主点偏移] 和外在 [棋盘相对于相机的旋转和平移])。
我的图像上棋盘格的特征坐标点也是已知的。
我想获得校正后的图像,以便我可以从每对校正后的图像中制作视差图(我有代码)。
我该怎么做呢?
我在 Matlab 上运行了 Bouguet 的校准工具箱(http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html),并获得了校准参数(内在 [焦距和主点偏移] 和外在 [棋盘相对于相机的旋转和平移])。
我的图像上棋盘格的特征坐标点也是已知的。
我想获得校正后的图像,以便我可以从每对校正后的图像中制作视差图(我有代码)。
我该怎么做呢?
文档在这里。最后,它显示“将这些值作为常量添加到您的程序中,调用initUndistortRectifyMap和remap函数以消除失真并使用廉价和低质量的相机享受无失真输入”。
一旦您的相机被纠正,您可能会对StereoVar或StereoBM类感兴趣以获取视差图。如果您想检查您的结果在 3D 中是否正常,请在完成后使用reprojectImageTo3D 。
如果完全校准使用: http: //link.springer.com/article/10.1007/s001380050120#page-1两个相机具有相同的方向,共享相同的 R。
新 R 的第一行是基线 = 两个相机中心的减法。基线与旧左 z 轴的第二行叉积(3 行 R_old_left)。前两行的第三行叉积。
使用 H_left=P_new(1:3,1:3)*P_old_left(1:3,1:3)^-1 和 H_right=P_new(1:3,1:3)*P_old_right(1:3,1) 扭曲图像:3)^-1。
校正后的左像素坐标为 u_new=(h11*u+h12*v+h13)/(h31*u+h32*v+h33), v=(h21*u+h22*v+h23)/(h31*u+ h32*v+h33),和右边的一样