当前位置: 首页 > news >正文

genicamtl_lmi_gocator_objectmodel3d

目录

  • 一、在halcon中找不到genicamtl_lmi_gocator_objectmodel3d例程
  • 二、在halcon中运行genicamtl_lmi_gocator_objectmodel3d,该如何配置
  • 三、代码分段详解(一)传感器连接
  • 四、代码分段详解(二)采集图像并显示
  • 五、代码分段详解(三)坐标变换
  • 六、常见问题

一、在halcon中找不到genicamtl_lmi_gocator_objectmodel3d例程

重新运行halcon安装软件,选择对应的安装包即可。

二、在halcon中运行genicamtl_lmi_gocator_objectmodel3d,该如何配置

1、任务栏搜索环境变量
在这里插入图片描述
2、添加下图所示环境变量,点击确认。
在这里插入图片描述

三、代码分段详解(一)传感器连接

1、查找’GenICamTL’协议支持的设备信息,选择 'Gocator’传感器
2、打开传感器
3、设置显示参数

dev_update_window ('off')info_framegrabber ('GenICamTL', 'info_boards', Information, ValueList)
tuple_regexp_select (ValueList, 'Gocator', Device)
open_framegrabber ('GenICamTL', 0, 0, 0, 0, 0, 0, 'progressive', 16, 'rgb', -1, 'false', 'default', Device, 0, -1, AcqHandle)
ConfigFile := ''
if (ConfigFile != '')Go2GenTL_SetConfigFileName (AcqHandle, ConfigFile)
endif
get_framegrabber_param (AcqHandle, 'image_width', Width)
get_framegrabber_param (AcqHandle, 'image_height', Height)
DisplayHeight := 600
DisplayWidth := DisplayHeight * Width / Height

四、代码分段详解(二)采集图像并显示

1、采集图像:grab_image (Image, AcqHandle)
2、图像数据解析:Go2GenTL_ParseData
3、分别显示HeightMap和IntensityScaled

while (true)display_waiting_message ()* grab the imagetrygrab_image (Image, AcqHandle)catch (Exception)continueendtrydev_close_window ()dev_open_window (0, 0, DisplayWidth, DisplayHeight, 'black', WindowID1)dev_open_window (0, DisplayWidth + 5, DisplayWidth, DisplayHeight, 'black', WindowID2)Go2GenTL_ParseData (Image, HeightMap, Intensity, frameCount, timestamp, encoderPosition, encoderIndex, inputs, xOffset, xResolution, yOffset, yResolution, zOffset, zResolution, width, height, HasIntensity)dev_set_window (WindowID1)dev_display (HeightMap)dev_disp_text('HeightMap', 'window', 10, 10, 'black', [], [])dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])if (HasIntensity)scale_image (Intensity, IntensityScaled, 1.0 / 256, 0)dev_set_window (WindowID2)dev_display (IntensityScaled)dev_disp_text('Intensity', 'window', 10, 10, 'black', [], [])endifstop ()dev_close_window ()dev_close_window ()
endwhile

五、代码分段详解(三)坐标变换

1、创建以m为单位的X和Y图像
xResolution:X方向分辨率,这里用的是nm单位,如果有疑问查看Gocator 文档
yResolution:y方向分辨率,这里用的是nm单位
Units := 1e-9,最后把坐标变成m单位

gen_image_surface_first_order( : ImageSurface : Type, Alpha, Beta, Gamma, Row, Column, Width, Height : )
gen_image_surface_first_order (X, 'real', 0, xResolution * Units, xOffset * Units, 0, 0, Width, Height)
gen_image_surface_first_order (Y, 'real', yResolution * Units, 0, yOffset * Units, 0, 0, Width, Height)

ImageSurface(r,c) = Alpha(r - Row) +Beta(c - Column) +Gamma
X=xResolution * Units * (Px - Column) + xOffset * Units
Y=yResolution * Units * (Py - Row) + yOffset * Units

2、gocator坐标变换到halcon坐标

scale_image (Z, Z, zResolution * (-1.0 * Units), (StandOff +zOffsetTransform_signed) * Units - zOffset * Units)

Z= zResolution * (-1.0 * Units)* Z + (StandOff +zOffsetTransform_signed) * Units - zOffset * Units)
其中:
zResolution * (-1.0 * Units):将传感器数据缩放到米单位,负号实现坐标系方向翻转
(StandOff + zOffsetTransform_signed) * Units:基准距离补偿
zOffset * Units:额外偏移修正

3、生成三维模型并显示:xyz_to_object_model_3d

