沙姆模型推导过程

沙姆模型推导过程

三维坐标系下的示例图

点P在世界坐标系下的坐标为
P 世界 = [ X Y Z ] P_{世界} = \left[\begin{array}{l} X \\ Y \\ Z \end{array}\right] P世界= XYZ

利用旋转矩阵R、平移向量T构成的外参数,将P{世界}映射到小孔相机坐标系下,点P在小孔相机坐标系下的坐标为
P 小孔 = [ X ′ Y ′ Z ′ ] = R ( [ X ′ Y ′ Z ′ ] − T ) P_{小孔} = \left[\begin{array}{l} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right] = R(\left[\begin{array}{l} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right]-T) P小孔= XYZ =R( XYZ T)
点P和点Ps在同一条直线上,由透视变换,点Ps可表示为:
P s 小孔 = λ P 小孔 = λ [ X ′ Y ′ Z ′ ] P_{s_{小孔}} = {\lambda}P_{小孔} = {\lambda}\left[\begin{array}{l} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right] Ps小孔=λP小孔=λ XYZ

引入沙姆旋转角度 τ x \tau_x τx τ y \tau_y τy,使得垂直平面旋转为倾斜平面,旋转矩阵为 R τ R_\tau Rτ

R τ = [ cos ⁡ ( τ y ) 0 sin ⁡ ( τ y ) 0 1 0 − sin ⁡ ( τ y ) 0 cos ⁡ ( τ y ) ] [ 1 0 0 0 cos ⁡ ( τ x ) − sin ⁡ ( τ x ) 0 sin ⁡ ( τ x ) cos ⁡ ( τ x ) ] = [ cos ⁡ ( τ y ) sin ⁡ ( τ x ) sin ⁡ ( τ y ) cos ⁡ ( τ x ) sin ⁡ ( τ y ) 0 cos ⁡ ( τ x ) − sin ⁡ ( τ x ) − sin ⁡ ( τ y ) sin ⁡ ( τ x ) cos ⁡ ( τ y ) cos ⁡ ( τ x ) cos ⁡ ( τ y ) ] \begin{aligned} R_\tau & =\left[\begin{array}{ccc} \cos \left(\tau_y\right) & 0 & \sin \left(\tau_y\right) \\ 0 & 1 & 0 \\ -\sin \left(\tau_y\right) & 0 & \cos \left(\tau_y\right) \end{array}\right]\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \left(\tau_x\right) & -\sin \left(\tau_x\right) \\ 0 & \sin \left(\tau_x\right) & \cos \left(\tau_x\right) \end{array}\right] \\ & =\left[\begin{array}{ccc} \cos \left(\tau_y\right) & \sin \left(\tau_x\right) \sin \left(\tau_y\right) & \cos \left(\tau_x\right) \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) & -\sin \left(\tau_x\right) \\ -\sin \left(\tau_y\right) & \sin \left(\tau_x\right) \cos \left(\tau_y\right) & \cos \left(\tau_x\right) \cos \left(\tau_y\right) \end{array}\right] \end{aligned} Rτ= cos(τy)0sin(τy)010sin(τy)0cos(τy) 1000cos(τx)sin(τx)0sin(τx)cos(τx) = cos(τy)0sin(τy)sin(τx)sin(τy)cos(τx)sin(τx)cos(τy)cos(τx)sin(τy)sin(τx)cos(τx)cos(τy)

垂直平面的法向量为 n ⃗ = ( 0 , 0 , 1 ) \vec{n}=(0,0,1) n =(0,0,1),将法向量进行旋转,得到倾斜平面的法向量 n ⃗ s = R τ n ⃗ \vec{n}_s=R_\tau \vec{n} n s=Rτn

