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

halcon三维点云数据处理(六)find_box_3d

目录

  • 一、find_box_3d 函数
  • 二、find_box_3d 函数调用过程

首先说明一下这部分代码在find_box_3d这个例程中,非常好用的一个坐标系生成函数。

一、find_box_3d 函数

find_box_3d( : : ObjectModel3DScene, SideLen1, SideLen2, SideLen3, MinScore, GenParam : GrippingPose, Score, ObjectModel3DBox, BoxInformation)

find_box_3d在3D对象模型ObjectModel3DScene中查找盒子,并返回抓握点的姿势GrippingPose,一个3D对象模型ObjectModel3DBox一个分数值score和一个字典BoxInformation,其中BoxInformation包含关于每个找到的盒子的进一步信息。
盒子的边长在SideLen1、SideLen2和SideLen3中传递。每个长度由一个包含两个值的元组组成,表示该边的最小和最大长度。如果只期望盒子的一个面是可见的,或者不应该限制盒子的剩余长度,SideLen3=-1
首先,在GrippingPose中返回一个紧握点的姿势。根据xyz映射设置盒子的使用面和抓取姿势的z轴。如果只有盒子的一面是可见的,那么抓握姿势的中心就在那一面的中心,并且它的z轴方向远离xyz映射的观察点。如果盒子的多个侧面可见,则抓握姿势位于与xyz映射的观察点最平行的一侧的中心。z轴再次朝向远离xyz映射的观察点。
在ObjectModel3DBox中,该框也以三角化形式返回。这允许对结果进行快速可视化。
对于每个找到的框,在score中返回0到1之间的分数。分数表示盒子及其边缘的可见程度,以及找到的盒子与指定尺寸的匹配程度。

results:这个键引用一个包含找到的框的字典。
它们根据它们的分数按降序排序,从0开始的升序整数键。
每个框的结果都是一个字典,包含以下关键字:box_pose:这是框在场景坐标系统中的姿态。
这个姿势用于可视化找到的盒子。
box_length_x, box_length_y, box_length_z:与box_pose对应的找到的盒子的边长。
Box_length_x和box_length_y总是包含一个正数。
如果只有盒子的一面是可见的,box_length_z将被设置为O.gripping_pose:与GrippingPose中返回的姿势相同。
gripping_length_x, gripping_length_y, gripping_length_z:找到的盒子对应于GrippingPose的边长。
Gripping_length_x和gripping_length_y总是包含一个正数。
如果只有盒子的一面是可见的,gripping_length_z将被设置为0。

score:与score中返回的分数相同。
one_side_only:布尔值,指示框的一侧是否可见(‘true‘)或不可见(’false ’)。
gen_param:这是一个字典,其中包含用于查找box 3d的参数。
SideLen1、SideLen2和SideLen3被池放在一个具有密钥长度的元组中。
关键的最小分数引用MinScore。
其他键的表示类似于字典Gen Param的通用参数。
sampled_edges:这是带有采样边缘的3D对象模型。
它包含作为法向量的边缘点的观察方向。
sampled_edges_direction:这是带有采样边缘的3D对象模型(与sampled_edges键相同)。
它包含作为法向量的边缘点的边缘方向。
sampled_scene:这是在其中寻找盒子的采样场景。
它可以用于可视化或调试采样距离。
sampled_reference_points:这是一个3D对象模型,其中来自3D场景的所有点在匹配过程中用作参考点。
对于每个参考点,在假设参考点位于箱体表面的情况下,计算箱体的最佳位姿。

二、find_box_3d 函数调用过程

这个例子展示了如何在3D场景中找到通用的盒子。
调用find_box_3d在指定的大小范围内为每个找到的盒子返回一个GrippingPose。这个GrippingPose可以提供给一个手眼校准的机器人来抓住找到的盒子。请确保
GrippingPose和机器人使用相同的姿势类型)。


