激光三角测量物体高度
1、硬件搭建
激光与相机的夹角在30°到60°之间,越大精度越高,但同时带来被测物体的阴影越大。
景深越大可以测得的物体高度越大,可通过调小光圈使景深变大,同时增加曝光或增益补偿亮度。
假设被拍摄物体的长度确定,传送带速度固定,及传送带运动的时间等于相机扫描的时间,因此相机每秒扫的线数越快,获得的点云越多,精度越高
2、参数标定
需要知道像素坐标、摄像机坐标、世界坐标的概念。其中摄像机坐标为相机位置为原点的三维坐标系。
2.1、相机内参
采用张正友标定法,准备最少10张标定板在不同视场下的图片,所有图片加起来尽可能覆盖整个相机视野。
2.2、光平面位姿标定
即标定激光平面在摄像机坐标下的相对位姿。三点确定一个平面,因此我们求出光平面上不在一条线上的三个点即可。采取的做法是把标定板放在两个不同的视场下(不同高度)拍摄四张标定图片,分别在打开光源关闭激光(关闭光源打开激光)下的高度1(2)拍摄,取其中三点即可确定光平面。
其中,世界坐标点集+像素坐标点集+相机内参+畸变系数可求得该标定板下的相机外参(RT),参考OpenCV中的solvePnP;相机外参+标定板的一个世界坐标点可求得该点的摄像机坐标,标定板上的坐标点需要在光条上,可通过相对标定板原点的位置求出。
2.3、移动位姿标定
即获取点云时相机每拍摄一次被拍物体对应位姿。采取的做法是关闭激光,让标定板在传送带上被扫描,拍摄保存起始及停止时的两张照片,记录拍摄次数(扫描线数)。
根据世界坐标点集+像素坐标点集+相机内参+畸变系数可分别求得该标定板下运动前后的相机外参(位姿),即可推断出停止时的位姿相对与开始时的位姿。除以拍摄次数(扫描线数),即为移动位姿。
2.4、光条重心提取
2.5、厂家提供标定参数
以上为自己搭建相机及激光,也可以直接购买激光三角相机,厂家已经标定好,直接输入参数即可,价钱高,精度高。
3、点云测高
3.1、获取三维模型
下面为Smart Ray采集三维图片代码。
*打开3D传感器
open_framegrabber ('GenICamTL', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'default', 0, -1, AcqHandle)
*设置延时
set_framegrabber_param (AcqHandle, 'grab_timeout', 10000)
*加载型号
get_framegrabber_param (AcqHandle, 'Parameter_Set_values', ParameterSetValues)
tuple_regexp_select (ParameterSetValues, '.*_3D_Repeat_Snapshot', ParameterSet)
set_framegrabber_param (AcqHandle, 'Parameter_Set', ParameterSet)
*设置标定数据
set_framegrabber_param (AcqHandle, 'Activate_Calibration', true)
*可以获得中间结果
get_framegrabber_param (AcqHandle, 'Width', Width)
get_framegrabber_param (AcqHandle, 'Height', Height)
get_framegrabber_param (AcqHandle, 'Number_of_Profiles_to_Capture', NumberOfZILCaptured)
get_framegrabber_param (AcqHandle, 'ZMap_Lateral_Resolution', ZILLatRes)
get_framegrabber_param (AcqHandle, 'ZMap_Vertical_Resolution', ZILVerRes)
*初始化传感器
grab_image_start (AcqHandle, -1)
*抓取深度图(Z-map)
grab_image_async (PointCloudZ, AcqHandle, -1)
另外也可以通过普通相机获得的一张张扫描图自己构建,以下参考Halcon实例中的reconstruct_connection_rod_calib.hdev。
* Set the poses and camera parameters required to compute
* a calibrated measurement
gen_cam_par_area_scan_polynomial (0.0126514, 640.275, -2.07143e+007, 3.18867e+011, -0.0895689, 0.0231197, 6.00051e-006, 6e-006, 387.036, 120.112, 752, 240, CamParam)
create_pose (-0.00164029, 1.91372e-006, 0.300135, 0.575347, 0.587877, 180.026, 'Rp+T', 'gba', 'point', CamPose)
create_pose (0.00270989, -0.00548841, 0.00843714, 66.9928, 359.72, 0.659384, 'Rp+T', 'gba', 'point', LightplanePose)
create_pose (7.86235e-008, 0.000120112, 1.9745e-006, 0, 0, 0, 'Rp+T', 'gba', 'point', MovementPose)
*
* Create a model in order to process the profile images
* and set the required parameters for the model.
gen_rectangle1 (ProfileRegion, 120, 75, 195, 710)
create_sheet_of_light_model (ProfileRegion, ['min_gray','num_profiles','ambiguity_solving'], [70,290,'first'], SheetOfLightModelID)
set_sheet_of_light_param (SheetOfLightModelID, 'calibration', 'xyz')
set_sheet_of_light_param (SheetOfLightModelID, 'scale', 'mm')
set_sheet_of_light_param (SheetOfLightModelID, 'camera_parameter', CamParam)
set_sheet_of_light_param (SheetOfLightModelID, 'camera_pose', CamPose)
set_sheet_of_light_param (SheetOfLightModelID, 'lightplane_pose', LightplanePose)
set_sheet_of_light_param (SheetOfLightModelID, 'movement_pose', MovementPose)
*
* Measure the profile from successive images
for Index := 1 to 290 by 1read_image (ProfileImage, 'sheet_of_light/connection_rod_' + Index$'.3')dev_display (ProfileImage)dev_display (ProfileRegion)measure_profile_sheet_of_light (ProfileImage, SheetOfLightModelID, [])
endfor
3.2、获取物体相对高度
*读入点云数据(文件中)
read_object_model_3d ('./2020-01-10-235331.om3', 'm', [], [], ObjectModel3D, Status)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)
*2得到电池表面点云的数据(mm)
get_object_model_3d_params (ObjectModel3D, 'point_coord_z', GenParamValue)
*去掉噪点
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 15, 16, ObjectModel3DThresholded)
visualize_object_model_3d (WindowHandle, ObjectModel3DThresholded, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)
connection_object_model_3d (ObjectModel3DThresholded, 'distance_3d', 1, ObjectModel3DConnected)
get_object_model_3d_params (ObjectModel3DConnected, 'num_points', GenParamValue1)
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 1000, 50000, ObjectModel3DBattery)
visualize_object_model_3d (WindowHandle, ObjectModel3DBattery, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)
*3得到背景的点云数据集合(mm)
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 12, 14, ObjectModel3DBackGround)
visualize_object_model_3d (WindowHandle, ObjectModel3DBackGround, [], PoseOut1, ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut2)
*4求电池上表面点云的z坐标值
get_object_model_3d_params (ObjectModel3DBattery, 'point_coord_z', GenParamValue1)
*5求背景表面的点云的z坐标值
get_object_model_3d_params (ObjectModel3DBackGround, 'point_coord_z', GenParamValue2)
*6求电池上表面点云的z坐标的平均值
A:=mean(GenParamValue1)
*7求背景表面点云的z坐标的平均值
B:=mean(GenParamValue2)
*8求电池表面的高度
H:=A-B
Param[0]:='Shift+left button Zoom'
Param[1]:='ctrl+ left button Move'
Param[2]:='left button Rotat'
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], '电池点云的高度为'+H+'mm', 'Battery Object', Param, PoseOut)
激光三角测量物体高度相关推荐
- opencv 通过标定摄像头测量物体大小_激光三角测量法在工业视觉检测上的应用...
来源:公众号|3D视觉工坊(系投稿) 作者:白杨 「3D视觉工坊」技术交流群已经成立,目前大约有12000人,方向主要涉及3D视觉.CV&深度学习.SLAM.三维重建.点云后处理.自动驾驶.C ...
- 激光三角测量法在工业视觉检测上的应用
点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 激光三角测量法,是工业视觉领域较为常用也是比较容易理解的一种3D检测算法.本文主要从应用层次来阐述, ...
- 激光三角测量(sheet of light)halcon示例详解 Reconstruct_Connection_Rod_Calib.hdev 模型三维重建...
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11555100.html 前言:最近公司项目用到halcon的3d模板匹配,三维重建,相机标定, ...
- 激光三角测量法 原理、优点和不足
目录 引言 激光三角测量法的原理 正入射 斜入射 正入射与斜入射的对比 激光三角测量法测距的特点 主要误差来源 激光抖动 被测物体表面颜色 激光光斑检测精度 入射光束的景深限制 参考文献 引言 激光测 ...
- 3D视觉——线激光测量胶水高度
线激光测量胶水高度 1. 项目背景介绍 2. 基恩士线激光的设置 3. 使用Halcon处理深度图 3.1 线激光高度数据转为深度图 5. Halcon图像处理方法 6. Halcon代码 1. 项目 ...
- 激光三角测量法中像素坐标与相机坐标转换
对激光三角测量原理进行数学建模.以相机光心Oc为原点建立相机坐标系Oc-XcYcZc.沿OcZc轴在距离光心Oc焦距f处建立等效像素坐标系Opix-uv.设轴OcZc交Opix-uv平面于Op,建立图 ...
- halcon 激光三角测量 (片光技术)标定 ,示例 calibrate_sheet_of_light_3d_calib_object.hdev
halcon 激光三角测量 (片光技术)标定 ,示例 calibrate_sheet_of_light_3d_calib_object.hdev Halcon自定义函数 算子翻译 xyz_to_obj ...
- 带标定的激光三角测量代码实例
* This program demonstrates how to perform the calibration * of a sheet-of-light measurement system. ...
- 激光近视手术-高度近视女孩-近视手术多少钱
刘馨睿,今年13岁,是一个活泼开朗.成绩优异的女孩,她的妈妈是学校老师,爸爸是一所二级甲等医院的主治医师.下面这篇文章是刘馨睿一家人通过回忆写出来的,如果您的孩子视力不好或者正在视力康复过程中,认真读 ...
最新文章
- php与tcp哪个快,PHP程序员如何理解TCP协议
- TP返回原生SQL语句:fetchSql
- 【知识图谱】一、知识表示与知识建模
- 《算法导论》读书笔记之第1章 算法在计算机中的作用
- 数据结构-链表4-企业链表
- 简洁的架构还能高效和准确?清华华为提出新型残差循环超分模型:RRN!
- MNIST的AlexNet实现
- 运维之Linux秋招重点(根据面经和常见笔试题总结,持续更新)
- js判断是否为手机端访问
- 【数据库】数据库系统工程师(软考中级)——学习过程总结
- 交换机端口mtu值最大_思科交换机基本配置命令全集-mtu值怎么设置
- vim/gvim 主题配色方案下载 安装修改配置
- 【Segmentation】
- python实现词云(爬取豆瓣影评)
- 工业互联网·制药设备远程监控运维维护平台
- qq侧滑界面的实现(DreawerLayout)
- 关于Fiddler使用和答疑
- 透过华为军团看科技之变(一):广域网络
- (HTTP的)幂等性Idempotence
- TeeChart Pro VCL/FMX教程之3D图表和OpenGL
热门文章
- 怎么添加设置微信定位服务器,微信怎么设置定位功能!
- Xcode Warning: “no rule to process file
- 将centos7打造成桌面系统centos
- abp moveto mysql_abp 使用 hangfire结合mysql
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- Samsung-WLAN-AP路由器RCE漏洞复现
- 五阶魔方公式java_五阶魔方降阶法公式是什么?
- corelDraw 的CDR格式解析
- openstack学习笔记六 多节点部署之keystone
- 有机酸膜分离之柠檬酸生产应用反渗透技术