n ⃗ s = R τ n ⃗ = [ cos ⁡ ( τ y ) sin ⁡ ( τ x ) sin ⁡ ( τ y ) cos ⁡ ( τ x ) sin ⁡ ( τ y ) 0 cos ⁡ ( τ x ) − sin ⁡ ( τ x ) − sin ⁡ ( τ y ) sin ⁡ ( τ x ) cos ⁡ ( τ y ) cos ⁡ ( τ x ) cos ⁡ ( τ y ) ] [ 0 0 1 ] = [ cos ⁡ ( τ x x ) sin ⁡ ( τ y ) − sin ⁡ ( τ x ) cos ⁡ ( τ x ) cos ⁡ ( τ y ) ] \begin{aligned} \vec{n}_s =R_\tau \vec{n}&=\left[\begin{array}{ccc} \cos \left(\tau_y\right) & \sin \left(\tau_x\right) \sin \left(\tau_y\right) & \cos \left(\tau_x\right) \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) & -\sin \left(\tau_x\right) \\ -\sin \left(\tau_y\right) & \sin \left(\tau_x\right) \cos \left(\tau_y\right) & \cos \left(\tau_x\right) \cos \left(\tau_y\right) \end{array}\right]\left[\begin{array}{l} 0 \\ 0 \\ 1 \end{array}\right] \\ & = \left[\begin{array}{ccc} \cos \left(\tau_{x x}\right) \sin \left(\tau_y\right) \\ -\sin \left(\tau_x\right) \\ \cos \left(\tau_x\right) \cos \left(\tau_y\right) \end{array}\right] \end{aligned} n s=Rτn = cos(τy)0sin(τy)sin(τx)sin(τy)cos(τx)sin(τx)cos(τy)cos(τx)sin(τy)sin(τx)cos(τx)cos(τy) 001 = cos(τxx)sin(τy)sin(τx)cos(τx)cos(τy)

则倾斜平面上的向量 o c P s → \overrightarrow{o_c P_s} ocPs 点乘法向量 n ⃗ s \vec{n}_s n s为零,如下所示:

o c P s → ⋅ n ⃗ s = 0 ⇔ [ λ X ′ λ Y ′ λ Z ′ − 1 ] ⋅ [ cos ⁡ τ x sin ⁡ τ y − sin ⁡ τ x cos ⁡ τ x cos ⁡ τ y ] = 0 \overrightarrow{o_c P_s} \cdot \vec{n}_s=0 \Leftrightarrow\left[\begin{array}{c} \lambda X^{\prime} \\ \lambda Y^{\prime} \\ \lambda Z^{\prime}-1 \end{array}\right] \cdot\left[\begin{array}{c} \cos \tau_x \sin \tau_y \\ -\sin \tau_x \\ \cos \tau_x \cos \tau_y \end{array}\right]=0 ocPs n s=0 λXλYλZ1 cosτxsinτysinτxcosτxcosτy =0

可求得 λ \lambda λ
λ = cos ⁡ τ x sin ⁡ τ y X ′ cos ⁡ τ x sin ⁡ τ y − Y ′ sin ⁡ τ y + Z ′ cos ⁡ τ x cos ⁡ τ y \lambda=\frac{\cos \tau_x \sin \tau_y}{X^{\prime} \cos \tau_x \sin \tau_y-Y^{\prime} \sin \tau_y+Z^{\prime} \cos \tau_x \cos \tau_y} λ=XcosτxsinτyYsinτy+Zcosτxcosτycosτxsinτy
λ \lambda λ代入,可得 P s 小孔 P_{s_{小孔}} Ps小孔
P s 小孔 = cos ⁡ τ x sin ⁡ τ y X ′ cos ⁡ τ x sin ⁡ τ y − Y ′ sin ⁡ τ y + Z ′ cos ⁡ τ x cos ⁡ τ y ⋅ [ X ′ Y ′ Z ′ ] P_{s_{小孔}}=\frac{\cos \tau_x \sin \tau_y}{X^{\prime} \cos \tau_x \sin \tau_y-Y^{\prime} \sin \tau_y+Z^{\prime} \cos \tau_x \cos \tau_y}\cdot \left[\begin{array}{l} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right] Ps小孔=XcosτxsinτyYsinτy+Zcosτxcosτycosτxsinτy XYZ

