资讯动态

基于BP神经网络与双重交比的振镜式线结构光标定方法

发布时间:2026/9/19 22:02:06 来源:尧图企业网站定制
简介一份基于神经网络的振镜式线结构光三维测量系统标定方法的学术论文面向三维测量、机器视觉与深度学习交叉领域的研究人员和工程师。该论文针对振镜式系统光平面与镜头相对位置时变、传统标定方法难以适用的问题提出基于双重交比不变原理利用棋盘格靶标和电动平移台获取精确标定点坐标以图像坐标及光平面转角为输入、三维世界坐标为输出构建神经网络模型完成系统标定从而简化标定过程提升标定精度与通用性。资源共1个PDF文件压缩包约1.8MB包含论文正文、中英文摘要及基金项目信息已有198人学习下载。读者可借此系统掌握振镜式线结构光测量标定的方法原理、神经网络建模与训练要点以及实验验证与数据分析过程为相关课题研究或工程应用提供参考。1. 振镜式线结构光系统为什么不能直接套用传统标定传统线结构光系统靠平移台或旋转台带动激光器或被测物体移动光平面与相机的相对位置在扫描过程中基本固定标定核心就是求那个静态光平面方程。振镜式系统完全不同单轴振镜带动反射镜转动线激光的出射方向被实时改变光平面与镜头光轴的夹角在每个转角下都在变再用单个光平面方程做三角测量误差会随转角增大而迅速放大。这篇论文把标定改成函数拟合问题图像坐标 u、v 加上光平面转角 θ 作为输入三维世界坐标 X、Y、Z 作为输出用 BP 神经网络完成映射。标定点通过棋盘格标定板加电动平移台采集由双重交比不变原理计算出来网络训练完即可投入测量。适合做线结构光传感器标定、被光平面建模折腾得够呛的工程师参考。2. 双重交比不变原理与标定点获取的实现细节2.1 交比不变原理的几何意义交比不变原理是射影几何里的基本结论同一直线上四个点 A、B、C、D经过透视投影后仍然共线且交比保持不变。数学上写成 CR(A,B;C,D) (AC·BD)/(BC·AD) CR(A,B;C,D)其中 AC、BD 等均为线段长度在图像平面和世界平面分别测量比例关系在投影变换前后保持一致。所谓双重交比就是把这条原理用两次。第一次利用棋盘格上已知三维坐标的角点算出激光条纹中心线与棋盘格某行角点连线的交点坐标第二次在该交点所在的直线上再任取一点利用交比反算出它的三维世界坐标。这个做法的关键价值在于不需要知道振镜转轴在世界坐标系下的精确位置不需要激光平面与靶标有严格的几何约束只要棋盘格角点能被亚像素提取出来标定点的图像坐标和世界坐标就能一一对应。2.2 标定数据采集的硬件配置标定点获取环节的硬件包括 CCD 相机、线激光器、单轴振镜和一维电动平移台。棋盘格标定板固定在平移台上平面与移动方向垂直。关闭激光器拍一帧棋盘格图像以左上角角点为原点建立世界坐标系此时靶标平面上所有角点的 zw 0。打开激光器调节曝光让条纹清晰均匀把此时的光平面出射角记为 0然后改变振镜控制电压依次采集转角为 θ、2θ、3θ…nθ 的条纹图像n 不小于 6。论文试验配置比较有参考性具体参数整理如下配置项参数值棋盘格标定板9×12 格方格尺寸 10mm×10mm平移台行程075mm共移动 5 次每次 15mm振镜转角每个位置转动 5 次每次 1.2°激光条纹图像36 幅最终标定点数4326采集时平移台移动次数 m 不小于 4振镜转角次数 n 不小于 6目的是让 z 方向和角度方向都有足够采样密度。若转角采样太稀网络在转角维度上的插值误差会明显增大若深度位置太少z 方向的映射关系学不完整。2.3 标定点坐标的计算步骤对棋盘格图像用 Harris 算子做亚像素角点提取得到角点 A_i、B_i、C_i 的图像坐标其三维世界坐标由标定板物理尺寸直接给出。对线结构光图像用灰度重心法提取条纹中心线再通过最小二乘拟合得到中心线方程 D1D2D3。联立中心线方程与棋盘格某行角点所在直线方程求出交点 D1 的图像坐标然后套用一次交比不变原理得到 D1 的三维世界坐标。单次计算出的 D1 误差往往偏大论文的处理办法是取棋盘格同一行的多个角点轮流作为 A_i、B_i、C_i 反复计算把多次结果平均从而把角点检测和条纹提取的随机误差压下去。下面用 Python 代码演示交比计算的核心逻辑。import numpy as np def compute_cross_ratio(p1, p2, p3, p4): # 计算共线四点 A,B,C,D 的交比 CR(A,B;C,D) # p1..p4 为 numpy 数组坐标为 [x, y] ac np.linalg.norm(p3 - p1) bd np.linalg.norm(p4 - p2) bc np.linalg.norm(p3 - p2) ad np.linalg.norm(p4 - p1) return (ac * bd) / (bc * ad) # 图像平面上棋盘格行线与激光条纹中心线交于 D1 A_img np.array([120.3, 340.1]) # 棋盘格角点 A B_img np.array([260.4, 342.0]) # 棋盘格角点 B C_img np.array([398.6, 343.8]) # 棋盘格角点 C D1_img np.array([180.2, 341.1]) # 条纹中心线与该行直线的交点 # 计算图像平面上 CR(A,B;C,D1) cr compute_cross_ratio(A_img, B_img, C_img, D1_img) print(cr) # 该值应与世界坐标系下对应四点的交比一致这段代码只完成了交比计算的一半。得到图像平面的交比值 CR 后还需要把它代入世界坐标系下的直线方程利用 A、B、C 三个角点的已知三维坐标反解 D1 的三维坐标不能用单一交比值直接线性外推。工程实现时我一般先把三个世界角点拟合成一条空间直线再把 CR 映射到该直线的参数 t 上最后插值出交点坐标。3. BP 神经网络映射模型的构造与训练3.1 输入输出维度的设计依据振镜式线结构光系统的成像模型由透视投影方程描述中间耦合了相机内参、外参、振镜坐标系到世界坐标系的转换矩阵参数多且相互关联。传统做法是用优化算法求解这些参数但目标函数非凸初始值敏感迭代过程容易落入局部极小值。BP 神经网络是典型的多层前馈网络不关心参数的具体物理含义只拟合输入到输出的映射关系。输入层设计为 3 个节点图像坐标 u、v 和光平面转角 θ。输出层为 3 个节点X、Y、Z。这里的关键是 θ 必须参与输入。如果没有 θ网络只能表达一个固定光平面下的映射振镜一转就失效加入 θ 后整个扫描空间的坐标关系被压缩到一个网络里测量时任意转角都能给出预测。相机内参畸变也不需要单独标定畸变影响已经被标定点的图像坐标隐含地带入训练样本网络自己学掉了。3.2 网络结构、激活函数与训练参数隐含层选单层节点数按经验公式 n sqrt(m t) a 计算m 与 t 分别是输入输出节点数a 取 1 到 10 之间的常数论文最终确定为 10。隐含层激活函数用 Sigmoid输出层用 Purelin 线性函数输出层保持线性是为了让网络的预测值不落在有界区间内否则坐标会被截断。训练算法用 Levenberg-Marquardt它结合了高斯-牛顿法和梯度下降法的特点收敛快适合 4326 个样本这种中小规模回归问题。目标误差设为 1e-4最大迭代 1000 次实际 571 步完成训练。下面是直接用 MATLAB 神经网络工具箱复现的代码。net feedforwardnet(10, trainlm); % 10 个隐节点LM 算法 net.layers{1}.transferFcn logsig; % 隐含层 Sigmoid 激活 net.layers{2}.transferFcn purelin; % 输出层线性激活 net.trainParam.epochs 1000; % 最大训练次数 net.trainParam.goal 1e-4; % 训练目标误差 % 输入按列组织为 3 x N 矩阵u, v, theta X_train [u_train; v_train; theta_train]; % 目标按列组织为 3 x N 矩阵X, Y, Z Y_train [x_train; y_train; z_train]; [net, tr] train(net, X_train, Y_train); save(galvo_calib_net.mat, net);训练完成后的网络权重和阈值就是标定结果。测量时把当前条纹中心点的像素坐标和振镜转角拼成 (u, v, θ) 送入网络输出即为系统世界坐标系下的三维坐标。这里要提醒一点feedforwardnet 默认数据按列组织行代表维度列代表样本第一次用很容易把转置搞反训练前先用 size() 仔细确认矩阵方向。3.3 数据归一化与训练集划分图像坐标 u、v 通常是几百到几千像素光平面转角只有几度到几十度三维坐标是毫米量级三个输入的量纲差异很大。如果直接喂给 Sigmoid输入稍大就会进入饱和区梯度消失训练基本不收敛。常见做法是用 mapminmax 把输入输出统一映射到 [-1, 1]训练完成后再反归一化回物理单位。[X_norm, ps_in] mapminmax(X_train, -1, 1); [Y_norm, ps_out] mapminmax(Y_train, -1, 1); net train(net, X_norm, Y_norm); % 测试时同样先归一化输入再反归一化输出 Y_pred sim(net, X_test_norm); Y_pred_real mapminmax(reverse, Y_pred, ps_out);提示ps_in 和 ps_out 必须跟着网络一起保存现场推理时要用同一组参数做变换不能用新的均值方差重新归一化。样本分配上论文从 4326 个点中随机抽 300 个做测试集其余做训练集。随机抽样这一步值得坚持如果按采集顺序切分训练集和测试集可能来自同一个平移台位置误差会被低估。更好的做法是手动打乱后按转角分层抽样保证每个转角下都有训练样本和测试样本。4. 标定试验、精度验证与误差来源分析4.1 网络预测精度评估训练完成后测试集 300 个样本的预测值与真实值对比前几个样本的典型结果如下。样本预测 X(mm)真实 X(mm)预测 Y(mm)真实 Y(mm)预测 Z(mm)真实 Z(mm)137.42137.39727.06727.06619.93920.0002128.494128.525-9.098-9.14579.93380.000381.83681.82625.09725.0590.0950.000437.50337.49452.90552.88120.06220.000553.46453.46914.32414.299-0.0460.000631.62631.5922.7142.66479.95980.000全部测试样本统计后X、Y、Z 三个方向的均方根误差分别为 0.018mm、0.013mm 和 0.104mm。X 和 Y 方向误差明显小于 Z 方向这符合线结构光系统的几何特性Z 方向对应激光照射深度条纹中心提取误差和平移台定位误差都会沿深度方向放大。测试集误差只能说明插值能力真正反映标定质量还要靠独立物体验证。4.2 标准球验证结果论文用直径 20mm 的陶瓷标准球做独立评估把标准球放在标定空间内 10 个不同位置扫描得到点云后用 Geomagic 拟合球体。序号拟合直径(mm)拟合 RMSE(mm)119.9650.096219.9780.101319.9820.138419.9850.119519.9860.125619.9920.128720.0100.112820.0240.132920.0570.1171020.0610.14510 次测量平均直径 20.004mm与标准值只差 0.004mm整体拟合 RMSE 为 0.032mm。直径误差范围在 -0.035mm 到 0.061mm 之间最大偏差出现在第 10 个位置位于测量范围边缘说明网络在训练样本稀疏区域的泛化能力会下降。这个精度水平对于一般工业零件的尺寸检测完全够用。4.3 误差来源的层次分析误差首先来自标定器件本身的制造和定位精度棋盘格标定板光学打印尺寸偏差小于 0.006mm电动平移台重复定位精度 3μm这两项在数据采集阶段就混入训练样本。其次是振镜转角误差振镜控制电压与反射镜转角只是近似线性线性度偏差会直接加在 θ 输入上网络把这个偏差当作真实转角学习最终反映到预测坐标上。条纹中心线提取精度是另一个重要误差源。灰度重心法对条纹亮度和宽度比较敏感如果被测表面反光不均匀中心位置会出现系统性偏移。论文中使用了两次交比不变原理棋盘格角点提取误差会沿着两次交比计算逐步累积这也是 z 方向误差偏大的直接原因之一。4.4 与数学建模标定法的对比论文引言部分梳理的已有方法各有局限龚晓亮的方法只能标定若干确定角度下的光平面通用性差Chi S. 的共面法假设所有光平面交于振镜转轴轴线装配误差一上来这个前提就不成立Yu C. 的螺旋理论方法要求初始光平面与转轴相交还得知道转轴上控制点的三维坐标现场操作非常严格。这些方法共同的问题是依赖系统装配精度标定过程繁琐换一个振镜或相机就要重新推导模型。神经网络方法把标定问题从参数估计变成函数拟合不需要知道振镜转轴位置不需要单独标定相机内参畸变影响也被网络一并吸收。这种黑箱思路在机器人视觉里并不陌生和手眼标定里用神经网络直接映射机械臂末端位姿到相机坐标的做法同源。代价是放弃了物理模型的可解释性换来了更简单的部署流程和基本相当的精度。5. 现场标定的工程化要点与边界条件5.1 数据采集的几何约束最容易犯的错误是棋盘格平面与平移台移动方向不垂直。靶标平面一旦带俯仰角每个平移位置的局部世界坐标系就会旋转整个训练集的三维坐标系统性扭曲网络学到的映射自然偏掉。我一般会在每个平移台位置提取棋盘格全部角点拟合角点平面检查平面法向量与平移台运动方向的夹角控制在 0.1° 以内再继续采集。5.2 条纹中心线提取方法的选择灰度重心法适合条纹亮度均匀的场景对强反光和漫反射不均的表面不够稳。更常见的做法是先阈值分割剔除背景再逐行计算灰度重心如果条纹在曲面边缘明显弯曲改用 Steger 算法通过 Hessian 矩阵求条纹法向沿法向精化中心位置。平面类零件用灰度重心法加最小二乘直线拟合就够了自由曲面零件建议直接上 Steger。5.3 网络超参数的调整顺序复现这套方法时我一般把调参顺序固定为先保证标定点数量超过 3000 且覆盖完整测量空间再调整隐含层节点数从 8 个开始逐步增加到 15观察测试集 RMSE 是否进入平台期。如果训练到最大迭代次数仍未达到目标误差优先检查输入输出有没有归一化其次检查是否有个别样本的坐标明显偏离拟合平面。隐含层节点不是越多越好节点太多会把条纹提取噪声一起学进去泛化反而变差。5.4 泛化边界与残差校正网络预测精度只在数据采集空间内部有保证。一旦测量目标超出平移台行程或振镜转角范围输出会迅速发散。被测物体表面法向与棋盘格平面夹角过大时激光条纹在物体表面的散射形态改变中心提取精度下降也会拉低测量精度。对于要求更高的场景可以在 BP 网络后面串一个高斯过程回归校正层用 BP 输出与真实坐标的残差训练第二个模型实测能把 Z 方向 RMSE 再降 20%30%而且不需要重新采集标定数据。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价