while (true)* Calculate the real-world coordinates (X, Y, Z) from pixel* coordinates (Px, Py, Pz):* X = X-offset + Px * X-Resolution* Y = Y-offset + Py * Y-Resolution* Z = Z-offset + Pz * Z-ResolutionUnits := 1e-9gen_image_surface_first_order (X, 'real', 0, xResolution * Units, xOffset * Units, 0, 0, Width, Height)gen_image_surface_first_order (Y, 'real', yResolution * Units, 0, yOffset * Units, 0, 0, Width, Height)* Create Z image with correct scaling (in [m]) and set HALCON camera 3D* coordinate system:*    Xhalcon = Xgocator*    Yhalcon = Ygocator*    Zhalcon = StandOff + zOffsetTransform - Zgocator*    where: StandOff = ClearanceDistance + (MeasurementRange/2)* * Reduce domain: 0 value means invalid datathreshold (HeightMap, Region, 1, lsh(1,16) - 1)reduce_domain (HeightMap, Region, ImageReduced)convert_image_type (ImageReduced, Z, 'real')Go2GenTL_Transformation (AcqHandle, xOffsetTransform, zOffsetTransform, AngleTransform, OrientationTransform, StandOff)* Transformation values in [um]* The uint4 values have to be interpreted as int4if (zOffsetTransform > lsh(1,31))zOffsetTransform_signed := zOffsetTransform - lsh(1,32)elsezOffsetTransform_signed := zOffsetTransformendifscale_image (Z, Z, zResolution * (-1.0 * Units), (StandOff + zOffsetTransform_signed) * Units - zOffset * Units)* * Generate an ObjectModel3D and visualize it, press button* to continuexyz_to_object_model_3d (X, Y, Z, ObjectModel3D)dev_open_window (0, 0, 800, 600, 'black', WindowID1)set_display_font (WindowID1, 16, 'mono', 'true', 'false')get_object_model_3d_params (ObjectModel3D, 'num_points', NumPoints)if (NumPoints > 0)VisPose := []Instructions[0] := 'Rotate: Left button'Instructions[1] := 'Zoom:   Shift + left button'Instructions[2] := 'Move:   Ctrl  + left button'visualize_object_model_3d (WindowID1, ObjectModel3D, [], VisPose, ['color_attrib','lut'], ['coord_z','rainbow'], 'ObjectModel3D', [], Instructions, PoseOut)* * Visualize using the intensity dataif (HasIntensity)get_region_points (Z, Rows, Columns)get_grayval (IntensityScaled, Rows, Columns, Grayval)set_object_model_3d_attrib_mod (ObjectModel3D, '&intensity', 'points', Grayval)visualize_object_model_3d (WindowID1, ObjectModel3D, [], VisPose, ['color_attrib','lut'], ['&intensity','sqrt'], 'ObjectModel3D with Amplitude', [], Instructions, PoseOut)endifelsedev_disp_text('No 3D points in the 3D object model!', 'window', 250, 200, 'black', [], [])stop ()endif
endwhile
* 
close_framegrabber (AcqHandle)
dev_update_window ('on')

六、常见问题

1、为什么需要Offset?‌
‌校准补偿‌:传感器安装位置可能与理论坐标系存在物理偏移。
‌多传感器拼接‌:在多个传感器协同工作时,Offset用于对齐不同传感器的数据。
2、Resolution如何确定?‌
‌出厂标定‌:由传感器制造商提供(例如激光线间距)。
‌软件配置‌:通过Gocator配置文件(.cfg)设定扫描范围和分辨率。
3、 为什么要过滤Z=0的点?‌
‌无效数据‌:传感器可能无法测量某些区域(如反光表面或阴影),此时HeightMap返回0值,需忽略。
4、强度图为何要除以256?‌
‌数据缩放‌:假设原始强度数据是16位(0-65535),除以256后缩放到8位(0-255),便于显示。

相关文章:

  • 精益数据分析(74/126):从愿景到落地的精益开发路径——Rally的全流程管理实践
  • Mujoco 学习系列(三)机器人状态IO与仿真操作
  • 基于 Redis 实现短信验证码登录功能的完整方案
  • 网络框架二次封装:基于Kotlin的高扩展性网络请求框架完整实现
  • WPF核心类继承树结构
  • 2025年度消费新潜力白皮书470+份汇总解读|附PDF下载
  • WPF MVVM Community Toolkit. Mvvm 社区框架
  • [Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十)
  • 对抗学习(AL),生成对抗网络(GAN),强化学习,RLHF
  • CMake跨平台编译生成:从理论到实战
  • Vue 3.0中核心的Composition API
  • 工业控制解决方案三段论
  • 大模型微调与高效训练
  • 零基础设计模式——创建型模式 - 抽象工厂模式
  • C++23关联容器的异质擦除重载 (P2077R2)介绍
  • 物流项目第五期(运费计算实现、责任链设计模式运用)
  • 自动驾驶中的预测控制算法:用 Python 让无人车更智能
  • 第六章 Freertos智能小车循迹模块
  • 2025.05.21华为暑期实习机考真题解析第二题
  • jenkins数据备份
  • wordpress建淘宝客网站吗/磁力bt种子搜索
  • 呼和浩特做网站的公司有哪些/百度链接提交
  • 寻花问柳专注做一家男人喜欢的网站/百度seo营销推广多少钱
  • 学做前端的网站/比较好的免费网站
  • iis网站建设中/宁波seo教程app推广
  • 网站开发 企业宣传册/查图百度识图