旋转坐标系,将小孔相机坐标系转到沙姆相机坐标系,则 P s 沙姆 = R τ t P s 小孔 P_{s_{沙姆}} = R^{t}_{\tau}P_{s_{小孔}} Ps沙姆=RτtPs小孔
注意:由于旋转矩阵 R τ R_{\tau} Rτ是倾斜平面到垂直平面的旋转矩阵,所以旋转坐标系时,应左乘 R τ R_{\tau} Rτ的逆。
具体原因可参考: https://blog.csdn.net/Lee_Mon_Tree/article/details/136880423?spm=1001.2014.3001.5502
P s 沙姆 = R τ t P s 小孔 = [ cos ⁡ ( τ y ) 0 − sin ⁡ ( τ y ) sin ⁡ ( τ x ) sin ⁡ ( τ y ) cos ⁡ ( τ x ) sin ⁡ ( τ x ) cos ⁡ ( τ y ) cos ⁡ ( τ x ) sin ⁡ ( τ y ) − sin ⁡ ( τ x ) cos ⁡ ( τ x ) cos ⁡ ( τ y ) ] [ λ X ′ λ Y ′ λ Z ′ ] P_{s_{沙姆}}=R^{t}_{\tau}P_{s_{小孔}}= \left[\begin{array}{ccc} \cos \left(\tau_y\right) & 0 & -\sin \left(\tau_y\right) \\ \sin \left(\tau_x\right) \sin \left(\tau_y\right) & \cos \left(\tau_x\right) & \sin \left(\tau_x\right) \cos \left(\tau_y\right) \\ \cos \left(\tau_x\right) \sin \left(\tau_y\right) & -\sin \left(\tau_x\right) & \cos \left(\tau_x\right) \cos \left(\tau_y\right) \end{array}\right]\left[\begin{array}{c} \lambda X^{\prime} \\ \lambda Y^{\prime} \\ \lambda Z^{\prime} \end{array} \right] Ps沙姆=RτtPs小孔= cos(τy)sin(τx)sin(τy)cos(τx)sin(τy)0cos(τx)sin(τx)sin(τy)sin(τx)cos(τy)cos(τx)cos(τy) λXλYλZ

= [ cos ⁡ τ x cos ⁡ τ y ( X ′ cos ⁡ τ y − Z ′ sin ⁡ τ y ) X ′ sin ⁡ τ y cos ⁡ τ x − Y ′ sin ⁡ τ x + Z ′ cos ⁡ τ x cos ⁡ τ y + sin ⁡ τ y cos ⁡ τ x cos ⁡ τ y ( X ′ sin ⁡ τ x sin ⁡ τ y + Y ′ cos ⁡ τ x + Z ′ sin ⁡ τ x cos ⁡ τ y ) X ′ sin ⁡ τ y cos ⁡ τ x − Y ′ sin ⁡ τ x + Z ′ cos ⁡ τ x cos ⁡ τ y − sin ⁡ τ x cos ⁡ τ y 1 ] = \left[\begin{array}{c} \frac{\cos \tau_x \cos \tau_y\left(X^{\prime} \cos \tau_y-Z^{\prime} \sin \tau_y\right)}{X^{\prime} \sin \tau_y \cos \tau_x-Y^{\prime} \sin \tau_x+Z^{\prime} \cos \tau_x \cos \tau_y}+\sin \tau_y \\ \frac{\cos \tau_x \cos \tau_y\left(X^{\prime} \sin \tau_x \sin \tau_y+Y^{\prime} \cos \tau_x+Z^{\prime} \sin \tau_x \cos \tau_y\right)}{X^{\prime} \sin \tau_y \cos \tau_x-Y^{\prime} \sin \tau_x+Z^{\prime} \cos \tau_x \cos \tau_y}-\sin \tau_x \cos \tau_y \\ 1 \end{array}\right] = XsinτycosτxYsinτx+Zcosτxcosτycosτxcosτy(XcosτyZsinτy)+sinτyXsinτycosτxYsinτx+Zcosτxcosτycosτxcosτy(Xsinτxsinτy+Ycosτx+Zsinτxcosτy)sinτxcosτy1

