广西建设科技与建筑节能协会网站,新乡市网站建设有哪些公司,正规网站建设代理,digging into wordpress pdf一、记录一些Halcon里的关于3D的算子
1.read_object_model_3d 从文件读取一个3d模型
如下图#xff0c;读的一个ply文件出来是个3d点云模型 2.visualize_object_model_3d 交互式展示3d模型
即上个算子读出来后#xff0c;通过这个算子可以把3d模型显示出来旋转、平移读的一个ply文件出来是个3d点云模型 2.visualize_object_model_3d 交互式展示3d模型
即上个算子读出来后通过这个算子可以把3d模型显示出来旋转、平移缩放来观察操作
算子签名
visualize_object_model_3d( : : WindowHandle, ObjectModel3D, CamParam, PoseIn, GenParamName, GenParamValue, Title, Label, Information : PoseOut)
WindowHandle显示窗口句柄
ObjectModel3D需要展示的3d模型
CamParam假想的观察这个模型的一个面阵相机的内参
PoseIn这个模型的3d姿态
GenParamName参数名
GenParamValue参数值
Title展示在窗口左上角的文字
Label在每个3d模型位置显示的文本
Information窗口左下角显示的信息
PoseOut用户调整模型姿态后输出这个3d姿态
其中参数名和参数值有很多
举例 参数名color 参数值green 将模型颜色变为绿色
参数名 color_attrib 参数值coord_z 类似于z轴方向的渐变色ba
参数名 disp_pose 参数值 true 显示出坐标轴
3.connection_object_model_3d 分离3d模型中的各个连通域
算子签名
connection_object_model_3d( : : ObjectModel3D, Feature, Value : ObjectModel3DConnected)
可以通过调节distance_3d参数把一些噪点分离出来
4.select_object_model_3d 根据全局特征从3d模型组中选取符合特征的3d模型们
算子签名
select_object_model_3d( : : ObjectModel3D, Feature, Operation, MinValue, MaxValue : ObjectModel3DSelected)
如可以设置参数num_points 模型点的数量去除一部分点数少的模型如噪点
5.union_object_model_3d 合并多个3d模型们成一个新的3d模型
算子签名
union_object_model_3d( : : ObjectModels3D, Method : UnionObjectModel3D)
3、4、5的操作可以用来去除噪点如下图去除噪点之后的3d模型 6.surface_normals_object_model_3d 计算3d模型的表面法线
算子签名
surface_normals_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : ObjectModel3DNormals)
这个算子计算模型表面法线。在3d点云匹配创建3d匹配模型的时候需要模型带表面法线信息才可以用来创建。 7.max_diameter_object_model_3d 计算3d模型最大直径
8. create_pose 创建3D位姿
算子签名
create_pose( : : TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform, OrderOfRotation, ViewOfTransform : Pose)
这个算子有一些参数主要是通过各方向平移和旋转得到一个新的3d位姿。后面一些参数控制平移旋转先后顺序还有绕哪个坐标系下的轴详细可查对应算子说明。
9.rigid_trans_object_model_3d 将刚性三维变换应用于这个3d模型
可以用这个算子对某个模型进行刚性变换、即平移和旋转。可以用上个算子的pose作为变换参数
如下图做了变换 变换后原点位置姿态都变了 10.sample_object_model_3d 对3d模型进行采样
算子签名
sample_object_model_3d( : : ObjectModel3D, Method, SampleDistance, GenParamName, GenParamValue : SampledObjectModel3D)
SampleDistance这个采样距离隔多少距离采集一个点可以先求出3d模型的最大直径乘以一个比例系数来得到这个采样距离如Diameter*0.003 最大直径的0.003倍及最大直径上取333个采样点乘的系数越小点越多。
11.create_surface_model 创建一个用于基于曲面3d匹配的数据结构
算子签名
create_surface_model( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID)
RelSamplingDistance这里的相对采样距离跟上面那个采样距离不一样填0.05即取总点数乘以0.05个点越小点越少 12.find_surface_model 在3d场景中找到模型的最佳匹配
算子签名
find_surface_model( : : SurfaceModelID, ObjectModel3D, RelSamplingDistance, KeyPointFraction, MinScore, ReturnResultHandle, GenParamName, GenParamValue : Pose, Score, SurfaceMatchingResultID)
挺多参数不一一写了
13.refine_surface_model_pose 优化三维场景中曲面模型的姿势
上一步算出来的姿态可以再给进这个算子优化一下
14.pose_invert 反转姿态
这样上面find的姿态是预先做的模型通过变换匹配到场景中的位置反转这个姿态可以将场景变换回模型的位置用于后期分析处理
用rigid_trans_object_model_3d变换后和之前创建的3d模型匹配上了如下图显示 二、halcon测试代码
dev_close_window ()
dev_open_window (0, 0, 1200, 800, black, WindowHandle)
*读取单帧点云ply文件
read_object_model_3d(D:/项目/tray盘/230425-汇川-tray盘/3d导出.ply, mm, [], [], ObjectModel3D, Status)Instructions[0] : Rotate: Left button
Instructions[1] : Zoom: Shift left button
Instructions[2] : Move: Ctrl left buttonMessage : Hik3D PointCloud
*虚拟化模型并且显示
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [color,color_attrib,disp_pose], [green,coord_z,true], Message, [], Instructions, PoseOut)
dev_clear_window ()connection_object_model_3d (ObjectModel3D, distance_3d, 0.001, ObjectModel3DConnected)select_object_model_3d (ObjectModel3DConnected, num_points, and, 2000, 1e30, ObjectModel3DSelected)union_object_model_3d (ObjectModel3DSelected, points_surface, UnionObjectModel3D)visualize_object_model_3d (WindowHandle, UnionObjectModel3D, [], [], [color,color_attrib,disp_pose], [green,coord_z,true], Message, [], Instructions, PoseOut)dev_clear_window ()
surface_normals_object_model_3d (UnionObjectModel3D, mls, [], [], ObjectModel3DNormals)max_diameter_object_model_3d (ObjectModel3DNormals, Diameter)create_pose (0.13, 0.13, 0.028, 0, 0,180, RpT, gba, point, Pose4)
rigid_trans_object_model_3d (ObjectModel3DNormals, Pose4, ObjectModel3DRigidTrans1)sample_object_model_3d (ObjectModel3DRigidTrans1, fast,Diameter*0.003, [], [], SampledObjectModel3D)visualize_object_model_3d (WindowHandle, SampledObjectModel3D, [], [], [color,color_attrib,disp_pose], [green,coord_z,true], Message, [], Instructions, PoseOut)
dev_clear_window ()
create_surface_model (ObjectModel3DRigidTrans1, 0.01, [], [], SurfaceModelID)read_object_model_3d (D:/项目/tray盘/230425-汇川-tray盘/带围挡/1-3d导出, mm, convert_to_triangles, true, ObjectModel3D1, Status1)sample_object_model_3d (ObjectModel3D1, fast, Diameter*0.01, [], [], SampledObjectModel3D1)find_surface_model (SurfaceModelID, SampledObjectModel3D1, 0.02, 0.2, 0, false, [], [], Pose, Score, SurfaceMatchingResultID)refine_surface_model_pose (SurfaceModelID, SampledObjectModel3D1, Pose, 0, false, [], [], Pose1, Score1, SurfaceMatchingResultID1)pose_invert (Pose1, PoseInvert)rigid_trans_object_model_3d (SampledObjectModel3D1, PoseInvert, ObjectModel3DRigidTrans)
dev_clear_window ()create_pose (-0.05, -0.06, 10, 134, 340, 235, RpT, gba, point, Pose2)create_pose (-0.05Pose1[0], -0.06Pose1[1], 10Pose1[2], 134Pose1[3], 340Pose1[4], 235Pose1[5], RpT, gba, point, Pose3)visualize_object_model_3d (WindowHandle, [ObjectModel3DRigidTrans,ObjectModel3DRigidTrans1], [], Pose2, [color_0,color_1,disp_pose], [gray,green,true], [], [], [], PoseOut1)dev_clear_window ()
visualize_object_model_3d (WindowHandle, [ObjectModel3D1,ObjectModel3DRigidTrans1], [], [Pose3,Pose2], [alpha,color_0,color_1,disp_pose], [0.5,yellow,green,true], [], [], [], PoseOut1)