线扫激光算法原理

2023-11-02

一:线扫激光算法原理

激光器发出的激光束经准直聚焦后垂直入射到物体表面上,表面的散射光由接收透镜成像于探测器的阵列上。光敏面于接收透镜的光轴垂直。如图:

当被测物体表面移动x,反应到光敏面上像点位移为x’。a为接收透镜到物体的距离(物距),b为接收后主面到成像面中心的距离(一般取焦距f),θ为激光束光轴与接收透镜之间的夹角。D为激光光束轴到透镜中心的距离。接收透镜的焦距为f,其余的参数如下图:

 

在△ABC中,由正弦定理的:

将上式整理得:

在直角三角形△CDE (∠CDE=90°)中, 

   将其带入到上式,得:(远离透镜)。

上式为远离透镜的公式,靠近基准面的公式刚好相反:(靠近透镜)。

二:参数计算和选取

通过上面的算法推导,我们可以看出在整个公式中,我们需要得到的参数有两个,a(接收透镜到物体的距离(物距))和θ(激光束光轴与接收透镜之间的夹角)。

2.1参数的计算

(1)参数计算的原理

因为公式中有两个未知的参数a和θ,那么想要求得这两个未知参数,我们可以通过得到两组已知的(x,x’)来列出两个二元一次方程组来求解。

假设两组已知的参数为(X1,X1’)(X2,X2’),通过推导过程的公式如下(以靠近透镜为例):

通过计算得出:

将求出的θ带去上式可以得出a.

(2)参数计算结果

在计算参数的样本选取中,为了尽可能的提高精度,我们在靠近基准面的样本中选取的计算组合分别为(1mm,2mm),(1mm,3mm),(1mm,4mm),(1mm,5mm),(1mm,6mm),(1mm,7mm),(1mm,8mm),(1mm,9mm),(1mm,10mm),总共9组数据。那么我们在一次采样中可以得出9   组数据。

2.2参数的选取

在整个的实验过程中,后期计算参数a和θ时,我们总共采样了五次数据,每次数据得到的9组参数,通过45组数据来计算整个样本的位移。观察误差值得大小,我们总共选取了三组参数,综合比对发现当比值a/(f*sinθ)为31.5~31.7且a>200时,计算出的误差偏小且在测量的范围内保持一定趋势。(这为我们后面的非线性拟合的误差补偿提供了基础)

 

三:相机的标定

3.1单目相机标定的目的

  获取摄像机的内外参数矩阵,同时也会获得每一幅标定图像的选择和平移矩阵,内参数矩阵和畸变向量可以对之后相机拍摄的图像进行矫正,得到畸变相对很小的图像。

3.2相机标定的输入和输出

   相机标定的输入为22*22单位长度为1mm/格的棋盘格图像。总共12张。

相机标定的输出为:内参数矩阵(fx,fy,Cx,   Cy)和畸变向量(k1,k2,p1,p2,p3)

ps(注意,这里有两个不同的焦距fx,fy。因为单个像素点在低价成像仪上是矩形而不是正方形。实际上焦距fx=f*Sx.    f为实际的物理焦距长度,Sx为x方向的像元尺寸。同理fy=f*Sy)

3.3用到的工具

硬件:巴士勒相机,摄像头(f=25mm)、棋盘格标定板

软件:VS+OPENCV

3.4标定的结果

四:样本采集

样本采集我们有两种方式,第一种方式为用标准块来采集。第二种方式是通过千分尺来采集。我们采用第二种方式进行采集样本。采集的过程为以整个图像的中心为起点(作为基准面),每隔0.1mm取一次图像,取到图像的边界。通过上述取样本,我们得出位移的取值范围为-30.0mm到+30.0mm。

五:计算结果

通过上述的参数计算,相机标定以及样本采集之后,我们开始计算结果,在选曲的三组参数,来计算结果得到的误差,在附件1中。

六:误差补偿

在得出误差之后,我们发现误差的变化是具有趋势的。随着位移的增大误差是逐渐增大的。从计算结果偏小逐步到计算结果偏大。在这里我们取得误差补偿算法为基于最小二乘法的非线性拟合。拟合的方程如下:

Y=a0+a1x+a2x^2+a3x^3

方程中x代表的是像素位移,Y代表的是误差。通过拟合之后的误差方程和整个算法进行融合及拟合后的求取误差为

位移=原算法-误差方程

最后通过误差补偿的结果得到的误差,在附件2中。

七:实验中遇到的问题

(1)算法上的改进

第一:在位移算法上遇到的问题刚开始在推算的过程中,忽略了一个多项式导致后面在计算的过程中误差偏大,后面采用了三角函数的算法,整个精度的提升很明显。

第二:在参数计算的算法推导过程中,出现了一个错误靠近基准面和远离基准面的算法是不一样的。这里出现了一个推导错误。后来重新推导之后改正了过来。

第三:在参数的选取上,刚开始的理解是在参数计算之后参数如果越接近实际的a和θ,计算出来的结果越真实。后来经过试验发现这样的选取准则是不正确的。而且不同组的样本计算出的a和θ是不一样的。最后通过分析得出,虽然计算出的a和θ是不一样的,但是a/(f*sinθ)的比值几乎是一致的。后面选取参数是选择误差小的。

第四:后面在观察误差的时候发现在0.1mm的位移时,同一组参数不同样本的计算结果都是一样偏大的。在实际的测量过程中我们观测到0.1mm的位移,通常对应的是0.6左右个像素。通过观察程序发现了把像素float型转换成int型导致这个误差结果。后面改过来之后,误差明显变小了。

(2)结构上的改变

在中期的试验中,我们改进镜头和相机的结构,来改善景深,但是后来我们通过试验发现原有的结构景深也是足够用的,所以后面的试验还是按照原来的结构来。

(3)线激光的中心点提取原则

在整个计算过程中,每次计算位移的结果,我们要提取每行的线激光的中心坐标,刚开始计算的算法为边缘二分法,取中点坐标。这种算法偏差较大。在后面通过阅读文献,采用了灰度质心算法。在后面的计算中,都是采用这个算法。在0.01mm的位移下,发现这个算法是有效的,检测到像素的位移在0.07个像素左右。

八:总结

通过以上的一系列实验,我们可以达到的误差精度是0.01mm左右,现在取得的样本在±10mm的范围内。但是整个容许的测量范围是±30mm。接下来可以实验的内容:

第一:可以以0.01mm为频率采样(这样在补偿后结果更精确)。

第二:样本计算扩大到整个测量范围。

第三:采用千分尺采样时,人为读书的误差是无法避免的,后期测量的时候需进行改进。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线扫激光算法原理 的相关文章