dev_update_off ()
ImagePath := 'boxes/cardboard_boxes_'
* 
dev_close_window ()
dev_open_window (0, 0, 1024, 768, 'black', WindowHandle)
* 
* Prepare and display description.
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_disp_introduction ()
stop ()
* 
* Show the example image.
dev_clear_window ()
read_image (Image, ImagePath + '01')
dev_display (Image)
Message := 'This is an image of the example scene in which we want to find the boxes.'
dev_disp_text (Message, 'window', 'top', 'left', 'black', [], [])
dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
stop ()
* 
RobotToolSize := 0.03
gen_robot_tool_and_base_object_model_3d (RobotToolSize * 0.05, RobotToolSize, OM3DToolOrigin, OM3DBase)
* 
Pose := []
for SceneIdx := 1 to 4 by 1* Read the image of the scene and create a 3D object model.read_image (ImageXYZ, ImagePath + 'xyz_' + SceneIdx$'02')decompose3 (ImageXYZ, X, Y, Z)xyz_to_object_model_3d (X, Y, Z, OM3DScene)* * Set the minimum and maximum side lengths of the boxes in meter.Len1 := [0.099, 0.11]Len2 := [0.075, 0.085]Len3 := [0.045, 0.065]* Set box detection parameters.Params := dict{}Params.remove_outer_edges := 'true'Params.max_gap := 150* Find the boxes.find_box_3d (OM3DScene, Len1, Len2, Len3, 0.2, Params, GrippingPose, Score, OM3DBox, BoxInformation)* The procedure debug_find_box_3d can be used to debug the* results of find_box_3d.
*     debug_find_box_3d (OM3DBox, OM3DScene, BoxInformation, FindBox3DGenParam)* * Visualize the found boxes and the gripping poses.GripTools := []Colors := []for Index := 0 to |Score| - 1 by 1rigid_trans_object_model_3d (OM3DToolOrigin, GrippingPose[7 * Index:7 * Index + 6], OM3DToolTransformed)GripTools := [GripTools,OM3DToolTransformed]* Determine color of the gripping point* coordinate system in RGB.Colors := [Colors,'red', 'green', 'blue']endfor* OM3DSampledScene := BoxInformation.sampled_sceneOM3DSampledEdges := BoxInformation.sampled_edgesgen_visualization_title (BoxInformation, Title)* Colors := [Colors,gen_tuple_const(|OM3DBox|,'green'),'yellow', 'gray']Labels := [gen_tuple_const(3 * |OM3DBox|,''),Score$'.2f','', '']visualize_object_model_3d (WindowHandle, [GripTools,OM3DBox,OM3DSampledEdges,OM3DSampledScene], [], Pose, ['color_' + [0:4 * |OM3DBox| + 2 - 1],'alpha_' + [3 * |OM3DBox|:4 * |OM3DBox| - 1]], [Colors,gen_tuple_const(|OM3DBox|,0.5)], Title, Labels, [], Pose)
endfor
dev_disp_text ('      End of program      ', 'window', 'bottom', 'right', 'black', [], [])

http://www.mrgr.cn/news/83181.html

相关文章:

  • 微深节能 焦炉联锁及无人控制系统 格雷母线
  • Unity性能优化总结
  • spring mvc源码学习笔记之八
  • 环动科技平均售价波动下滑:大客户依赖明显,应收账款周转率骤降
  • eNSP之家——路由器--入门实例详解
  • 深度学习与计算机视觉 (博士)
  • 创建Java项目,并添加MyBatis包和驱动包
  • VSCode 中的 launch.json 配置使用
  • 腾讯云AI代码助手编程挑战赛-学习助手
  • Node.js中的fs模块:文件与目录操作(写入、读取、复制、移动、删除、重命名等)
  • 消息队列MQ(二)
  • C语言初阶习题【25】strcpy的模拟实现
  • ubuntu编译安装libvirt
  • 深度学习与计算机视觉 (博士)
  • 如何让用户在网页中填写PDF表格?
  • 【人工智能】基于Python与OpenCV构建简单车道检测算法:自动驾驶技术的入门与实践
  • AI大模型-提示工程学习笔记5-零提示
  • Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)
  • 【STM32+QT项目】基于STM32与QT的智慧粮仓环境监测与管理系统设计(完整工程资料源码)
  • 【深度学习】布匹寻边:抓边误差小于3px【附完整链接】
  • 用Python进行大数据处理:如何使用pandas和dask处理海量数据
  • Vue3 + Vite + Electron + Ts 项目快速创建
  • 【VBA】【EXCEL】将某列内容横向粘贴到指定行
  • 《HeadFirst设计模式》笔记(上)
  • Python 通过命令行在 unittest.TestCase 中运行单元测试
  • Ollama私有化部署大语言模型LLM(上)