一、简介
halcon 中有很多常见的算子,我们经常在用,但是作为一名算法工程师我们不仅要会用,知道原理也是很重要的,所以对于很多事情我们不仅要所以然更有知其所以然。
二、算子解释
1、smooth_object_model_3d
对3D模型中的每个点进行平滑处理
面前支持的方法只有MLS就是“移动最小二乘法”:'mls_abs_sigma', 'mls_force_inwards', 'mls_kNN', 'mls_order', 'mls_relative_sigma'
注解:
对于每个点 P,MLS 平滑算法将平面曲面或更高阶多项式曲面拟合到其 k 邻域(k 个最近点)。表面拟合本质上是分别对平面或多项式表面参数进行标准加权最小二乘参数估计。 P 的最近邻居比其他点具有更高的贡献,这由以下带有参数的权重函数控制:
然后将该点投影到曲面上。对所有点重复此过程,从而产生平滑的点集。拟合的表面具有明确定义的法线(即,它们可以很容易地从表面参数中计算出来)。因此,作为平滑的副作用,相应的法线会增加这些点
smooth_object_model_3d (ObjectModel3D, 'mls', [], [], SmoothObjectModel3D1)
参数:
1、ObjectModel3
2、Method
默认值: 'mls'(目前只支持这个)
List of values: 'mls'
3、GenParamName :
默认: []
List of values: 'mls_abs_sigma', 'mls_force_inwards', 'mls_kNN', 'mls_order', 'mls_relative_sigma'
4、GenParamValue
默认: []
Suggested values: 10, 20, 40, 60, 0.1, 0.5, 1.0, 2.0, 0, 1, 2
5、SmoothObjectModel3D
效果: (个人感觉弄一些杂点的话效果就很明显了,但是我手头没有这种文件)
2、moments_object_model_3d 求矩
Halcon 3D moments_object_model_3d简介_Σίσυφος1900的博客-CSDN博客_halcon显示3d模型
3、surface_normals_object_model_3d 计算3D模型的3D表面法线
Halcon 3D 计算3D模型的3D表面法线_Σίσυφος1900的博客-CSDN博客_halcon 法线
4、triangulate_object_model_3d 为 3D 对象模型创建表面三角剖分
Halcon 3D 三维重建_Σίσυφος1900的博客-CSDN博客
这个原理还在学习,PCL中可以找到
5、create_pose 创建姿态
Halcon 3D create_pose_Σίσυφος1900的博客-CSDN博客
6、intersect_plane_object_model_3d 将 3D 对象模型与平面相交
* 将 3D 对象模型与平面相交 将三角化之后的平面和创建的那个pose的平面相交
intersect_plane_object_model_3d (TriangulatedObjectModel3D, Pose1, ObjectModel3DIntersection1)
ObjectModel3D 3D 对象模型的句柄。
平面(input_control)飞机的姿势。
默认值:[0,0,0,0,0,0,0]
ObjectModel3DIntersection 将交点描述为一组线的 3D 对象模型的句柄。
7、project_object_model_3d 将 3D 对象模型投影到图像坐标中。
参数:
ModelContours (output_object) xld_cont(-array)投影模型轮廓。
ObjectModel3D (input_control) object_model_3d3D 对象模型的句柄。
CamParam (input_control) 内部相机参数。
元素数量:CamParam == 8 ||CamParam == 10 ||CamParam == 12 ||CamParam == 14
姿势(input_control)相机坐标中世界坐标系的 3D 位姿。
元素数量:姿势 == 7
GenParamName (input_control) 字符串(-array) → (string)
泛型参数的名称。
默认值: []
值列表:'data'、'false'、'hidden_surface_removal'、'min_face_angle'、'point_orientation'、'point_shape'、
'point_size'、'true'、'union_adjacent_contours'
GenParamValue (input_control) 泛型参数的值
默认值: []
建议值:0.17, 0.26, 0.35, 0.52, 'true', 'false', 'auto',
'points', 'faces', 'lines', 'circle', 'cross', 1, 2, 3, 4 , 0.785398
* The inverted intersection plane pose is our projection pose
pose_invert (PoseIntersectionPlane, PoseInvert)
* Make sure, the projection plane lies in front of the camera
get_object_model_3d_params (ObjectModel3DIntersection, 'diameter_axis_aligned_bounding_box', Diameter)
PoseInvert[2] := PoseInvert[2] + Diameter
* Use a parallel projection to achieve the desired scaling (default 1:1)
Scale := 1
gen_cam_par_area_scan_telecentric_division (1.0, 0, 1.0 / Scale, 1.0 / Scale, 0, 0, 512, 512, CamParam)
project_object_model_3d (Intersection, ObjectModel3DIntersection, CamParam, PoseInvert, 'data', 'lines')
return ()
8、Select_Contours_xld 这个应该是2D
经常在后面加上
regress_contours_xld 这个算子
Select_Contours_xld(Contours:SelectedContours:Features,Min,Max,Min2,Max2
作用:选择多种特征要求的XLD轮廓 (如长度 开闭 方向 等特征,不支持多边形)
算子参数:
Contours:要提取的XLD轮廓
SelectedContours:提取到的XLD轮廓
Features:提取XLD轮廓的依据(筛选)
'contour_length':
不返回长度小于 Min1 或大于 Max1 的所有轮廓(Min2 和 Max2 在这里没有影响)。
'maximum_extent':
不返回最大范围小于 Min1 或大于 Max1 的所有轮廓( Min2 和 Max2 在这里没有影响)。
'direction':
仅返回回归线的方向在 Min1 和 Max1 之间(以弧度为单位,逆时针方向)的等高线。 Min1 和 Max1 映射到 [0,2*PI[. (Min2 和 Max2 在这里没有影响)。
'curvature':
仅返回与回归线的平均距离介于 Min1 和 Max1 之间且距离的标准差介于 Min2 和 Max2 之间的等高线。
'closed':
仅返回其起点和终点之间的距离小于或等于 Max1 像素的轮廓。 (Min1、Min2 和 Max2 在这里没有影响。)
'open':
仅返回起点和终点之间的距离大于 Min1 像素的轮廓。 (Max1、Min2 和 Max2 在这里没有影响)。
如果 Min1 = Max1 = 0 或 Min2 = Max2 = 0 用于根据曲率进行选择,则相应的特征对选择没有影响。
Min,
Max,
Min2,
Max2:特征值的范围