转自 https://www.arduino.cn/forum.php?mod=viewthread&tid=4703

这个东西网上以前也有,并不是我原创的,但是整个的制作过程都是我自己弄的,包括软件和硬件。算是借鉴了前人的创意吧。下面来详细说一下。
        物体被放在一个旋转台上,通过摄像头捕捉照射到物体表面的激光线,通过对扫描线的处理得出该剖面的轮廓线。通过旋转台的旋转每间隔一个小的角度进行一次采样,最后得到足够多的表面轮廓线,就可以构建出物体的3D模型。
3D激光扫描仪原理
        这个项目主要使用了三角测距法对距离进行测量。普通的三角测距原理如下图:
           
        这个测距法得到的是目标点(P1和P2)距离Rotation Center的距离,但是在该扫描仪中,我定义了一个柱坐标系,该坐标系的原点是转盘中心,需要测量的距离也是物体表面距离中心轴的距离。因此,在本项目中,测距的原理图如下:
           
        图中最上方“十”字就是旋转台中心,根据以上原理图,可以计算出r的值:
           (上式有误,勘误如下,20150511)
 
硬件部分 :     
做好的扫描仪的硬件部分:

电路部分的连接如下图:

利用单片机驱动步进电机,步进电机带动旋转台,这样可以精确地控制旋转台的转速,得到更好的扫描效果。
实物连接如下:

 
(忽略1602和摇杆,在这里没有用)
arduino在这里的功能并不重要,只是准确得驱动步进电机缓慢转动。硬件部分不是本文重点,不再敷述。

软件部分:
        单片机上的软件很简单,就是精确的控制步进电机的转速,因为这个摄像头的帧数很低(随便找个地方15块买的摄像头,估计没有更烂的了),只有10 fps,设定每隔2°扫描一次需要扫描180次,所以要扫描180个位置需要18秒,因此单片机控制步进电机每18秒旋转一圈就可以了。
视频捕捉和处理
 
        从摄像头获取帧之后,查找出扫描线的位置,并根据开始得到的映射关系处理得到物体轮廓的正面投影 ,并利用向量把每个像素点坐标保存起来。

 
         
        上图中右边是直接将原始画面二值化后得到的扫描线粗略位置(未经平滑处理),从图中可以看出,我已经利用中值算法查找出了扫描线的准确位置,并在图中用黑线表示出来。画面左侧,就是利用已经推导出的公式计算出的物体轮廓的正投影轮廓,但是这个轮廓线并不精确(未经平滑处理),并且夹杂着噪点。在所有数据采集完成之后,使用 函数去掉噪点并对扫描线进行平滑处理。
        去除噪点的算法比较简单,遍历每一个点并计算其和周围4个点的距离,如果改点离周围的点足够远(我设置的是10个像素点),就可以认为这个点是孤立的,即为噪点,于是将其去除。
        平滑算法有很多可以选择,但是我每一条扫描线上的采样点足够密集,达到480个点,即摄像头的纵向分辨率,因此直接采用了中值平滑,将每一条扫描线单独进行平滑处理后在根据其左右两边的两条线再进行平滑,如此反复10次得到了比较满意的效果。但是这样也有一点缺陷,使物体表面本来的小细节丢失了一些。但是这次实验中使用的摄像头成像质量很差,对物体表面的激光扫描线的捕捉不准确,使一些细节本身就无法捕捉到,这也造成了扫描线捕捉不准确,实属无赖之举。
        这样一直采集到180条轮廓线后就得到了物体表面的信息,这些数据被称作“点云”。利用一个二维向量将点云数据保存起来。由于分辨率的问题,物理上的误差会在0.几毫米,并且如果不经过处理,最后得到的物体模型表面会变得很难看,下面就是表面经过处理和没经过处理得到的模型的对比:

 
        
绘制模型
点云用柱坐标表达,二维向量的两个角标分别表示了柱坐标的α和h值,其中保持的值为r。在数据采集和处理完成之后,就可以利用OpenGL进行模型绘制了。在绘制模型之前还需要把柱坐标转换成直角坐标。
在OpenGL中,绘制了三种模型:点云,线框,实体。其中,线框模型为了便于观察,可以改变线框的密集程度。
这部分并无特别之处,利用得到的点坐标,绘制出物。
  
     
 
工程已上传github,https://github.com/0x000000FF/3D_scaner