= [ cos ⁡ ( τ x ) cos ⁡ ( τ y ) 0 sin ⁡ ( τ y ) 0 cos ⁡ ( τ x ) cos ⁡ ( τ y ) − sin ⁡ ( τ x ) cos ⁡ ( τ y ) 0 0 1 ] R τ t [ X ′ Y ′ Z ′ ] = \left[\begin{array}{ccc} \cos \left(\tau_x\right) \cos \left(\tau_y\right) & 0 & \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) \cos \left(\tau_y\right) & -\sin \left(\tau_x\right) \cos \left(\tau_y\right) \\ 0 & 0 & 1 \end{array}\right] \mathbf{R}_\tau^t\left[\begin{array}{c} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right] = cos(τx)cos(τy)000cos(τx)cos(τy)0sin(τy)sin(τx)cos(τy)1 Rτt XYZ

此时求出来的 P s 沙姆 P_{s_{沙姆}} Ps沙姆的坐标是在沙姆相机坐标系下的坐标
P s 沙姆 = [ x y z ] = [ cos ⁡ τ x cos ⁡ τ y ( X ′ cos ⁡ τ y − Z ′ sin ⁡ τ y ) X ′ sin ⁡ τ y cos ⁡ τ x − Y ′ sin ⁡ τ x + Z ′ cos ⁡ τ x cos ⁡ τ y + sin ⁡ τ y cos ⁡ τ x cos ⁡ τ y ( X ′ sin ⁡ τ x sin ⁡ τ y + Y ′ cos ⁡ τ x + Z ′ sin ⁡ τ x cos ⁡ τ y ) X ′ sin ⁡ τ y cos ⁡ τ x − Y ′ sin ⁡ τ x + Z ′ cos ⁡ τ x cos ⁡ τ y − sin ⁡ τ x cos ⁡ τ y 1 ] = [ cos ⁡ ( τ x ) cos ⁡ ( τ y ) 0 sin ⁡ ( τ y ) 0 cos ⁡ ( τ x ) cos ⁡ ( τ y ) − sin ⁡ ( τ x ) cos ⁡ ( τ y ) 0 0 1 ] R τ t [ X ′ Y ′ Z ′ ] P_{s_{沙姆}}=\left[\begin{array}{ccc} x \\ y \\ z \end{array} \right]= \left[\begin{array}{c} \frac{\cos \tau_x \cos \tau_y\left(X^{\prime} \cos \tau_y-Z^{\prime} \sin \tau_y\right)}{X^{\prime} \sin \tau_y \cos \tau_x-Y^{\prime} \sin \tau_x+Z^{\prime} \cos \tau_x \cos \tau_y}+\sin \tau_y \\ \frac{\cos \tau_x \cos \tau_y\left(X^{\prime} \sin \tau_x \sin \tau_y+Y^{\prime} \cos \tau_x+Z^{\prime} \sin \tau_x \cos \tau_y\right)}{X^{\prime} \sin \tau_y \cos \tau_x-Y^{\prime} \sin \tau_x+Z^{\prime} \cos \tau_x \cos \tau_y}-\sin \tau_x \cos \tau_y \\ 1 \end{array}\right] \\ = \left[\begin{array}{ccc} \cos \left(\tau_x\right) \cos \left(\tau_y\right) & 0 & \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) \cos \left(\tau_y\right) & -\sin \left(\tau_x\right) \cos \left(\tau_y\right) \\ 0 & 0 & 1 \end{array}\right] \mathbf{R}_\tau^t\left[\begin{array}{c} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right] Ps沙姆= xyz = XsinτycosτxYsinτx+Zcosτxcosτycosτxcosτy(XcosτyZsinτy)+sinτyXsinτycosτxYsinτx+Zcosτxcosτycosτxcosτy(Xsinτxsinτy+Ycosτx+Zsinτxcosτy)sinτxcosτy1 = cos(τx)cos(τy)000cos(τx)cos(τy)0sin(τy)sin(τx)cos(τy)1 Rτt XYZ
上述求得点 P s 沙姆 P_{s_{沙姆}} Ps沙姆在沙姆相机坐标系下的坐标(z=1),该坐标乘上内参矩阵,得到像素坐标系下的坐标:

