Halcon学习笔记:select_points_object_model_3d(3D对象模型阀值分割)

Halcon学习笔记:select_points_object_model_3d 3D对象模型阀值分割

  • This example program shows how to use the operators

  • connection_object_model_3d and select_object_model_3d

  • in HALCON. First, a threshold is applied to the 3D object

  • model. Then, the connected components are calculated

  • based on the geometric distance. Finally, the connected

  • components are selected by their volume and diameter and

  • the result is displayed.

  • 这个示例程序展示了如何在HALCON中使用connection_object_model_3d和select_object_model_3d操作符。

  • 首先,对3D对象模型应用一个阈值。然后,根据几何距离计算连通分量。

  • 最后,根据连接部件的体积和直径选择连接部件并显示结果。


源码:

dev_update_off ()
dev_close_window ()
* 1、加载X,Y, z数据,缩放到米,并生成一个3D对象模型
ImagePath := 'time_of_flight/'
read_image (Image, ImagePath + 'engine_cover_xyz_01')
* 缩放图像的灰度值
* 将图像放大一个给定的倍数
scale_image (Image, Image, .001, .0)
zoom_image_factor (Image, Image, 2, 2, 'constant')
decompose3 (Image, X, Y, Z)
xyz_to_object_model_3d (X, Y, Z, ObjectModel3DID)
* 2、计算模型的网格(Delaunay三角测量)
*'segmentation',准备一个3D对象模型(如果要对同一操作多次使用3D对象模型,这样做会更快)
prepare_object_model_3d (ObjectModel3DID, 'segmentation', 'true', [], [])
* 
* 3、准备可视化并显示3D对象模型
create_pose (0.058, -0.165, 0.660, 345.0, 355.0, 356.0, 'Rp+T', 'gba', 'point', Pose)
* 
* Instructions for visualize_object_model_3d
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom:   Shift + left button'
Instructions[2] := 'Move:   Ctrl  + left button'
* Configuration
gen_cam_par_area_scan_division (0.01, 0, 7e-6, 7e-6, 352, 288, 710, 576, CamParam)
GenParamName := ['color','disp_pose','alpha']
GenParamValue := ['green','false',0.8]
* 
dev_open_window (0, 0, 710, 576, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
* 
visualize_object_model_3d (WindowHandle, ObjectModel3DID, CamParam, Pose, GenParamName, GenParamValue, 'This scene will be segmented into single objects', [], Instructions, Pose)
* 
* 4、阈值三维对象模型
MinValue := 0.500
MaxValue := 0.670
*3D对象模型应用阈值
select_points_object_model_3d (ObjectModel3DID, 'point_coord_z', MinValue, MaxValue, ObjectModel3DIDReduced)
visualize_object_model_3d (WindowHandle, ObjectModel3DIDReduced, CamParam, Pose, GenParamName, GenParamValue, 'Result after thresholding at z=' + (MaxValue * 1e3)$'.3' + 'mm from the camera', [], Instructions, Pose)
* 
* Calculate the connected components and the volume and diameter
* of each of the resulting object
* 5、计算连接分量和每个结果对象的体积和直径
GenParamName[0] := 'colored'
GenParamValue[0] := 12
* 1)确定3D对象模型的连通分量
* 2)计算三维物体模型相对于平面[0,0,MaxValue,0,0,0,0]的体积 Volume
* 3)计算3D对象模型的最大直径 Diameter
connection_object_model_3d (ObjectModel3DIDReduced, 'distance_3d', 0.010, ObjectModel3DIDConnections)
volume_object_model_3d_relative_to_plane (ObjectModel3DIDConnections, [0,0,MaxValue,0,0,0,0], 'signed', 'true', Volume)
max_diameter_object_model_3d (ObjectModel3DIDConnections, Diameter)
* 
* 6、显示结果
dev_open_window (0, 720, 400, 576, 'black', WindowHandle1)
set_display_font (WindowHandle1, 14, 'mono', 'true', 'false')
Indices := [0:|ObjectModel3DIDConnections| - 1]
disp_message (WindowHandle1, ['Features of the connected components:',' ',' '], 'window', 12, 12, 'white', 'false')
ResultMessage := '  #  Max. diameter    Volume'
Sequence := [0:|ObjectModel3DIDConnections| - 1]
ResultMessage := [ResultMessage,Sequence$' 3' + '     ' + (Diameter * 1e3)$'7.1f' + ' mm  ' + (Volume * 1e3)$'7.3f' + ' dm³']
disp_message (WindowHandle1, ResultMessage, 'window', 50, 12, 'white', 'false')
dev_set_window (WindowHandle)
visualize_object_model_3d (WindowHandle, ObjectModel3DIDConnections, CamParam, Pose, GenParamName, GenParamValue, 'Found ' + |ObjectModel3DIDConnections| + ' connected components', '#' + Indices, Instructions, Pose)
* 
* 7、根据组件的体积和最大直径选择组件
* 
MinVolume := 0.35e-003
MaxVolume := 1.0e-003
MinDiameter := 185.0e-003
MaxDiameter := 300.0e-003***** 8、注意:
*     select_object_model_3d使用平面[0,0,0,0,0,0]进行体积计算!
*     因此,我们必须转换3d对象模型,以便参考平面(如前面对volume_object_model_3d_relative_to_plane的调用中定义的那样)与默认平面重合。
*
* 1)生成三维变换的齐次变换矩阵
* 2)增加平移变换
* 3)求齐次三维变换矩阵的逆
hom_mat3d_identity (HomMat3DIdentity)
hom_mat3d_translate (HomMat3DIdentity, 0, 0, -MaxValue, HomMat3DTranslation)
hom_mat3d_invert (HomMat3DTranslation, HomMat3DInvert)
affine_trans_object_model_3d (ObjectModel3DIDConnections, HomMat3DTranslation, ObjectModel3DTranslated)
* 4)为每个部分设置标签
for Index := 0 to |ObjectModel3DIDConnections| - 1 by 1set_object_model_3d_attrib_mod (ObjectModel3DTranslated[Index], '&Index', [], Index)
endfor
* 5)再次计算三维物体模型相对于平面[0,0,0,0,0,0,0]的体积 Volume1
* 6)从一组三维对象模型中选择三维对象模型('volume''diameter_object')
volume_object_model_3d_relative_to_plane (ObjectModel3DTranslated, [0,0,0,0,0,0,0], 'signed', 'true', Volume1)
select_object_model_3d (ObjectModel3DTranslated, ['volume','diameter_object'], 'and', [MinVolume,MinDiameter], [MaxVolume,MaxDiameter], ObjectModel3DSelected)
* 
Title := ['Parts selected by using the following features: ','       ' + (MinVolume * 1e3)$'3.1f' + ' dm³ <= volume <= ' + (MaxVolume * 1e3)$'3.1f' + ' dm³','and:   ' + (MinDiameter * 1e3)$'.1f' + ' mm <= max. diameter <= ' + (MaxDiameter * 1e3)$'.1f' + ' mm']
* 创建一个标签
Label := []
for Index := 0 to |ObjectModel3DSelected| - 1 by 1get_object_model_3d_params (ObjectModel3DSelected[Index], '&Index', FormerIndex)Label := [Label,'#' + FormerIndex]
endfor
* 
if (|ObjectModel3DSelected| > 1)visualize_object_model_3d (WindowHandle, ObjectModel3DSelected, CamParam, [], GenParamName, GenParamValue, Title, Label, Instructions, Pose)
elseMessage := 'No object left after using the following features: 'Message[1] := '       ' + (MinVolume * 1e3)$'3.1f' + ' dm³ <= volume <= ' + (MaxVolume * 1e3)$'3.1f' + ' dm³'Message[2] := 'and:   ' + (MinDiameter * 1e3)$'.1f' + ' mm <= max. diameter <= ' + (MaxDiameter * 1e3)$'.1f' + ' mm'disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
endif
* 
* Clear the 3d object models
dev_set_window (WindowHandle1)
dev_close_window ()
clear_object_model_3d ([ObjectModel3DID,ObjectModel3DIDReduced,ObjectModel3DSelected,ObjectModel3DTranslated,ObjectModel3DIDConnections])

