halcon 模型生成点云、深度图生成点云

34 篇文章 26 订阅
5 篇文章 1 订阅

用halcon生成一个均匀的球

思路:

1  、下采样(推荐)

2、 三角化骨骼顶点(不推荐)

* This example program shows how to use the operators
* gen_plane_object_model_3d, gen_sphere_object_model_3d_center
* gen_sphere_object_model_3d, gen_cylinder_object_model_3d, and
* gen_box_object_model_3d in HALCON. In this example, a plane,
* two spheres, a cylinder, and a box are set with different poses.
* The generated primitves of the 3D object models are visualized.
* 
* Initialize program.
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
create_pose (0.1, 1.5, 88, 106, 337, 224, 'Rp+T', 'gba', 'point', PoseIn)
gen_circle_contour_xld (ContCircle, 200, 200, 100, 0, 6.28318, 'positive', 120)
get_contour_xld (ContCircle, Row, Column)
X := 3 * Row / max([Row,Column]) - 2
Y := 3 * Column / max([Row,Column]) - 2
* 
* Create an infinite plane.
gen_plane_object_model_3d ([0,0,0,0,0,0,0], [], [], ObjectModel3DPlane1)
* Create a limited plane.
gen_plane_object_model_3d ([1,1,1,0,50,30,0], X, Y, ObjectModel3DPlane2)
* Create a sphere using pose.
gen_sphere_object_model_3d ([0,0,3,0,0,0,0], 0.5, ObjectModel3DSphere1)
gen_sphere_object_model_3d ([0,0,0,0,0,0,0], 5, ObjectModel3DSphere)
* Create a sphere und position.
gen_sphere_object_model_3d_center (-1, 0, 1, 1, ObjectModel3DSphere2)
* Create a cylinder.
gen_cylinder_object_model_3d ([1,-1,2,0,0,60,0], 0.5, -1, 1, ObjectModel3DCylinder)
gen_cylinder_object_model_3d ([1,-1,2,0,0,60,0], 1, -2, 2, ObjectModel3D)
* Create a box.
gen_box_object_model_3d ([-1,2,1,0,0,90,0], 1, 2, 1, ObjectModel3DBox)
* 
* Display the generated primitives.
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom:   Shift + left button'
Instructions[2] := 'Move:   Ctrl  + left button'
ObjectModels := [ObjectModel3DPlane1,ObjectModel3DCylinder,ObjectModel3DSphere1,ObjectModel3DSphere2,ObjectModel3DPlane2,ObjectModel3DBox]
Labels := ['Plane1','Cylinder','Sphere1','Sphere2','Plane2','Box']
VisParamName := ['disp_pose_3','color_0','color_1','color_2','color_3','color_4','color_5','alpha_0']
VisParamValue := ['true','green','cyan','yellow','magenta','blue','white',0.5]
visualize_object_model_3d (WindowHandle, ObjectModels, [], PoseIn, VisParamName, VisParamValue, [], Labels, Instructions, PoseOut)

* 推荐
sample_object_model_3d (ObjectModel3DSphere, 'fast', 0.02, [], [], SampledObjectModel3D)
write_object_model_3d (SampledObjectModel3D, 'ply',  'C:/Users/Albert/Desktop/myballdxf1', [], [])

* 不推荐 拿到的点其实就是三角化之后三角形的顶点----骨骼
convex_hull_object_model_3d (ObjectModel3DSphere, ObjectModel3DConvexHull)
* 得到球面上的点
get_object_model_3d_params (ObjectModel3DConvexHull, 'point_coord_x', point_coord_x)
get_object_model_3d_params (ObjectModel3DConvexHull, 'point_coord_y', point_coord_y)
get_object_model_3d_params (ObjectModel3DConvexHull, 'point_coord_z', point_coord_z)
gen_object_model_3d_from_points (point_coord_x, point_coord_y, point_coord_z, ObjectModel3D1)
write_object_model_3d (ObjectModel3D1, 'ply', 'C:/Users/Albert/Desktop/myballdxf', [], [])

骨骼: 

 下采样:

深度图生成点云


* 加载图像;
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image7, 'C:/Users/Albert/7 没检测出来/7.tif')
threshold(Image7, Region, -45, 255)
get_domain (Image7, Domain)
difference (Domain, Region, RegionDifference)
paint_region (RegionDifference, Image7, ImageResult, -40, 'fill')
* 有nan 值先取掉
min_max_gray (ImageResult, ImageResult, 0, Min, Max, Range)
threshold (ImageResult, Region1, Min, Max)
reduce_domain (ImageResult, Region1, ImageReduced)
get_image_size (ImageReduced, Width, Height)

* 生成xy 图
gen_image_surface_first_order (ImageSurface, 'real', 1, 0, 0, 0, 0, Width, Height)
gen_image_surface_first_order (ImageSurface1, 'real', 0, 1, 0, 0, 0, Width, Height)

 x:=1
 y:=2
 z:=1
 scale_image (ImageSurface, X, x, 0)
 scale_image (ImageSurface1, Y, y, 0)
 scale_image (ImageReduced, Z, z, 0)

 * 生成点云模型
 xyz_to_object_model_3d (X, Y, Z, ObjectModel3D)
 write_object_model_3d (ObjectModel3D, 'ply',  'C:/Users/Albert/Desktop/mycloud', [], [])

 gen_image_surface_first_order  使用一阶多项式创建倾斜的灰色曲面

 

  halcon 案例:

xyz_attrib_to_object_model_3d.hdev

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Halcon中,可以通过点云数据生成深度图点云是由三维空间中一组离散的点组成的数据集合,每个点都有其坐标信息和对应的颜色值。深度图是一种将空间中的点映射到二维图像上的方法,通常用于表示物体或场景的深度信息。 要生成深度图,首先需要加载点云数据。可以使用Halcon中的`read_object_model`函数读取点云数据文件。该函数会将点云数据加载到一个点云模型对象中,方便后续处理。 接下来,可以使用模型对象中的函数进行深度图生成。在Halcon中,可以通过调用`create_depth_image`函数来生成深度图。该函数需要设置相关参数,如图像对应的相机模型、图像的宽度和高度等。调用该函数后,会得到一个表示深度信息的图像对象。 生成深度图可以进一步进行处理和分析。可以通过`scale_image`函数对深度图进行缩放,以适应实际需求。还可以使用`disp_obj`函数将深度图显示在Halcon的图形窗口中,便于直观观察。 此外,Halcon还提供了丰富的图像处理和分析函数,可以根据具体需求对深度图进行进一步处理。例如,可以通过滤波函数对深度图进行噪声去除,或者使用形态学操作函数进行形状分析等。 综上所述,通过Halcon可以方便地从点云数据生成深度图,并对深度图进行进一步处理和分析,为三维视觉应用提供强大的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值