P s u , v = [ u v 1 ] = K [ cos ⁡ ( τ x ) cos ⁡ ( τ y ) 0 sin ⁡ ( τ y ) 0 cos ⁡ ( τ x ) cos ⁡ ( τ y ) − sin ⁡ ( τ x ) cos ⁡ ( τ y ) 0 0 1 ] R τ t R ( [ X Y Z ] − T ) \begin{aligned} P_{s_{u,v}} = \left[\begin{array}{l} u \\ v \\ 1 \end{array}\right]=K\left[\begin{array}{ccc} \cos \left(\tau_x\right) \cos \left(\tau_y\right) & 0 & \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) \cos \left(\tau_y\right) & -\sin \left(\tau_x\right) \cos \left(\tau_y\right) \\ 0 & 0 & 1 \end{array}\right] \mathbf{R}_\tau^t \mathbf{R}\left(\left[\begin{array}{l} X \\ Y \\ Z \end{array}\right]-\mathbf{T}\right) \end{aligned} Psu,v= uv1 =K cos(τx)cos(τy)000cos(τx)cos(τy)0sin(τy)sin(τx)cos(τy)1 RτtR XYZ T

符号说明:
(1)OwXwYwZw:世界坐标系
(2)OcXcYcZc:小孔相机坐标系(镜头平面与成像平面垂直)
(3)OsXsYsZs:沙姆相机坐标系(镜头平面与成像平面倾斜)
(4)点P:世界坐标系中的一个目标点
(5)点Pc:直线OP与垂直像平面的交点
(6)点Ps:直线OP与倾斜像平面的交点
(7)旋转矩阵Rτ:垂直像平面到倾斜像平面的旋转

沙姆相机示例图

像平面对称投影的示例图

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Matlab中的相机标定工具箱(Camera Calibration Toolbox)是一个用于相机标定和图像校正的强大工具。其中,沙姆相机标定(Shahram Farsiu's Calibration Toolbox)是该工具箱中的一种标定方法。 沙姆相机标定方法是一种基于图像特征点的标定方法,它通过对已知世界坐标系下的特征点和相应的图像坐标进行匹配,从而估计相机的内参和外参。这个过程可以分为以下几个步骤: 1. 收集标定图像:使用已知世界坐标系下的特征点,拍摄一组标定图像。 2. 提取特征点:使用图像处理算法,如角点检测算法(如Harris角点检测算法)或SIFT算法,提取每张标定图像中的特征点。 3. 特征点匹配:将每张标定图像中提取到的特征点与其对应的已知世界坐标系下的特征点进行匹配。 4. 相机标定:使用沙姆相机标定方法,根据特征点的匹配结果,估计相机的内参和外参。内参包括焦距、主点位置等相机固有参数,外参包括相机在世界坐标系下的旋转和平移。 Matlab中的相机标定工具箱提供了一系列函数来实现这些步骤,包括图像特征提取函数、特征点匹配函数和相机标定函数等。你可以按照以下步骤使用Matlab进行沙姆相机标定: 1. 安装并加载相机标定工具箱:在Matlab中安装并加载相机标定工具箱。 2. 收集标定图像:准备一组已知世界坐标系下的特征点,并拍摄一组标定图像。 3. 提取特征点:使用相机标定工具箱中的函数,提取每张标定图像中的特征点。 4. 特征点匹配:将每张标定图像中提取到的特征点与其对应的已知世界坐标系下的特征点进行匹配。 5. 相机标定:使用相机标定工具箱中的函数,根据特征点的匹配结果,估计相机的内参和外参。 6. 图像校正:使用相机标定工具箱中的函数,对其他图像进行校正,以消除图像畸变。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值