八参数方法(单目结构光)

系统模型

如图所示,为八参数方法的系统模型,其中相机、投影仪、参考面的三维坐标系原点分别为 O c O_c Oc O p O_p Op O O O。我们设置投影仪的投影中心 O p O_p Op与系统的参考面同处在 z z z轴方向,相机则以另一个视野处在参考面坐标系 O O O的 任意三维位置。假设空间中有一点 P P P,在参考面坐标系下的坐标为 ( x , y , z ) (x,y,z) (x,y,z),在相机坐标系下的坐标为 ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc),该点成像于相机平面的 p ( u , v ) p(u,v) p(u,v)点。此外,点 P P P投影在参考面 X O Y XOY XOY下的点为 P ′ P' P,并在 x x x轴的点为 P ′ ′ P'' P′′。投影仪投影到 P P P点的光线与参考面相交于 D D D点,且该点在 x x x轴的点为 D ′ ′ D'' D′′,因此可知, D D D点的相位与 P P P点的相位是相等的。

八参数法系统成像模型

测量原理

参考面坐标系下相位与三维坐标关系

由相似三角形 △ O P ′ P ′ ′ \triangle OP'P'' OPP′′ ∼ \thicksim △ O D D ′ ′ \triangle ODD'' ODD′′可知,

O P ′ O D = O P ′ ′ O D ′ ′ ( 1 ) \frac {OP'}{OD}=\frac {OP''}{OD''} \qquad (1) ODOP=OD′′OP′′(1)

由相似三角形 △ D P P ′ \triangle DPP' DPP ∼ \thicksim △ D O p O ′ ′ \triangle DO_pO'' DOpO′′可知,

O P ′ O D = O O P − P ′ P O O p ( 2 ) \frac {OP'}{OD}=\frac {OO_P-P'P}{OO_p} \qquad (2) ODOP=OOpOOPPP(2)

联立公式(1)和(2)可得:

O P ′ ′ O D ′ ′ = O O P − P ′ P O O p \frac {OP''}{OD''}=\frac {OO_P-P'P}{OO_p} OD′′OP′′=OOpOOPPP

由相位与位置关系可得:

O D ′ ′ = λ 2 π ( θ − θ 0 ) ( 3 ) OD'' = \frac{\lambda}{2\pi} (\theta - \theta_{0} ) \qquad(3) OD′′=2πλ(θθ0)3

其中, θ 0 \theta_{0} θ0 O O O点的相位, θ \theta θ D D D点的相位, λ \lambda λ为条纹周期。

将公式(3)带入公式(2)得:

O P ′ ′ λ 2 π ( θ − θ 0 ) = O O P − P ′ P O O p \frac {OP''}{ \frac{\lambda}{2\pi} (\theta - \theta_{0} )}=\frac {OO_P-P'P}{OO_p} 2πλ(θθ0)OP′′=OOpOOPPP

2 π O P ′ ′ λ ( θ − θ 0 ) = O O P − P ′ P O O p \frac {2\pi OP''}{ \lambda (\theta - \theta_{0} )}=\frac {OO_P-P'P}{OO_p} λ(θθ0)2πOP′′=OOpOOPPP

2 π O P ′ ′ × O O p = λ ( O O P − P ′ P ) ( θ − θ 0 ) 2\pi OP'' \times OO_p = \lambda(OO_P-P'P)(\theta - \theta_{0}) 2πOP′′×OOp=λ(OOPPP)(θθ0)

2 π x × l = λ ( l − z ) ( θ − θ 0 ) 2\pi x \times l = \lambda(l-z)(\theta - \theta_{0}) 2πx×l=λ(lz)(θθ0)

θ = 2 π l x λ ( l − z ) + θ 0 ( 4 ) \theta=\frac{2\pi lx}{\lambda(l-z)} + \theta_{0} \qquad(4) θ=λ(lz)2πlx+θ04
于是我们得到了参考面坐标系 O O O下三维坐标与相位的关系。接下来我们需要获取相机坐标系下相位与三维坐标的关系,那需要建立一个参考面与相机的关系。

参考面坐标系 O O O与相机坐标系 O c O_c Oc的关系

[ x c y c z c ] = [ R T ] [ x y z 1 ] = [ r 1 r 2 r 3 t 1 r 4 r 5 r 6 t 2 r 7 r 8 r 9 t 3 ] [ x y z 1 ] ( 5 ) \begin{gathered} \begin{bmatrix} x_c \\ y_c \\ z_c \end{bmatrix}= \begin{bmatrix} \bm{R} & \bm{T} \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\1 \end{bmatrix}= \begin{bmatrix} r_1&r_2&r_3 & t_1 \\r_4&r_5&r_6 & t_2\\ r_7&r_8&r_9 & t_3 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\1 \end{bmatrix} \end{gathered} \quad(5) xcyczc =[RT] xyz1 = r1r4r7r2r5r8r3r6r9t1t2t3 xyz1 5

相机坐标系下三维点与相机的关系

通过联系投影仪与相机关系(4) 和 相位与三维的关系(5) 我们可以得到下面的公式,既相机坐标系下三维点 ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc) 与相位的关系:
θ = a 1 x c + a 2 y c + a 3 z c + a 4 a 5 x c + a 6 y c + a 7 z c + a 8 ( 6 ) \theta=\frac{a_1x_c+a_2y_c+a_3z_c+a_4}{a_5x_c+a_6y_c+a_7z_c+a_8} \qquad(6) θ=a5xc+a6yc+a7zc+a8a1xc+a2yc+a3zc+a46

相机坐标系下三维坐标推导表示

在相机坐标系下,二维的图像坐标与三维坐标 ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc)有如下的关系
s r [ u v 1 ] = [ f x 0 u 0 0 f y v 0 0 0 1 ] [ x c y c z c ] ( 7 ) \begin{gathered} s^r \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}= \begin{bmatrix} f_x & 0 & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_c \\ y_c \\ z_c \end{bmatrix} \end{gathered} \qquad(7) sr uv1 = fx000fy0u0v01 xcyczc 7

结合上面的公式(6)和(7),可以得三个方程,正好可以求解三个未知的三维坐标。
z c = f ( a 1 , . . . , a 8 , f x , f y , u 0 , v 0 ) x c = z c ( u c − u 0 ) f x y c = z c ( v c − v 0 ) f y ( 8 ) \begin{gathered} z_c=f(a_1,...,a_8,f_x,f_y,u_0,v_0) \\ x_c=\frac{z_c(u_c-u_0)}{f_x}\\ y_c=\frac{z_c(v_c-v_0)}{f_y} \end{gathered} \qquad(8) zc=f(a1,...,a8,fx,fy,u0,v0)xc=fxzc(ucu0)yc=fyzc(vcv0)8
其中,( u 0 u_0 u0, v 0 v_0 v0)为相机的主点坐标, a 1 , . . . a 8 a_1,...a_8 a1,...a8为相位与三维坐标的参数, f x 和 f y f_x和f_y fxfy为相机焦距。

实验

相机标定

Opencv和matlab都采用了多种相机标定的方法,一般采用棋盘格或者圆点特征标定板对相机标定,标定后可以得到相机的内参和外参矩阵。具体步骤如下:

1. 放置标定板

如下图所示,实验中使用了一个12×9的棋盘格进行标定,首先使用相机采集一张纯色的棋盘格照片,并提取其角点信息。

请添加图片描述

2. 投影条纹建立相位与三维坐标关系

在上面的基础上,不要移动标定板,继续投影一组条纹编码到棋盘格上,如相移+格雷码、多频外差等等。采集的部分图像如下图所示。通过相位解码方法,求取绝对相位信息,并进一步确定角点的相位信息,便可以建立相位与三维点的关系。

条纹信息

3. 重复1-2步骤多次

移动标定板姿态,继续重复1-2的步骤,重复8-12次,得到多组标定图像,可以确定如下的关系:(1)相机的内参;(2)相位与三维坐标的关系即 a 1 , . . . a 8 a_1,...a_8 a1,...a8。这样,公式(8)中的系统参数便可以得到。

三维测量

1. 条纹投影

如下图所示,实验对一个物体进行相移+格雷码条纹投影。

请添加图片描述

2. 相位求解

请添加图片描述

3. 点云重建

重建的三维点云如下所示,如需整套八参数法代码可以通过链接获取。

请添加图片描述

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是基于HALCON的单目结构代码示例: ``` * 初始化相机和源 dev_open_framegrabber('GigEVision', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', 'default', 'default', 'default', 'default', AcqHandle) dev_set_framegrabber_param(AcqHandle, 'PixelFormat', 'Mono8') dev_set_framegrabber_param(AcqHandle, 'GevSCPD', 1000.0) dev_set_framegrabber_param(AcqHandle, 'GevSCFT', 'Continuous') dev_set_framegrabber_param(AcqHandle, 'GevSCPSPacketSize', 1500) dev_set_framegrabber_param(AcqHandle, 'GevSCPS', 'Unicast') open_framegrabber(1, 0, 0, 0, 0, 0, 0, 'default', -1, GenParamName, GenParamValue) dev_set_framegrabber_param(AcqHandle, 'ExposureTime', 1000.0) dev_set_framegrabber_param(AcqHandle, 'Gain', 1.0) dev_set_framegrabber_param(AcqHandle, 'TriggerMode', 'Off') dev_set_framegrabber_param(AcqHandle, 'AcquisitionMode', 'SingleFrame') gen_i11const(0, StructuredLightPattern) gen_i11const(1, LightFlag) gen_i11const(1, InvertFlag) * 读取图像和标数据 read_image(Image, 'image.tif') read_cam_par('calib.camparam', CameraParam) read_object_model('calib.p3d', ObjectModel3D) * 进行点云重建 shape_from_structured_light(Image, StructuredLightPattern, LightFlag, InvertFlag, ObjectModel3D, CameraParam, Pose, Cloud) * 可视化点云 dev_open_window(0, 0, 512, 512, 'Visible', WindowHandle) dev_display_object_model_3d(ObjectModel3D, CameraParam, Pose, [], [], [], WindowHandle, [], 'true', []) dev_display_shape_matching_results(Image, StructuredLightPattern, LightFlag, InvertFlag, ObjectModel3D, CameraParam, Pose, WindowHandle) dev_display_shape_matching_results(Image, StructuredLightPattern, LightFlag, InvertFlag, ObjectModel3D, CameraParam, Pose, WindowHandle) ``` 请注意,需要根据实际硬件和场景进行参数设置和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值