结果
1、生成3D model
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、计算连通分量的体积和最大直径
在这里插入图片描述
在这里插入图片描述
3、选择连通分量
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB的GUI设置为不能点击状态(将按钮变为灰色)

有的时候想让GUI的按钮变灰&#xff0c;设置为不能点击状态&#xff0c;只有点击了另一个按钮后才能恢复该按钮的功能&#xff0c;举个例子&#xff0c;如下图所示&#xff0c;此时步骤1和步骤2这两个按钮是点击不了的&#xff0c;只有先点击了“打开图像”这个按钮&#xff0c…

脑结构、脑工作原理最详细图解

来源&#xff1a; 深度学习进阶学习社这个帖子很好地提醒了我&#xff0c;为什么我愿意跟如此美丽可爱的大脑一起工作。因为真正的大脑非常不可爱&#xff0c;长得也难看。但是&#xff0c;过去一个月&#xff0c;我一直生活在充斥着红色血管的 Google 图像的地狱里&#xff0c…

Halcon算子学习:create_pose

create_pose 创建3D位姿 ( : : TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform, OrderOfRotation, ViewOfTransform : Pose) 输入&#xff1a; TransX 沿x轴平移&#xff08;以[m]为单位&#xff09;。 默认值&#xff1a;0.1 建议值&#xff1a;-1.0&#xff0…

