相机成像中的平行平面成像
文章目录
1. 基本原理
相机中的平行平面成像
是指当物体与成像平面平行时,其在成像平面上的投影保持形状相似、比例一致,仅在尺度上发生线性缩放的成像关系,如下图所示。
在针孔相机模型中,相机坐标系下的三维点 P = ( x c , y c , z c ) T P = (x_c, y_c, z_c)^T P=(xc,yc,zc)T 可通过透视投影变换,得到其在像素坐标系中的齐次坐标 p ′ = ( u , v ) T p^{\prime} = (u, v)^T p′=(u,v)T,两者满足以下关系::
{ u = f x x c z c + c x v = f y y c z c + c y \begin{cases} u = f_x \dfrac{x_c}{z_c} + c_x \\ \\ v = f_y \dfrac{y_c}{z_c} + c_y \end{cases} ⎩ ⎨ ⎧u=fxzcxc+cxv=fyzcyc+cy在平行平面成像模型中,由于物体平面深度 z 0 z_0 z0 恒定,即有:
{ u ′ − u = f x z 0 ( x c ′ − x c ) v ′ − v = f y z 0 ( y c ′ − y c ) \begin{cases} u^{\prime} - u = \dfrac{f_x}{z_0}(x^{\prime}_c - x_c) \\ \\ v^{\prime} - v = \dfrac{f_y}{z_0}(y^{\prime}_c - y_c) \end{cases} ⎩ ⎨ ⎧u′−u=z0fx(xc′−xc)v′−v=z0fy(yc′−yc)则相机坐标系上的直线距离为:
L = ( x c ′ − x c ) 2 + ( y c ′ − y c ) 2 = ( z 0 f x ) 2 ( u ′ − u ) 2 + ( z 0 f y ) 2 ( v ′ − v ) 2 = k x 2 ( u ′ − u ) 2 + k y 2 ( v ′ − v ) 2 L = \sqrt{(x^{\prime}_c - x_c)^2 + (y^{\prime}_c - y_c)^2} = \sqrt{(\dfrac{z_0}{f_x})^2(u^{\prime} - u)^2 + (\dfrac{z_0}{f_y})^2(v^{\prime} - v)^2} = \sqrt{k_x^2 (u^{\prime} - u)^2 + k_y^2 (v^{\prime} - v)^2} L=(xc′−xc)2+(yc′−yc)2=(fxz0)2(u′−u)2+(fyz0)2(v′−v)2=kx2(u′−u)2+ky2(v′−v)2其中, k x = z 0 f x k_x = \dfrac{z_0}{f_x} kx=fxz0, k y = z 0 f y k_y = \dfrac{z_0}{f_y} ky=fyz0。
当 f x = f y f_x = f_y fx=fy 时,有:
L = ( x c ′ − x c ) 2 + ( y c ′ − y c ) 2 = k x ( u ′ − u ) 2 + ( v ′ − v ) 2 = k x L ′ L = \sqrt{(x^{\prime}_c - x_c)^2 + (y^{\prime}_c - y_c)^2} = k_x \sqrt{(u^{\prime} - u)^2 + (v^{\prime} - v)^2} = k_x L^{\prime} L=(xc′−xc)2+(yc′−yc)2=kx(u′−u)2+(v′−v)2=kxL′此时,成像平面上的线段长度 L ′ L^{\prime} L′ 与其在物体平面对应的实际长度 L L L 呈线性比例关系。
综上,在平行平面成像中,除相机内参外,物体的深度 z 0 z_0 z0 是确定像物比例关系的唯一所需参数。
2. 情况分析
2.1. 已知 f x f_x fx 和 f y f_y fy,分析深度 z 0 z_0 z0 对长度测量误差
已知相机标定参数
K = ( 2551738.737652818 0 9492.506580806375 0 2551738.737652818 4739.820431526106 0 0 1 ) K = \begin{pmatrix} 2551738.737652818 & 0 & 9492.506580806375 \\ 0 & 2551738.737652818 & 4739.820431526106 \\ 0 & 0 & 1 \end{pmatrix} K= 2551738.7376528180002551738.73765281809492.5065808063754739.8204315261061 其中, f x = 2551738.737652818 pixels f_x = 2551738.737652818 \text{pixels} fx=2551738.737652818pixels, f y = 2551738.737652818 pixels f_y = 2551738.737652818 \text{pixels} fy=2551738.737652818pixels。
当 u ′ − u = 1 u^{\prime} - u = 1 u′−u=1 且 v ′ − v = 0 v^{\prime} - v = 0 v′−v=0 时,有:
L = ( z 0 2551738.737652818 ) 2 = z 0 2551738.737652818 L = \sqrt{(\dfrac{z_0}{2551738.737652818})^2} = \dfrac{z_0}{2551738.737652818} L=(2551738.737652818z0)2=2551738.737652818z0
如果 z 0 = 100 cm = 1000 mm z_0 = 100 \text{cm} = 1000 \text{mm} z0=100cm=1000mm,此时 L = 1000 2551738.737652818 ≈ 0.00039 mm L = \dfrac{1000}{2551738.737652818} ≈ 0.00039 \text{mm} L=2551738.7376528181000≈0.00039mm。因此,当物体深度为 100 mm 时,图像中一个像素的定位误差,将导致约 0.00039 mm 的长度测量误差。
2.2. k x k_x kx 和 k y k_y ky 对长度测量误差的影响
仅考虑单个坐标轴,假设 u ′ − u = 360 pixels u^{\prime} - u = 360 \text{pixels} u′−u=360pixels 且 v ′ − v = 0 v^{\prime} - v = 0 v′−v=0,则有:
L = 300 × k x L = 300 × k_x L=300×kx假设 k x k_x kx 从 0.023 变化到 0.024,那么长度测量误差为 Δ L = 360 × ( 0.024 − 0.023 ) = 360 × 0.001 = 0.36 mm \Delta L = 360×(0.024 - 0.023) = 360 × 0.001 = 0.36 \text{mm} ΔL=360×(0.024−0.023)=360×0.001=0.36mm。也就是说, k x k_x kx 仅变化 0.001,真实直线长度就变化了 0.36 mm。
分析表明,在像素坐标系中,直线的长度越大,其受参数 k x k_x kx 的影响越大。具体而言,当该直线在像素坐标 u u u 方向上的投影差为 u ′ − u = 90 pixels u^{\prime} - u = 90 \text{pixels} u′−u=90pixels 时, k x k_x kx 从 0.023 变化到 0.024 会引入的长度测量误差为 Δ L = 90 × 0.001 = 0.09 mm \Delta L = 90 × 0.001 = 0.09 \text{mm} ΔL=90×0.001=0.09mm。
考虑到更加大的直线,例如 ( 2791.63 , 612.30 ) (2791.63, 612.30) (2791.63,612.30) 到 ( 13635.09 , 429.28 ) (13635.09, 429.28) (13635.09,429.28)。
假设 k x k_x kx 和 k y k_y ky 均从 0.0239 0.0239 0.0239 变化到 0.02395 0.02395 0.02395(变化 0.00005),那么:
Δ L = 0.0239 5 2 × 10843.4 6 2 + 0.0239 5 2 × 183.0 2 2 − 0.023 9 2 × 10843.4 6 2 + 0.023 9 2 × 183.0 2 2 ≈ 0.54 mm \Delta L = \sqrt{0.02395^2×10843.46^2 + 0.02395^2×183.02^2} - \sqrt{0.0239^2×10843.46^2 + 0.0239^2×183.02^2} ≈ 0.54 \text{mm} ΔL=0.023952×10843.462+0.023952×183.022−0.02392×10843.462+0.02392×183.022≈0.54mm假设 k x k_x kx 和 k y k_y ky 均从 0.0239 0.0239 0.0239 变化到 0.0240 0.0240 0.0240(变化 0.0001),那么:
Δ L = 0.024 0 2 × 10843.4 6 2 + 0.024 0 2 × 183.0 2 2 − 0.023 9 2 × 10843.4 6 2 + 0.023 9 2 × 183.0 2 2 ≈ 1.09 mm \Delta L = \sqrt{0.0240^2×10843.46^2 + 0.0240^2×183.02^2} - \sqrt{0.0239^2×10843.46^2 + 0.0239^2×183.02^2} ≈ 1.09 \text{mm} ΔL=0.02402×10843.462+0.02402×183.022−0.02392×10843.462+0.02392×183.022≈1.09mm假设 k x k_x kx 和 k y k_y ky 均从 0.023 0.023 0.023 变化到 0.024 0.024 0.024(变化 0.001),那么:
Δ L = 0.02 4 2 × 10843.4 6 2 + 0.02 4 2 × 183.0 2 2 − 0.02 3 2 × 10843.4 6 2 + 0.02 3 2 × 183.0 2 2 ≈ 10.9 mm \Delta L = \sqrt{0.024^2×10843.46^2 + 0.024^2×183.02^2} - \sqrt{0.023^2×10843.46^2 + 0.023^2×183.02^2} ≈ 10.9 \text{mm} ΔL=0.0242×10843.462+0.0242×183.022−0.0232×10843.462+0.0232×183.022≈10.9mm从上述可以看出, k x k_x kx 和 k y k_y ky 仅变化 0.00005,长度测量误差就有 0.54 mm。
2.3. 根据高精度标定板,求与标定板厚度相差 Δ z \Delta z Δz 的纸张的 k x k_x kx 和 k y k_y ky
通过棋盘格标定板的角点可计算相机参数 f x f_x fx、 f y f_y fy、 k x k_x kx 和 k y k_y ky,其中, k x k_x kx 和 k y k_y ky 分别为像素坐标系 X 轴与 Y 轴上相邻角点的像素距离与其真实物理距离的比值,即有:
{ k x = f x z 0 k y = f y z 0 \begin{cases} k_x = \dfrac{f_x}{z_0} \\ \\ k_y = \dfrac{f_y}{z_0} \end{cases} ⎩ ⎨ ⎧kx=z0fxky=z0fy
假设纸张对应的参数为 k x ′ k^{\prime}_x kx′ 和 k y ′ k^{\prime}_y ky′。因为标定板比纸张厚 Δ z \Delta z Δz,则有:
{ k x ′ = f x z 0 + Δ z = f x f x k x + Δ z = k x f x f x + k x Δ z k y ′ = f y z 0 + Δ z = f y f y k y + Δ z = k y f y f y + k y Δ z \begin{cases} k^{\prime}_x = \dfrac{f_x}{z_0 + \Delta z} = \dfrac{f_x}{\dfrac{f_x}{k_x} + \Delta z} = \dfrac{k_x f_x}{f_x + k_x \Delta z} \\ \\ k^{\prime}_y = \dfrac{f_y}{z_0 + \Delta z} = \dfrac{f_y}{\dfrac{f_y}{k_y} + \Delta z} = \dfrac{k_y f_y}{f_y + k_y \Delta z} \end{cases} ⎩ ⎨ ⎧kx′=z0+Δzfx=kxfx+Δzfx=fx+kxΔzkxfxky′=z0+Δzfy=kyfy+Δzfy=fy+kyΔzkyfy