当前位置: 首页 > news >正文

多视图几何--密集匹配--视差平面推导

文章目录


在这里插入图片描述

方法1

视差平面推导

首先,切平面的数学表达式为:nTX+d=0n^T X+d=0nTX+d=0
推理过程如下:
nT(X−X0)=0,X0=−d⋅n⇓nTX−nTX0=0⇓nTX+nTn⋅d=0⇓nTX+d=0\begin{aligned} & n^T\left(X-X_0\right)=0, X_0=-d \cdot n \\ & \Downarrow \\ & n^T X-n^T X_0=0 \\ & \Downarrow \\ & n^T X+n^T n \cdot d=0 \\ & \Downarrow \\ & n^T X+d=0 \end{aligned} nT(XX0)=0,X0=dnnTXnTX0=0nTX+nTnd=0nTX+d=0

  • XXX 是位于真实物体表面上的空间点(相机坐标系下)
  • nnn 是切平面的法向量
  • X0X_0X0 是位于切平面上的空间点(相机坐标系下)
  • pppXXX 在成像平面的投影点(图像像素坐标系下)
  • ddd 表示相机原点到切平面的法线距离

其次,空间点 XXX 和成像平面投影点 ppp 之间存在如下关系:

p=(1/z)⋅K⋅XX=z⋅K−1⋅p\begin{gathered} p=(1 / z) \cdot K \cdot X \\ X=z \cdot K^{-1} \cdot p \end{gathered} p=(1/z)KXX=zK1p
其中,zzz 是空间点 XXXzzz 轴坐标,即投影点 ppp 的深度

因此,我们可以推导出,由切平面和投影点 ppp 表示的深度 zzz

