基于激光成像的伪3D建模仪(结项)
- 系统方案
本项目基于激光成像的方式,结合DB410进行上位机开发,完成对指定物件扫描得到最终的伪3D模型。激光成像单元的话采用了一字线激光和摄像头构成。特定的结构构造,经过软件的校准,完成对物体的高精度建模。使用OpenCV开源库完成图像处理部分。得到的伪3D模型可以在MeshLab中进行查看
PS:为什么不做3D而是伪3d呢。因为经过无数次尝试小编也想做3d,但是水平有限实在办不到啊。只好做成伪3d。
- 硬件准备
硬件框图如上图所示
1.鼠标键盘与开发板(还需要一个USB hub,usb接线不够用了)
2.usb驱动摄像头
3.可以用的显示器
4.一字线激光800n以上。
放个组合之后的图,因为光照对成像的影响特别大所以小编用了一个超级大的盒子把物理四轴遮住,防止光照的影响,使用了一个云台来搭载摄像头
- 成像原理
(计算式没法打直接word截图了)
参量说明:
D:我们扫描设备所在的平面与平行于该平面的参考平面的距离值。
d:扫描设备中摄像头的位置和一字线激光器的距离大小
m:激光器和参考平面的交点位置和参考平面在摄像头垂直方向的交点的距离大小。
- 软件逻辑流程
软件的实现框图如上,下面我们详细说明软件的实现过程:
系统初始化,主要完成对摄像头的检测工作,和软件使用的内存分配内容。
之后我们会进入一个选择对系统的校准问题,这里的校准我们使用的Camera Calibration Toolbox for Matlab工具进行摄像头的图像校准,解决摄像头当中可能存在的图像畸形。保证得到的图像数据的准确度。
之后会进入一个系统的设置过程,该设置主要是对我们的建模仪的参数设置,包括我们的摄像头和一字线激光的位置d的距离,扫描设备和参考平面的距离D设置,以及我们的激光器的激光射线与我们参考平面的交点位置和摄像头垂直方向和参考平面交点位置的距离m,对这三个参数进行设置。
完成对摄像头的校准之后我们就可以进入扫描阶段了,这里我们的设计逻辑是,我们仅在设备第一次使用的时候才需要进行相应的设置,没有对设备进行改动的话,下一次进入软件是不需要进行设置的,直接可以进入扫描阶段。
进入扫描阶段之后我们可以直接在DragonBoard上运行的软件中选择开始扫描就可以了,在平台上缓慢挪动激光头可以看到扫描线,大约需要扫描3分钟。最后DragonBoard的上位机程序会得到一个ply的模型文件,我们将其导入我们的MeshLab中就可以查看我们的扫描模型了。
- 系统测试过程
通过摄像头与激光头在黑暗环境下拍摄出简单图像,在简单图像上对激光像素点进行提取。
说道这里就不得不说安装opencv了,这个过程实在是痛苦,遇到了各种bug,在之前的分享中有说道。
提取到的像素点部分截图,由于激光一字线光具有一定的宽度,只提取出了高亮部分最左与最右的两个像素点,括号内靠左为列号,靠右为行号。
可以从数据看出,随着行号一直增加,列号的数值逐渐减少,符合上图激光右斜的特性,且每一行光宽度大约都为5个像素点。
通过软件提取出复杂图像如截图所示
在视频中某帧静止图像上,用算法计算出三维坐标位置,记录到文件内。部分数据截图,已经保存成.ply格式。这个过程看似简单,但是其实测试了非常多次,算法一直在更新,一直想力求做到3d图像,但是难度实在是太大。
最后放几张完成的图
扫描界面的图
成像的图,效果还不错
再放一张扫实验室的图,距离比较远效果就不是很理想了