随机推荐

  • 使用dom4j 生成xml UTF-8 编码错误之解决

    文件名称 String fileName
  • 红外图像处理:改进的直方图

    红外图像处理 改进的直方图 红外领域 常用直方图拉伸来进行14bit数据到8bit数据的转换 以方便显示 传统直方图拉伸算法存在如下问题 1 对于红外图像 细节丢失严重 2 图像柔和度不够 人感观不理想 我们在分析红外数据特点 结合各种实际
  • vue-cli 生产模式去除 console.log

    preface 最近项目接近尾声 开始着手项目加载优化操作 简要如下 大的背景图 进行了在线压缩 第三方引用的模块使用 cdn引入 如 vue elementui echarts 异步加载 页面 和 某些 css 或者 js 比较大的模块
  • 日期时间范围方法

    需求 当前日期或指定日期所在的整年 整季度 整月 当前日期或指定日期所在的上一年 上个季度 上个月 注 这里的整月不是固定的30天 是根据下个月的第一天倒推的 年份季度同理 最简单的获取当前日期或指定日期整月 eslint disable
  • 前后端数据交互

    前后端数据交互 前后端数据交互方式有三种 1 form表单 2 ajax 3 websocket form表单
  • 18年西工大硕士研究生入学考试复试机试解答

    Headline 18年瓜大机试解答 Author 周小枫 Email weijinxiong ncu outlook com Date 2019 1 4 Brief 这是一份菜鸡帮更菜的鸡写的参 考code 经测试 以下code都OK 如
  • priority_queue元素为指针时,重载运算符失效

    使用priority queue构造最大最小堆时 发现priority queue中元素为指针时 std greater std less函数并不能调用到自定义数据的重载运算符 排序结果是根据指针地址大小计算的 从而导致最大最小堆失效 in
  • 测试用例设计——边界值分析法

    在前面的测试用例设计 等价类划分法中 我们使用等价类划分法给两位数加法器设计了测试用例 但在测试过程中我们发现了一个问题 为什么我们用等价类法设计的测试用例没有发现这个问题呢 查看一下代码 发现程序员粗心 边界条件设置错误了 无数的测试实践
  • Mac升级go

    目录 升级流程 卸载 安装 升级流程 在Mac中对go版本的升级采用先卸载后安装的过程进行go版本升级 或者回退 卸载 在卸载前 先查看下当前的go版本 go version go version go1 14 5 darwin amd64
  • cgroup小结

    安装cgroup yum install libcgroup 配置cgroup config文件 vim etc cgconfig conf mount cpuset cgroup cpuset cpu cgroup cpu cpuacct
  • 【订单分批】基于萤火虫算法求解订单分批问题附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 内容介绍 一种基于群体智能优化算法的订单分批方法 包括如下步骤 1 建立以订单方案的总行走距离
  • DNS报文格式解析

    DNS分为查询请求和查询响应 请求和响应的报文结构基本相同 基础结构部分 报文首部 事物ID DNS报文的ID表示 对于请求报文和其对应的应答报文 该字段的值是相同的 通过它可以区分 DNS 应答报文是对哪个请求进行响应的 标志 DNS 报
  • Vue props传参获取失败解决方法

    文章目录 问题背景 解决方法 总结 问题背景 在父组件 通过ajax请求给controlManage赋值 再将值传到Test子组件 子组件在created mounted方法均获取不到数据
  • 使用R语言对指定列进行开根号并生成新的数据列

    使用R语言对指定列进行开根号并生成新的数据列 在R语言中 我们经常需要对数据进行各种数学运算和转换 其中一项常见的操作是对指定列进行开根号并生成新的数据列 本文将介绍如何使用R语言实现这个操作 假设我们有一个名为 data 的数据框 其中包
  • Sublime Text入门使用教程

    简介 说到最好用的编辑器 首推Sublime 感觉比notepad 胜出无数倍 支持 Windows 及 Mac 等多平台 类似于 Eclipse IDEA 有着丰富的插件系统 完全可以满足各种编辑 开发需求 强烈建议安装或者升级到最新版
  • boost解析xml C++

    cpp include
  • 【Xilinx Vivado时序分析/约束系列2】FPGA开发时序分析/约束-建立时间

    目录 基本概念 数据结束时间 Data finish time 保持时间门限 保持时间余量 Hold Slack 基本概念 数据结束时间 Data finish time 之前解释了数据达到的时间 对于data arrival time T
  • 理解矩阵(一)

    前不久chensh出于不可告人的目的 要充当老师 教别人线性代数 于是我被揪住就线性代数中一些务虚性的问题与他讨论了几次 很明显 chensh觉得 要让自己在讲线性代数的时候不被那位强势的学生认为是神经病 还是比较难的事情 可怜的chens
  • 区间预测

    区间预测 MATLAB实现QRCNN LSTM卷积长短期记忆神经网络分位数回归时间序列区间预测 目录 区间预测 MATLAB实现QRCNN LSTM卷积长短期记忆神经网络分位数回归时间序列区间预测 效果一览 基本介绍 模型描述 程序设计 参
  • 线扫激光算法原理

    一 线扫激光算法原理 激光器发出的激光束经准直聚焦后垂直入射到物体表面上 表面的散射光由接收透镜成像于探测器的阵列上 光敏面于接收透镜的光轴垂直 如图 当被测物体表面移动x 反应到光敏面上像点位移为x a为接收透镜到物体的距离 物距 b为接