{X=z⋅K−1⋅pnTX+d=0⇒z=−dnTK−1p\left\{\begin{array}{l} X=z \cdot K^{-1} \cdot p \\ n^T X+d=0 \end{array} \Rightarrow z=-\frac{d}{n^T K^{-1} p}\right. {X=zK1pnTX+d=0z=nTK1pd

由根据,双目几何结构中,视差和深度的对应关系:

z=B⋅fxdpz=\frac{B \cdot f_x}{d_p} z=dpBfx

这里,BBB 表示双目基线长度,fxf_xfx 表示内参中的焦距,dpd_pdp 表示视差。

因此,我们可以得到,由投影点 ppp 表示的视差 dpd_pdp

dp=−BfxdnTK−1p=afppx+bfppy+cfp,p=[px,py,1]Td_p=-\frac{B f_x}{d} n^T K^{-1} p=a_{f_p} p_x+b_{f_p} p_y+c_{f_p}, p=\left[p_x, p_y, 1\right]^T dp=dBfxnTK1p=afppx+bfppy+cfp,p=[px,py,1]T

其中,−BfxdnTK−1-\frac{B f_x}{d} n^T K^{-1}dBfxnTK1 可以由 afy,bfp,cfpa_{f_y}, b_{f_p}, c_{f_p}afy,bfp,cfp 这三个参数表示。

进一步展开−BfxdnTK−1-\frac{B f_x}{d} n^T K^{-1}dBfxnTK1

步骤1: 计算内参矩阵的逆K−1K^{-1}K1

假设内参矩阵KKK为:

K=[fx0cx0fycy001]K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K=fx000fy0cxcy1

则其逆矩阵K−1K^{-1}K1为:

K−1=[1fx0−cxfx01fy−cyfy001]K^{-1} = \begin{bmatrix} \frac{1}{f_x} & 0 & -\frac{c_x}{f_x} \\ 0 & \frac{1}{f_y} & -\frac{c_y}{f_y} \\ 0 & 0 & 1 \end{bmatrix} K1=fx1000fy10fxcxfycy1

步骤2: 计算K−1pK^{-1} pK1p

给定p=[px,py,1]Tp = [p_x, p_y, 1]^Tp=[px,py,1]T,计算:

K−1p=[1fx0−cxfx01fy−cyfy001][pxpy1]=[px−cxfxpy−cyfy1]K^{-1} p = \begin{bmatrix} \frac{1}{f_x} & 0 & -\frac{c_x}{f_x} \\ 0 & \frac{1}{f_y} & -\frac{c_y}{f_y} \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} p_x \\ p_y \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{p_x - c_x}{f_x} \\ \frac{p_y - c_y}{f_y} \\ 1 \end{bmatrix} K1p=fx1000fy10fxcxfycy1pxpy1=fxpxcxfypycy1

步骤3: 计算nTK−1pn^T K^{-1} pnTK1p

给定n=[nx,ny,nz]Tn = [n_x, n_y, n_z]^Tn=[nx,ny,nz]T,计算:

nTK−1p=[nx,ny,nz][px−cxfxpy−cyfy1]=nxpx−cxfx+nypy−cyfy+nzn^T K^{-1} p = [n_x, n_y, n_z] \begin{bmatrix} \frac{p_x - c_x}{f_x} \\ \frac{p_y - c_y}{f_y} \\ 1 \end{bmatrix} = n_x \frac{p_x - c_x}{f_x} + n_y \frac{p_y - c_y}{f_y} + n_z nTK1p=[nx,ny,nz]fxpxcxfypycy1=nxfxpxcx+nyfypycy+nz

步骤4: 代入视差公式

nTK−1pn^T K^{-1} pnTK1p代入视差公式:

dp=−Bfxd(nxpx−cxfx+nypy−cyfy+nz)d_p = -\frac{B f_x}{d} \left( n_x \frac{p_x - c_x}{f_x} + n_y \frac{p_y - c_y}{f_y} + n_z \right) dp=dBfx(nxfxpxcx+nyfypycy+nz)

步骤5: 展开并简化表达式

展开括号:

dp=−Bfxd⋅nxpx−cxfx−Bfxd⋅nypy−cyfy−Bfxd⋅nzd_p = -\frac{B f_x}{d} \cdot n_x \frac{p_x - c_x}{f_x} - \frac{B f_x}{d} \cdot n_y \frac{p_y - c_y}{f_y} - \frac{B f_x}{d} \cdot n_z dp=dBfxnxfxpxcxdBfxnyfypycydBfxnz

简化每一项:

dp=−Bnxd(px−cx)−Bfxnydfy(py−cy)−Bfxnzdd_p = -\frac{B n_x}{d} (p_x - c_x) - \frac{B f_x n_y}{d f_y} (p_y - c_y) - \frac{B f_x n_z}{d} dp=dBnx(pxcx)dfyBfxny(pycy)dBfxnz

步骤6: 进一步展开为pxp_xpxpyp_ypy的线性形式

展开括号中的项:

dp=−Bnxdpx+Bnxcxd−Bfxnydfypy+Bfxnycydfy−Bfxnzdd_p = -\frac{B n_x}{d} p_x + \frac{B n_x c_x}{d} - \frac{B f_x n_y}{d f_y} p_y + \frac{B f_x n_y c_y}{d f_y} - \frac{B f_x n_z}{d} dp=dBnxpx+dBnxcxdfyBfxnypy+dfyBfxnycydBfxnz

合并常数项:

dp=(−Bnxd)px+(−Bfxnydfy)py+(Bnxcxd+Bfxnycydfy−Bfxnzd)d_p = \left( -\frac{B n_x}{d} \right) p_x + \left( -\frac{B f_x n_y}{d f_y} \right) p_y + \left( \frac{B n_x c_x}{d} + \frac{B f_x n_y c_y}{d f_y} - \frac{B f_x n_z}{d} \right) dp=(dBnx)px+(dfyBfxny)py+(dBnxcx+dfyBfxnycydBfxnz)

步骤7: 定义系数afp,bfp,cfpa_{f_p}, b_{f_p}, c_{f_p}afp,bfp,cfp

根据上式,令:

afp=−Bnxda_{f_p} = -\frac{B n_x}{d} afp=dBnx

bfp=−Bfxnydfyb_{f_p} = -\frac{B f_x n_y}{d f_y} bfp=dfyBfxny

cfp=Bnxcxd+Bfxnycydfy−Bfxnzdc_{f_p} = \frac{B n_x c_x}{d} + \frac{B f_x n_y c_y}{d f_y} - \frac{B f_x n_z}{d} cfp=dBnxcx+dfyBfxnycydBfxnz

最终视差平面公式

因此,视差平面公式可写为:

dp=afppx+bfppy+cfpd_p = a_{f_p} p_x + b_{f_p} p_y + c_{f_p} dp=afppx+bfppy+cfp

其中系数afp,bfp,cfpa_{f_p}, b_{f_p}, c_{f_p}afp,bfp,cfp由上述表达式定义。

方法2

1. 问题设定

投影模型:使用针孔相机模型,内参矩阵 KKK 为:
K=[fx0cx0fycy001]K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K=fx000fy0cxcy1

其中 fx,fyf_x, f_yfx,fy 是焦距(像素单位),(cx,cy)(c_x, c_y)(cx,cy)$是主点。

左右相机:假设已进行立体校正,两相机光轴平行、x 轴对齐,只在 x 方向有平移 bbb(基线长度,单位为米)。
左相机坐标系 = 世界坐标系(方便起见)。
右相机相对于左相机位姿为:(R=I,T=[−b,0,0]T)(R = I, T = [-b, 0, 0]^T)(R=I,T=[b,0,0]T)

三维空间平面(在左相机坐标系下):
点法式表示:

n⋅P=d0\mathbf{n} \cdot \mathbf{P} = d_0 nP=d0

其中 n=[nx,ny,nz]T\mathbf{n} = [n_x, n_y, n_z]^Tn=[nx,ny,nz]T 是平面法向量(单位向量),P=[X,Y,Z]T\mathbf{P} = [X, Y, Z]^TP=[X,Y,Z]T 是三维点,d0d_0d0 是原点到平面的有符号距离(米)。


2. 左相机投影

左相机内参矩阵 KKK,投影方程(齐次坐标):

pl=KP\mathbf{p}_l = K \mathbf{P} pl=KP

即:

[ulvl1]≡[fx0cx0fycy001][XYZ]\begin{bmatrix} u_l \\ v_l \\ 1 \end{bmatrix} \equiv \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} ulvl1fx000fy0cxcy1XYZ

所以:

ul=fxXZ+cx,vl=fyYZ+cyu_l = f_x \frac{X}{Z} + c_x, \quad v_l = f_y \frac{Y}{Z} + c_y ul=fxZX+cx,vl=fyZY+cy

或者反解:

X=Zul−cxfx,Y=Zvl−cyfyX = Z \frac{u_l - c_x}{f_x}, \quad Y = Z \frac{v_l - c_y}{f_y} X=Zfxulcx,Y=Zfyvlcy


3. 右相机投影

右相机坐标系中,同一个三维点 P=[X,Y,Z]T\mathbf{P} = [X, Y, Z]^TP=[X,Y,Z]T 的坐标为:

Pr=RP+T=P+[−b,0,0]T=[X−b,Y,Z]T\mathbf{P}_r = R \mathbf{P} + T = \mathbf{P} + [-b, 0, 0]^T = [X - b, Y, Z]^T Pr=RP+T=P+[b,0,0]T=[Xb,Y,Z]T

右相机内参矩阵与左相机相同(已校正),所以:

ur=fxX−bZ+cx,vr=fyYZ+cyu_r = f_x \frac{X - b}{Z} + c_x, \quad v_r = f_y \frac{Y}{Z} + c_y ur=fxZXb+cx,vr=fyZY+cy

注意 vr=vlv_r = v_lvr=vl(已校正条件下)。


4. 视差定义

视差:

d=ul−urd = u_l - u_r d=ulur

代入:

d=[fxXZ+cx]−[fxX−bZ+cx]=fxbZd = \left[ f_x \frac{X}{Z} + c_x \right] - \left[ f_x \frac{X - b}{Z} + c_x \right] = \frac{f_x b}{Z} d=[fxZX+cx][fxZXb+cx]=Zfxb

这是已知的视差-深度关系。


5. 将平面方程用图像坐标表示

平面方程:

nxX+nyY+nzZ=d0n_x X + n_y Y + n_z Z = d_0 nxX+nyY+nzZ=d0

代入 X=Zul−cxfxX = Z \frac{u_l - c_x}{f_x}X=ZfxulcxY=Zvl−cyfyY = Z \frac{v_l - c_y}{f_y}Y=Zfyvlcy

nxZul−cxfx+nyZvl−cyfy+nzZ=d0n_x Z \frac{u_l - c_x}{f_x} + n_y Z \frac{v_l - c_y}{f_y} + n_z Z = d_0 nxZfxulcx+nyZfyvlcy+nzZ=d0

两边除以 ZZZ

nxul−cxfx+nyvl−cyfy+nz=d0Zn_x \frac{u_l - c_x}{f_x} + n_y \frac{v_l - c_y}{f_y} + n_z = \frac{d_0}{Z} nxfxulcx+nyfyvlcy+nz=Zd0


6. 用视差 ddd 替换 ZZZ

d=fxbZd = \frac{f_x b}{Z}d=Zfxb 得:

1Z=dfxb\frac{1}{Z} = \frac{d}{f_x b} Z1=fxbd

代入平面方程:

nxul−cxfx+nyvl−cyfy+nz=d0fxbdn_x \frac{u_l - c_x}{f_x} + n_y \frac{v_l - c_y}{f_y} + n_z = \frac{d_0}{f_x b} d nxfxulcx+nyfyvlcy+nz=fxbd0d


7. 整理成 d=aul+bvl+cd = a u_l + b v_l + cd=aul+bvl+c 的形式

u=ulu = u_lu=ulv=vlv = v_lv=vl

上式乘以 fxf_xfx

nx(u−cx)+nyfxfy(v−cy)+nzfx=d0bdn_x (u - c_x) + n_y \frac{f_x}{f_y} (v - c_y) + n_z f_x = \frac{d_0}{b} dnx(ucx)+nyfyfx(vcy)+nzfx=bd0d

α=fxfy\alpha = \frac{f_x}{f_y}α=fyfx(像素纵横比倒数,如果fx=fyf_x = f_yfx=fyα=1\alpha=1α=1)。

于是:

nxu+nyα(v−cy)+nx(−cx)+nzfx=d0bdn_x u + n_y \alpha (v - c_y) + n_x (-c_x) + n_z f_x = \frac{d_0}{b} d nxu+nyα(vcy)+nx(cx)+nzfx=bd0d

即:

d0bd=nxu+αnyv+[−nxcx−αnycy+nzfx]\frac{d_0}{b} d = n_x u + \alpha n_y v + \big[ -n_x c_x - \alpha n_y c_y + n_z f_x \big] bd0d=nxu+αnyv+[nxcxαnycy+nzfx]

因此:

d=bd0nxu+bd0αnyv+bd0[−nxcx−αnycy+nzfx]d = \frac{b}{d_0} n_x u + \frac{b}{d_0} \alpha n_y v + \frac{b}{d_0} \big[ -n_x c_x - \alpha n_y c_y + n_z f_x \big] d=d0bnxu+d0bαnyv+d0b[nxcxαnycy+nzfx]


8. 最终视差平面公式

令:

ap=bd0nxa_p = \frac{b}{d_0} n_x ap=d0bnx

bp=bd0αnyb_p = \frac{b}{d_0} \alpha n_y bp=d0bαny

cp=bd0[−nxcx−αnycy+nzfx]c_p = \frac{b}{d_0} \big[ -n_x c_x - \alpha n_y c_y + n_z f_x \big] cp=d0b[nxcxαnycy+nzfx]

则:d(u,v)=apu+bpv+cpd(u, v) = a_p u + b_p v + c_pd(u,v)=apu+bpv+cp

其中 d(u,v)d(u, v)d(u,v) 是像素坐标 (u,v)(u, v)(u,v) 处的视差。


9. 说明

  • 在立体匹配中,每个分割的超像素或窗口可以拟合一个视差平面 d=apu+bpv+cpd = a_p u + b_p v + c_pd=apu+bpv+cp
  • 这里的 ap,bp,cpa_p, b_p, c_pap,bp,cp 与三维空间平面参数 (nx,ny,nz,d0)(n_x, n_y, n_z, d_0)(nx,ny,nz,d0) 及相机内参、基线有关。
  • 如果平面是 fronto-parallel(nx=0,ny=0,nz=1n_x=0, n_y=0, n_z=1nx=0,ny=0,nz=1),则 ap=0,bp=0a_p=0, b_p=0ap=0,bp=0d(u,v)=bfxd0d(u,v) = \frac{b f_x}{d_0}d(u,v)=d0bfx 常数,即视差图是平的。

最终公式

d(u,v)=apu+bpv+cp\boxed{d(u,v) = a_p u + b_p v + c_p} d(u,v)=apu+bpv+cp

其中系数与平面法向量、内参、基线的关系如上所示。

参数的几何意义

  1. 参数 a和 b
    • a:表示视差沿图像水平方向的变化率
    • b:表示视差沿图像垂直方向的变化率
    • 这两个参数直接反映了3D平面的法向量在图像域的投影
  2. 参数 c
    • 表示当 (px,py)=(0,0)时的视差值(考虑主点偏移后的参考视差)
  3. 特殊情况
    • 当 a=b=0a=b=0 时,视差平面退化为常数,对应于fronto-parallel平面(正对相机的平面)
    • 当 nx=ny=0 时,平面平行于图像平面,视差恒定

视差平面点法式与一般方程的转换

视差平面可以由法向量和平面上的某点表示:

nT(X−X0)=nT[x−x0y−y0z−z0]=0n^T\left(X-X_0\right)=n^T\left[\begin{array}{l} x-x_0 \\ y-y_0 \\ z-z_0 \end{array}\right]=0 nT(XX0)=nTxx0yy0zz0=0

其中,nnn 表示视差平面的法向量,X=[x,y,z]TX=[x, y, z]^TX=[x,y,z]T 是视差平面的任意点,X0=[x0,y0,z0]TX_0=\left[x_0, y_0, z_0\right]^TX0=[x0,y0,z0]T 是视差平面的某点

点加法向量方程转换为通用参数方程:

af=−nxnz,bf=−nynz,cf=nxx0+nyy0+nzz0nza_f=-\frac{n_x}{n_z}, b_f=-\frac{n_y}{n_z}, c_f=\frac{n_x x_0+n_y y_0+n_z z_0}{n_z} af=nznx,bf=nzny,cf=nznxx0+nyy0+nzz0

推导过程如下:

nT[x−x0y−y0z−z0]=0⇓nx(x−x0)+ny(y−y0)+nz(z−z0)=0⇓z=−nznzx−nynzy+nxx0+nyy0+nzz0nz\begin{aligned} & n^T\left[\begin{array}{l} x-x_0 \\ y-y_0 \\ z-z_0 \end{array}\right]=0 \\ & \Downarrow \\ & n_x\left(x-x_0\right)+n_y\left(y-y_0\right)+n_z\left(z-z_0\right)=0 \\ & \Downarrow \\ & z=-\frac{n_z}{n_z} x-\frac{n_y}{n_z} y+\frac{n_x x_0+n_y y_0+n_z z_0}{n_z} \end{aligned} nTxx0yy0zz0=0nx(xx0)+ny(yy0)+nz(zz0)=0z=nznzxnznyy+nznxx0+nyy0+nzz0

通用参数方程转换为点加法向量方程:

nx=afaf2+bf2+1,ny=bfaf2+bf2+1,nz=−1af2+bf2+1z0=afx0+bfy0+cf\begin{gathered} n_x=\frac{a_f}{\sqrt{a_f^2+b_f^2+1}}, n_y=\frac{b_f}{\sqrt{a_f^2+b_f^2+1}}, n_z=\frac{-1}{\sqrt{a_f^2+b_f^2+1}} \\ z_0=a_f x_0+b_f y_0+c_f \end{gathered} nx=af2+bf2+1af,ny=af2+bf2+1bf,nz=af2+bf2+11z0=afx0+bfy0+cf

左右视差平面转换

这里需要补充说明,如何从将左视图的视差平面转换为右视图的视差平面:
首先,我们有左视图的视差平面:

dl=apxl+bpyl+cpd_l=a_p x_l+b_p y_l+c_p dl=apxl+bpyl+cp

由于,xr=xl−dl,yr=ylx_r=x_l-d_l, y_r=y_lxr=xldl,yr=yl ,我们可得,

dl=ap(xr+dl)+bpyr+cp⇓dl=apxr+apdl+bpyr+cp⇓(1−ap)dl=apxr+bpyr+cp⇓dl=ap1−apxr+bp1−apyr+cp1−ap\begin{gathered} d_l=a_p\left(x_r+d_l\right)+b_p y_r+c_p \\ \Downarrow \\ d_l=a_p x_r+a_p d_l+b_p y_r+c_p \\ \Downarrow \\ \left(1-a_p\right) d_l=a_p x_r+b_p y_r+c_p \\ \Downarrow \\ d_l=\frac{a_p}{1-a_p} x_r+\frac{b_p}{1-a_p} y_r+\frac{c_p}{1-a_p} \end{gathered} dl=ap(xr+dl)+bpyr+cpdl=apxr+apdl+bpyr+cp(1ap)dl=apxr+bpyr+cpdl=1apapxr+1apbpyr+1apcp

由于,dr=−dld_r=-d_ldr=dl ,即 xl=xr−drx_l=x_r-d_rxl=xrdr ,左右视图匹配点的视差值是互为相反数,则:

dr=apap−1xr+bpap−1yr+cpap−1d_r=\frac{a_p}{a_p-1} x_r+\frac{b_p}{a_p-1} y_r+\frac{c_p}{a_p-1} dr=ap1apxr+ap1bpyr+ap1cp

从而,我们得到右视图的视差平面表达式。

http://www.dtcms.com/a/473431.html

相关文章:

  • 官网和商城结合的网站网站推广合同模板
  • 微软新模型UserLM:如何为AI助手打造一个“真实世界”模拟器
  • Linux中页面分配alloc_pages相关函数
  • Qt---布局管理器
  • 基于单片机的图书馆智能座位管理平台
  • 中国机械工业建设集团有限公司网站高端网站建设论坛
  • Envoy Gateway + ext_authz 做“入口统一鉴权”,ABP 只做资源执行
  • vscode免密码认证ssh连接virtual box虚拟机
  • 3.6 JSON Mode与JSON Schema
  • React Native::关于react的匿名函数
  • 基于JETSON ORIN+FPGA+GMSL AI相机的工业双目视觉感知方案
  • 常规的鱼眼镜头有哪些类型?能做什么?
  • 虚实之间:AR/VR开发中的性能优化艺术
  • 新手要如何让网站被收录公司查询信息查询
  • PostgreSQL 的 hstore、arrays 数据类型
  • Java集合体系 —— Set篇
  • 硅基计划5.0 MySQL 贰 SQL约束三大范式
  • 设计模式——工厂模式
  • 变色龙哈希与隐私保护
  • 栈和队列:“单端吞吐”VS”双端通行“(第十讲)
  • ros2系统在ubuntu18.04环境下的环境搭建
  • 个人网站展示dw网站制作
  • 鸿蒙NEXT系列之精析NDK UI API(节点增删和属性设置)
  • 10个免费货源网站郑州网络科技公司有哪些
  • Spring 源码学习(十三)—— RequestMappingHandlerAdapter
  • 虚幻引擎虚拟制片入门教程 之 3D渲染基础知识:模型、材质、贴图、UV等
  • excel导出使用arthas动态追踪方法调用耗时后性能优化的过程
  • 【数据结构】强化训练:从基础到入门到进阶(2)
  • python异步编程 -什么是python的异步编程, 与多线程和多进程的区别
  • Linux系统--进程间通信--共享内存相关指令