Halcon 3D平面度

embedded/2024/11/17 23:41:29/

平面度是对表面形状的一种度量,用于指示该表面上的所有点是否都在同一个平面上。平面度在几何尺寸和公差(GD&T)中用平行四边形表示,当两个表面必须装配在一起形成紧密密封时,平面度就特别有用。

使用平面度公差是为了确保某个即定表面位于两个假想的、完美的、平行的平面内。换句话说,公差范围位于被测表面上最高和最低可接受点之间。

测量平面度包括分析一个表面,找出它不完全平坦的程度。为此,首先要在表面上获取一些点,以便找到包括所有这些点的两个平行平面的包络。下一步是找到尽可能小的平面夹层,而不考虑方向(因为这些平面可以在空间自由移动)。最远的两个点之间的距离就是平面度。因此,这两个平面之间的空间越窄,这个平面就越平坦。

read_image (Image, 'E:/项目/蓝膜/3d平面度检测/深度/_2022_08_27_09_33_01.tiff')
dev_close_window ()
get_image_pointer1 (Image, Pointer, Type, Width, Height)
dev_open_window (0, 0, Width/8, Height/8, 'black', WindowHandle1)
dev_display (Image)
X_power:=0.18
Y_power:=0.18
Z_power:=	0.0037
Percentage1:=40
Percentage2:=60
Percentage11:=15
Percentage12:=85
dev_get_window (WindowHandle)
dev_set_draw ('margin')
gen_empty_obj (EmptyObject)
for Index1 := 0 to 17 by 1gen_rectangle2 (Rectangle1, 2290+228*Index1, 719, 0, 300, 60)concat_obj (EmptyObject, Rectangle1, EmptyObject)
endfor
for Index1 := 0 to 17 by 1gen_rectangle2 (Rectangle1, 2290+228*Index1, 1757, 0, 300, 60)concat_obj (EmptyObject, Rectangle1, EmptyObject)
endfor
stop ()
union1 (EmptyObject, RegionUnion)median_image (Image, ImageMedian, 'square', 17, 'cyclic')
Flatness_ALL (Image, RegionUnion, X_power, Y_power, Z_power, Percentage1, Percentage2, Percentage11, Percentage12, ObjectModel3D, flatness, result)
dev_display (Image)
dev_display (EmptyObject) 

tryget_image_size (Image, Width, Height)gen_image_surface_first_order (ImageX, 'real', X_power, 0, 0, 0, 0, Width, Height)gen_image_surface_first_order (ImageY, 'real', 0, Y_power, 0, 0, 0, Width, Height)convert_image_type (Image, ImageConverted, 'real')scale_image (ImageConverted, ImageZ, Z_power, 0)reduce_domain (ImageX, ROI_Base, ROI_BaseX)reduce_domain (ImageY, ROI_Base, ROI_BaseY)reduce_domain (ImageZ, ROI_Base, ROI_BaseZ)xyz_to_object_model_3d (ROI_BaseX ,ROI_BaseY,ROI_BaseZ, ObjectModel3D1)**********************去掉最大最小**************connection (ROI_Base, ConnectedRegions)count_obj (ConnectedRegions, Number)tuple_gen_const (0, 0, Point_X)tuple_gen_const (0, 0, Point_Y)tuple_gen_const (0, 0, Point_Z)****************每个矩形区域滤掉一部分*********************for Index := 0 to Number-1 by 1select_obj (ConnectedRegions, ObjectSelected,Index+1)dev_display (ObjectSelected)reduce_domain (ImageX, ObjectSelected, ROI_BaseX1)reduce_domain (ImageY, ObjectSelected, ROI_BaseY1)reduce_domain (ImageZ, ObjectSelected, ROI_BaseZ1)xyz_to_object_model_3d (ROI_BaseX1 ,ROI_BaseY1,ROI_BaseZ1, ObjectModel3D1s)get_object_model_3d_params (ObjectModel3D1s, 'num_points', NumPoints)get_object_model_3d_params (ObjectModel3D1s, 'point_coord_z' , DistanceDistribution)tuple_sort (DistanceDistribution, Sorted)Indexs1:=int(Percentage1*0.01*NumPoints)Indexs2:=int(Percentage2*0.01*NumPoints)select_points_object_model_3d (ObjectModel3D1s, 'point_coord_z', Sorted[Indexs1],  Sorted[Indexs2], ObjectModel3DThresholded)get_object_model_3d_params (ObjectModel3DThresholded, 'point_coord_x', BaseX)get_object_model_3d_params (ObjectModel3DThresholded, 'point_coord_y', BaseY)get_object_model_3d_params (ObjectModel3DThresholded, 'point_coord_z', BaseZ)if(Index == 0)Point_X:=BaseXPoint_Y:=BaseYPoint_Z:=BaseZelsePoint_X:=[Point_X,BaseX]Point_Y:=[Point_Y,BaseY]Point_Z:=[Point_Z,BaseZ]endifendforgen_object_model_3d_from_points (Point_X, Point_Y, Point_Z, ObjectModel3Ds)dev_get_window (WindowHandle)visualize_object_model_3d (WindowHandle, ObjectModel3Ds, [], [], ['lut', 'color_attrib'], ['color1', 'coord_z'], [], [], [], PoseOut)fit_primitives_object_model_3d (ObjectModel3Ds, ['primitive_type','fitting_algorithm'], ['plane','least_squares'], ObjectModel3DOut)visualize_object_model_3d (WindowHandle, [ObjectModel3Ds,ObjectModel3DOut], [], [], ['lut', 'color_attrib'], ['color1', 'coord_z'], [], [], [], PoseOut)get_object_model_3d_params (ObjectModel3DOut, 'primitive_type', GenParamValue)get_object_model_3d_params (ObjectModel3DOut, 'primitive_parameter', PlaneValue)get_object_model_3d_params (ObjectModel3DOut, 'point_coord_x', BaseX)get_object_model_3d_params (ObjectModel3DOut, 'point_coord_y', BaseY)get_object_model_3d_params (ObjectModel3DOut, 'point_coord_z', BaseZ)***************************************获取检测点数tuple_gen_const (0, 0, Points_X)tuple_gen_const (0, 0, Points_Y)tuple_gen_const (0, 0, Points_Z)****************每个矩形区域滤掉一部分*********************for Index := 0 to Number-1 by 1select_obj (ConnectedRegions, ObjectSelected,Index+1)dev_display (ObjectSelected)reduce_domain (ImageX, ObjectSelected, ROI_BaseX1)reduce_domain (ImageY, ObjectSelected, ROI_BaseY1)reduce_domain (ImageZ, ObjectSelected, ROI_BaseZ1)xyz_to_object_model_3d (ROI_BaseX1 ,ROI_BaseY1,ROI_BaseZ1, ObjectModel3D1s)get_object_model_3d_params (ObjectModel3D1s, 'num_points', NumPoints)get_object_model_3d_params (ObjectModel3D1s, 'point_coord_z' , DistanceDistribution)tuple_sort (DistanceDistribution, Sorted)Indexs1:=int(Percentage1*0.01*NumPoints)Indexs2:=int(Percentage2*0.01*NumPoints)select_points_object_model_3d (ObjectModel3D1s, 'point_coord_z', Sorted[Indexs1],  Sorted[Indexs2], ObjectModel3DThresholded)get_object_model_3d_params (ObjectModel3DThresholded, 'point_coord_z', BaseZ)tuple_median (BaseZ, TupleZ)area_center (ObjectSelected, Area, TupleX, TupleY)if(Index == 0)Points_X:=TupleXPoints_Y:=TupleYPoints_Z:=TupleZelsePoints_X:=[Points_X,TupleX]Points_Y:=[Points_Y,TupleY]Points_Z:=[Points_Z,TupleZ]endifendforfit_3d_plane_xyz (Points_X, Points_Y, Points_Z, Ox, Oy, Oz, Nx, Ny, Nz, MeanResidual)*平面度 *点到面的距离 计算base面的平面度d1:=(Nx*Points_X+Ny*Points_Y+Nz*Points_Z-PlaneValue[3])tuple_sort (d1, Sorted1)flatness:=max(d1)-min(d1)result:=1
catch (Exception)result:=-1
endtry
return ()


