双目立体匹配(传统/深度)方法总结

双目立体匹配工作--2022年度

  • 总述
    • 投影几何
    • 透镜畸变
    • 标定
      • 单目标定
      • 双目标定
    • 校正
    • 立体匹配
      • 传统方法
      • 深度学习方法
    • 合理的创建标题,有助于目录的生成
    • 如何改变文本的样式

总述

部分参考学习OpenCV 3 1


投影几何

针孔模型:

双目立体匹配(传统/深度)方法总结_第1张图片
− x / f = X / Z -x/f = X/Z x/f=X/Z 在此作等价转换,将图像平面移至右边----相机o和物体P间,便于表达

双目立体匹配(传统/深度)方法总结_第2张图片
而 芯片中心通常不在光轴上,引入两个新的参数 c x 和 c y c_x和c_y cxcy, 对投影屏幕中心可能存在的偏移进行建模。
双目立体匹配(传统/深度)方法总结_第3张图片
将世界坐标点 P ( X , Y , Z ) P(X,Y,Z) PXYZ映射到相机平面上坐标点为 q ( x , y ) q(x,y) q(x,y) 的过程称为 射影变换 ,可简单表述为:
q ⃗ = M ⋅ P ⃗ , w h e r e \vec q = M· \vec P, \quad\quad where q =MP ,where双目立体匹配(传统/深度)方法总结_第4张图片
在这里插入图片描述

透镜畸变

径向畸变 是由于透镜的形状(筒形)造成的;

切向畸变 是由整个相机的 组装过程 造成的,使透镜与成像平面不平行。
双目立体匹配(传统/深度)方法总结_第5张图片
某点的径向位置可用 r = 0 r=0 r=0附近的泰勒级数展开式的前几项来描述。
双目立体匹配(传统/深度)方法总结_第6张图片
双目立体匹配(传统/深度)方法总结_第7张图片
共需要求出5个畸变系数,按顺序 k 1 , k 2 , p 1 , p 2 , k 3 k_1,k_2,p_1,p_2,k_3 k1,k2,p1,p2,k3


标定

在这里插入图片描述
摄像机参数:一般一共15个相关参数:

(1)外参数6个:R 旋转3个参数;T 平移3个参数;

(2)内参数4个: f x , f y , c x , c y ; f_x,f_y,c_x,c_y; fxfycxcy;

求解上述10个参数的前提是先假设每次的畸变参数为0;

(3)5个畸变参数: k 1 , k 2 , p 1 , p 2 , k 3 ; k_1,k_2,p_1,p_2,k_3; k1k2p1p2k3

其中(2)(3)为摄像机内参数,其中k3普通镜头不使用,鱼眼镜头要使用。

先看 R, T :

相机拍摄的一个特定物体(世界坐标系),其相对于相机坐标系统的姿态可用 旋转 和 平移 进行描述。

三维旋转可拆解为绕每个轴的二维旋转,如依次绕 x , y , z x,y,z x,y,z轴旋转角度 φ , θ 和 ξ φ,θ和ξ φθξ,则总的旋转矩阵R R x ( φ ) , R y ( θ ) , R z ( ξ ) R_x(φ), R_y(θ),R_z(ξ) Rx(φ),Ry(θ),Rz(ξ)三者的乘积。

因此 R 具有其逆矩阵等于其转置矩阵的特性, R ∗ R T = R T ⋅ R = I 3 R*R^T=R^T·R=I_3 RRT=RTR=I3

双目立体匹配(传统/深度)方法总结_第8张图片
平移向量是以物体中心为原点的坐标系到以相机中心为原点的坐标系的偏移量,因此,相应的平移向量为 T ⃗ = o r i g i n o b j e c t − o r i g i n c a m e r a \vec T=origin_{object}-origin_{camera} T =originobjectorigincamera,

则,点P在世界坐标系中可表述为 P ⃗ c = R ∗ ( P ⃗ o − T ⃗ ) . \vec P_c=R*(\vec P_o-\vec T). P c=R(P oT ).

此时
双目立体匹配(传统/深度)方法总结_第9张图片
双目立体匹配(传统/深度)方法总结_第10张图片

单目标定

  1. 找棋盘角点
	vector<Point2f> corners1, corners2;
	bool found_1 = cv::findChessboardCorners(src_1, board_size, corners1);
	bool found_2 = cv::findChessboardCorners(src_2, board_size, corners2);	
  1. 进一步精确至亚像素
	Mat gray_img1;
	cv::cvtColor(src_1, gray_img1, cv::COLOR_BGR2GRAY);
	cv::cornerSubPix(gray_img1, corners1,
		Size(5, 5), Size(-1, -1),
		TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 50, 0.1));
	// 存放当前左视图平面角点
	img_pts1.push_back(corners1);
	cout << "correct! " << img_path.c_str() << endl;
  1. 绘制棋盘角点
	/* 在图像上显示角点位置*/
	drawChessboardCorners(src_1, board_size, corners1, true); // 用于在图片中标记角点
	imshow("Camera Calibration", src_1);       // 显示图片
	waitKey(500); //暂停0.5S 

双目立体匹配(传统/深度)方法总结_第11张图片

本征矩阵 (Essential Matrix):
双目立体匹配(传统/深度)方法总结_第12张图片基本矩阵(Fundamental Mat):

双目标定

标定后立体校正的理想状态:
双目立体匹配(传统/深度)方法总结_第13张图片
F i g . 2. Fig. 2. Fig.2. 双目相机测距原理图

焦距 f f f, 基线 B a s e l i n e ( b ) Baseline(b) Baseline(b)
b Z = b − ( X R − X T ) Z − f \frac{b}{Z} = \frac{b-(X_R-X_T)}{Z-f} Zb=Zfb(XRXT) 深度Z,视差 d d d
Z = f b d , w h e r e d = X R − X T Z=\frac{fb}{d}, \quad where \quad d=X_R-X_T Z=dfb,whered=XRXT

注意事项:

  1. 标定板占图像 1 / 4 − 1 / 3 1/4-1/3 1/41/3,标定板距离远近,各种姿态,全图覆盖,剔除误差大的图像对;
  2. 确定相机的视差范围(0, d d d

校正

双目立体匹配(传统/深度)方法总结_第14张图片


立体匹配

传统方法

1 2

深度学习方法

合理的创建标题,有助于目录的生成

如何改变文本的样式


  1. 学习OpenCV 3 清华大学出版社 ↩︎

  2. mermaid语法说明 ↩︎

你可能感兴趣的:(双目相机,相机标定,双目深度估计,立体匹配,投影几何,计算机视觉)