Halcon算子学习:sample_object_model_3d

sample_object_model_3d ( : : ObjectModel3D, Method, SampleDistance, GenParamName, GenParamValue : SampledObjectModel3D) 示例一个3D对象模型 输入&#xff1a; ObjectModel3D 对3D对象模型的处理进行采样。 Method 选择不同的子采样方法。 默认值:“fast” 值列表:‘…

剑桥大学发布2019年度AI发展报告,预测未来12个月AI产业6件大事

来源&#xff1a;人工智能和大数据近日&#xff0c;剑桥大学发布了2019年度AI发展报告&#xff0c;在这份137页的报告中&#xff0c;涵盖了AI研究、人才、产业等多方面内容&#xff0c;值得一提的是&#xff0c;这份报告专门开辟了一个章节来介绍中国AI技术的发展。一、研究和技…

SQL Server安全(8/11):数据加密(Data Encryption)

在保密你的服务器和数据&#xff0c;防备当前复杂的攻击&#xff0c;SQL Server有你需要的一切。但在你能有效使用这些安全功能前&#xff0c;你需要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础&#xff0c;因此你可以对SQL Server里的安全功能充分利用&#xf…

模拟人脑项目彻底宣告失败:耗资10亿欧,10年前轰动全球,如今死得悄无声息...

来源&#xff1a;凹非寺10年砸入10亿欧元&#xff0c;为了用计算机模拟人脑。这个十年前曾轰动全球的项目&#xff0c;如今彻底“死”了&#xff0c;死得悄无声息。要不是有位西方记者提起&#xff0c;人们几乎已经完全遗忘。模拟人脑&#xff1f;呵&#xff0c;实际连一只蠕虫…

变量传值

变量传值 PHP传方式有两种&#xff1a;赋值传值、引用传值 赋值传值&#xff1a; 将一个变量的值传递给另一个变量&#xff0c;array数组 示例&#xff1a; 引用传值&#xff1a; 将一个变量的内存地址传给另一个变量 写时复制&#xff1a; 对变量使用赋值传值时&#xff0c;PH…

物理学的忧伤,从现代物理学的死锁谈起

来源&#xff1a;量子学派“这是一篇信息量极大的文章&#xff0c;我不知道有多少人能真正读完。但希望大家能静下心来&#xff0c;暂且抛开生活的油盐酱醋茶&#xff0c;好好去感受一下——这些似乎离我们的生活太远的智慧和知识。”盛宴已过&#xff0c;天才再无用武之地&…

EPSON 程序

EPSON 代码程序 1.EPSON SPEL 语言代码示例&#xff1a; // String RCdata$, InData$, toks$(0), data1$, data2$, data3$ //定义字符型变量名需要添加“$”符号 Integer N, x Double VX(500), VY(500), VZ(500) #define delay_Time 0.1 Function mainSetNet #201, "19…