http://www.ppmy.cn/embedded/138063.html

相关文章

蓝桥杯c++算法学习【3】之思维与贪心(重复字符串、翻硬币、乘积最大、皮亚诺曲线距离【难】:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵!!! 关注博主,更多蓝桥杯nice题目静待更新:) 思维与贪心 一、重复字符串 【问题描述】 如果一个字符串S恰好可以由某个字符串重复K次得到,我们就称S是K次重复字 符串…

工业大数据分析与应用:开启智能制造新时代

在全球工业4.0浪潮的推动下,工业大数据分析已经成为推动智能制造、提升生产效率和优化资源配置的重要工具。通过收集、存储、处理和分析海量工业数据,企业能够获得深刻的业务洞察,做出更明智的决策,并实现生产流程的全面优化。本文…

QT5.14*解决QSslSocket::connectToHostEncrypted: TLS initialization faile

qDebug()<<"QSslSocket"<<QSslSocket::sslLibraryBuildVersionString();通过上述代码在QT控制台查看对应需要的SSL版本&#xff0c;QT5.14.*输出的内容为&#xff1a; OpenSSL 1.1.1d 10 Sep 2019从官方下载openssl安装包即可&#xff0c;在官网找了很…

pycharm连接oracle数据库查询数据

查询当前python版本在 Terminal中使用命令 pip version Python-oracledb 的默认精简模式可以连接到 Oracle 数据库 12.1 或更高版本。如果要连接到 Oracle 数据库 11.2&#xff0c;则需要通过在代码中调用 oracledb.init_oracle_client() 来启用厚模式。否则会提示版本不支持。…

web——upload-labs——第四关——.htaccess文件绕过

先尝试直接上传一个普通的一句话木马 显示此文件不允许上传&#xff0c;这道题并没有提示不允许上传什么后缀的文件&#xff0c;经过尝试&#xff0c;基本上所有后缀能够被解析为php语句执行的文件都不能成功上传。试试正常的图片能不能上传&#xff1a; 我们再来试试图片马能不…

20241115在飞凌的OK3588-C的核心板上跑Linux R4时拿大文件到电脑的方法

20241115在飞凌的OK3588-C的核心板上跑Linux R4时拿大文件到电脑的方法 2024/11/15 15:26 缘起&#xff1a;使用SONY 405的机芯&#xff0c;以1080p60录像了半小时&#xff0c;3.5GB的mp4视频要拿到电脑上播放确认。 方法&#xff1a;1、拷贝到TF卡。记住&#xff0c;对于FAT32…

力扣-Hot100-二叉树其二【算法学习day.33】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

想要监控办公电脑,好用的监控软件怎么选择

在现代办公环境中&#xff0c;监控办公电脑不仅能帮助企业确保员工的工作效率&#xff0c;还能够提高数据安全性&#xff0c;防止信息泄露。随着技术的不断发展&#xff0c;市面上涌现了各种监控软件&#xff0c;其中不乏功能强大、使用便捷的工具。今天&#xff0c;我们就来探…