转DIY 3D激光扫描仪相关推荐

  1. DIY 3D打印机——【有啥用啥版】

    3D打印已经非常普及,手搓3D打印机的也很普遍了,不幸的是多年前买的三角洲(delta型)打印机年前罢工了,幸好它完成了一项重要使命:让手搓的铣床动起来,从而能够让铣床把受力部分的PLA零件自己加工电 ...

  2. DIY 3D全景摄像机

    本文原载于我的主页:planckscale.info,转载于此. 版权声明:原创作品,欢迎转载,但转载请以超链接形式注明文章来源(planckscale.info).作者信息和本声明,否则将追究法律责 ...

  3. ciclop读音,购机必备,15种 3D扫描 设备 优缺点汇总

    原标题:购机必备,15种 3D扫描 设备 优缺点汇总 小编总结了市场上常见的15种,可用于3D扫描的软件和设备,并详细列出有关它们的价格.优缺点等特征,以供大家在购机时有比较实用性参考: 一.软件选择 ...

  4. ZZ 自制低成本3D激光扫描测距仪(3D激光雷达),第一部分

    为什么80%的码农都做不了架构师?>>>    来自CSK的低成本3D scanner.Very Impressive! 在开始介绍原理前,先给出一些扫描得到的3D模型以及演示视频, ...

  5. matlab制作以太网数据接收上位机_3D激光扫描仪设计及数据处理

    本文内容转载自<电子技术应用>2019年第10期,版权归<电子技术应用>编辑部所有. 段清明,王凡,徐琳琳,全文俊 吉林大学仪器科学与电气工程学院 摘要:利用2D激光雷达配合云 ...

  6. TLS 地面三维激光扫描仪

    Trimble 地面三维激光扫描系统 随着数字地球和数字城市的发展,三维数据获取工具和手段的不断进步,促进三维空间数据获取朝集成化.实时化.动态化. 数字化和智能化的方向发展,现实世界的立体信息快速地 ...

  7. 3D打印控制板初步认识

    3D打印控制板 RAMPS1.4 3D打印控制板:软件下载\连接\安装\测试 电源接反,电机驱动板接反将有可能烧毁芯片和电路,请再三确认后再进行通电. 如何使用: 1.需要用到的模块或器件: Ardu ...

  8. Automatic Targetless Extrinsic Calibration of a 3D Lidar 翻译

    3D激光雷达的自动无目标外部校准 摘要 本文报告了一种基于交互信息(MI)的算法,用于3D激光扫描仪和光学相机系统的自动外部校准. 通过使用MI作为注册标准,我们的方法无需任何特定的校准目标就可以在原 ...

  9. 点云补全综述 Comprehensive Review of Deep Learning-Based 3D Point Clouds Completion Processing and Analys

    点云补全(点云完成)综述(Point Clouds Completion) By 人工智能社区 www.studyai.com Comprehensive Review of Deep Learnin ...

最新文章

  1. redis del清除缓存java_删除redis缓存报错
  2. 分享一个超棒的在线jQuery mobile原型设计开发工具 - codiqa
  3. Lnc2cancer 3.0,lncRNAs和circRNAs数据更新及分析工具使用指南
  4. idea2020配置springboot热部署超全步骤以及安装JRebel插件
  5. 免费的数字图书馆_不仅是书籍:您当地图书馆可能提供的所有免费数字资料
  6. 前端学习(2624):state
  7. matlab实现非线性规划
  8. UE3 iPhonePackager 工具
  9. linux树形看磁盘,2 - 3、Linux—磁盘分区和挂载【2021-3-3】
  10. BZOJ 1492 货币兑换Cash
  11. SEO人员,如何搭建你的网站基础框架?
  12. 计算机管理里面和打印机相关的,打印机设备
  13. 微信公众号授权成功重定向后点击返回最上一层时显示空白页
  14. 【秋招内推】近期互联网公司秋招内推合集
  15. pacman源添加及yaourt安装
  16. ZZNUOJ_C语言1032:员工薪水(完整代码)
  17. AVL树-自平衡二叉查找树(Java实现)
  18. kali虚拟机安装及配置
  19. 前台可以用if elseif吗_划重点美容仪的介质用完了,可以用自己的精华吗?
  20. H265/HEVC编解码系列(1):图像分割(Slice、Tile、CTU)

热门文章

  1. 微信小程序开发 一 tabbar图标和颜色
  2. SpringBoot-生成验证码
  3. 什么是 IconFont?有什么优缺点?
  4. 嵌入式开发 1 -8051单片机的结构体系(待更)
  5. day01 -云计算简介与华为云计算解决方案01
  6. Tensorflow tflearn
  7. java 动态称重_Java面向对象 --2
  8. 南昌大学 计算机专业,考研:计算机专业选深圳大学和南昌大学?老师给出一个实用建议...
  9. 数字电子技术基础 原码 反码 补码及运算
  10. [CCS] 没有Runtime Object View(ROV)怎么办?