有人机/无人机混合编队协同作战研究综述与展望

来源&#xff1a; 人机与认知实验室摘要&#xff1a;有人机与无人机混合编队协同作战是未来空战的重要形式。有人机是中央指挥&#xff0c;而无人机直接接受有人机的指挥和控制&#xff0c;并进行战场态势感知、目标打击等。有人机和无人机可以看成空间上分离而逻辑上一体的巨型…

中国独角兽报告:2019

来源&#xff1a;泽平宏观文&#xff1a;恒大研究院 任泽平 连一席 谢嘉琪导读独角兽企业代表着新经济的活力&#xff0c;行业的大趋势&#xff0c;国家的竞争力。2018年全球资本市场风起云涌&#xff0c;独角兽势力大洗牌。有些独角兽融资困难&#xff0c;光环不再&#xff1b…

软银千亿美元愿景基金PPT,孙正义解读股权投资IRR=44%

来源&#xff1a;股权投资论坛&#xff08;PE821010&#xff09;综合“正和岛(zhenghedao)、皮卡丘财经、猎云网&#xff08;ilieyun&#xff09;、财立方&#xff08;icailifang&#xff09;、腾讯科技&#xff08;qqtech&#xff09;等综合 日本软银公司成立于1981年&#x…

Halcon算子学习:create_sheet_of_light_model

create_sheet_of_light_model (ProfileRegion : : GenParamName, GenParamValue : SheetOfLightModelID) 创建一个执行线结构光技术3D测量的的模型 输入&#xff1a; ProfileRegion 包含要处理的轮廓的图像的ROI。&#xff08;如果所提供的区域不是矩形的&#xff0c;则使用其…

腾讯研究院院长司晓:互联网大脑的人文侧面

1989年万维网推出至今&#xff0c;互联网已经走过了30个年头。在这激荡的30年&#xff0c;随着社交网络、移动通信、云计算、物联网、工业互联网、大数据、人工智能等新技术和新事物不断涌现&#xff0c;互联网持续建立起复杂而庞大的连接&#xff0c;成为驱动经济与社会快速变…

Halcon算子学习:get_sheet_of_light_result

get_sheet_of_light_result ( : ResultValue : SheetOfLightModelID, ResultName : ) 获得用线结构光技术进行测量的标志性结果 输出&#xff1a; ResultValue 理想的测量结果。 SheetOfLightModelID 要使用的线结构光模型的句柄 输入&#xff1a; ResultName 规定应提供何…

5G芯片Top10一览,谁才是最后的赢家?

来源&#xff1a;Electronic Products、电子工程世界从无线网络基础设施和基站到智能手机再到物联网设备应用&#xff0c;这些芯片组有望简化向5G通信的过渡。5G有望提供一个完全互联的移动世界&#xff0c;其市场范围从联网汽车、智能城市、智能手机到物联网(IoT)设备&#xf…

HALCON标定板制作、标准文件输出方法、算子讲解

利用 Halcon软件自制标定板 参考博客&#xff1a; halcon相机标定及图像矫正 Halcon学习 标定助手 关键算子&#xff1a; gen_caltab ( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 为具有矩形排列标记的标定板生成标定板描述文件和相应的后…

国产光刻机的现状究竟如何?

来源&#xff1a;人民网-上海频道随着信息社会的迅速发展&#xff0c;手机、电脑、电视等各种电子设备越来越“迷你”&#xff0c;从之前的“大哥大”到现在仅仅几个硬币厚的时尚手机&#xff0c;从老式的矮胖电视到如今轻薄的液晶电视&#xff0c;都不离开集成电路的发展&…

如何使用UR机器人模拟软件URsim

如何使用UR机器人模拟软件URsim 机器人软件适用版本&#xff1a;Polyscope v1.3及以上 适用机器人&#xff1a;UR3、UR5、UR10 由于优傲机器人的系统是基于Linux核心开发的&#xff0c;模拟软体URsim也是在Linux系统下运行&#xff0c;通常大家使用的电脑系统为Windows&#…