在Halcon中,使用鼠标点选点云获取点云XYZ坐标值。

方法1:将点云或模型投影到2D相机平面,生成X,Y,Z map图,通过获取鼠标点选坐标,获取XYZ map图中对应的灰度值,该灰度值即模型鼠标点选的xyz坐标值。

方法2:通过将鼠标点选的点映射到三维空间中,将原点和点选点连成一条直线,求取三维直线和模型的最近距离点。

read_object_model_3d ('mvtec_bunny_normals', 'm', [], [], ObjectModel3D, Status)
dev_open_window (0, 0, 1920,966, 'black', WindowHandle2)

CamParam := ['area_scan_division',0.06,0,8.5e-06,8.5e-06,960,483,1920,966]
Pose := [-68.7544,-26.3678,825.156,0,0,0,0]
GenParamName := ['colored','color_0']
GenParamValue := [12,'light gray']
dev_get_window (WindowHandle)
disp_object_model_3d (WindowHandle, ObjectModel3D, CamParam, Pose, GenParamName, GenParamValue)
get_mbutton (WindowHandle, Row, Column, Button)
dev_close_window ()
*第一种方式
object_model_3d_to_xyz (X1, Y1, Z1, ObjectModel3D, 'cartesian_faces', CamParam, Pose)
get_grayval (X1, Row, Column, Xcord)
get_grayval (Y1, Row, Column, Ycord)
get_grayval (Z1, Row, Column, Zcord)

*第二种方式
image_points_to_world_plane (CamParam, Pose, Row, Column, 'm', X, Y)
pose_to_hom_mat3d (Pose, HomMat3D)
affine_trans_point_3d (HomMat3D, X, Y,0, Qx, Qy, Qz)
M:=sqrt((Qx*Qx+Qy*Qy+Qz*Qz))
Nx:=Qx/M
Ny:=Qy/M
Nz:=Qz/M

tuple_gen_sequence (0, Nx*2000, Nx, SequenceX)
tuple_gen_sequence (0, Ny*2000, Ny, SequenceY)
tuple_gen_sequence (0, Nz*2000, Nz, SequenceZ)
gen_object_model_3d_from_points (SequenceX, SequenceY, SequenceZ, Line)
affine_trans_object_model_3d (ObjectModel3D, HomMat3D, Object3DShow)


distance_object_model_3d (Object3DShow, Line, [], 3, [ 'store_closest_index' ], ['true'])
get_object_model_3d_params (Object3DShow,'&closest_index', GenParamValue2)
select_points_object_model_3d (Object3DShow, '&distance',0, 2, ObjectModel3DThresholded0)
get_object_model_3d_params (ObjectModel3DThresholded0, 'num_points', num_points)
if (num_points>0)
     get_object_model_3d_params (ObjectModel3DThresholded0, 'point_coord_x', px)
     get_object_model_3d_params (ObjectModel3DThresholded0, 'point_coord_y', py)
     get_object_model_3d_params (ObjectModel3DThresholded0, 'point_coord_z', pz)
endif



     distance_point_line (px, py, pz, 0, 0, 0, Qx, Qy, Qz, Distance)
     
     tuple_sort_index (Distance, Indices)
     if (|Indices|>2)
          tuple_select (px, Indices[0:1], pxSelected)
           tuple_select (py, Indices[0:1], pySelected)
            tuple_select (pz, Indices[0:1], pzSelected)
     endif
closestP:=sqrt(pxSelected*pxSelected+pySelected*pySelected+pzSelected*pzSelected)
 tuple_sort_index (closestP, Indices)
 tuple_select (pxSelected, Indices[0], px1)
tuple_select (pySelected, Indices[0], py1)
tuple_select (pzSelected, Indices[0], pz1)
gen_sphere_object_model_3d_center (px1, py1, pz1, 0.5, objectPointSelected)

show:=[Object3DShow,Line,ObjectModel3DThresholded0,objectPointSelected]

 

### 高质量点云图像的生成方法 高质量点云图像的生成依赖于多种技术和工具的支持,这些技术涵盖了硬件设备的选择、采集过程中的参数设置以及后期的数据处理等多个方面。 #### 数据采集阶段 为了获得高质量的原始点云数据,通常需要采用先进的传感器和技术。常用的设备包括但不限于激光扫描仪(LiDAR)、结构光相机和立体视觉系统[^1]。 - **激光扫描仪**:通过发射激光束并测量其返回时间来计算距离,能够提供高精度的距离信息。这种设备适用于大范围区域的快速扫描。 - **结构光相机**:利用投影特定图案光线至被测物表面再由摄像头捕捉变形后的影像来进行三维重建,适合近距离精细物体建模。 - **立体视觉系统**:依靠两个或更多摄像机从不同角度拍摄同一对象从而推导出深度信息,成本相对较低但可能受光照条件影响较大。 #### 后期处理环节 即使拥有优秀的前端捕获装置,后续还需要一系列复杂的运算才能得到最终理想的成果: ##### 噪声去除 由于环境干扰或其他因素的影响,在实际获取过程中不可避免会产生一些错误或者异常。因此有必要实施有效的去噪策略以提高整体品质。常见的降噪算法有统计学滤波器(Statistical Outlier Removal)[^3] 和半径离群移除(Radius Outlier Removal)等。 ##### 密度调整 对于某些特殊应用场景而言,均匀分布且具有一定密度级别的集才是最合适的输入形式之一。可以通过重采样(Subsampling) 技术实现这一目的;比如随机抽样(Random Sampling),网格平均(Grid Averaging) 方法都可以有效控制输出模型中各部分之间的间距差异程度达到预期标准范围内。 ##### 色彩增强 如果希望生成带颜色属性的彩色点云,则需考虑将RGB信息附加给每一个空间坐标位置上的像素。这一步骤经常涉及到与其他媒介如照片视频流相结合的过程——即将二维平面内的色彩映射转换成对应三维几何实体之上相应部位的颜色表现效果出来[^2]。 #### 工具推荐 目前市面上存在众多专门用于执行上述各项任务的专业软件包和服务平台可供选择: - Point Cloud Library (PCL): 开源C++库集合体,提供了丰富的API接口支持完成各种基础功能模块调用需求; - CloudCompare: 支持批量导入导出文件格式的同时还具备强大的可视化编辑能力; - MeshLab & Blender: 更侧重艺术创作领域方向的产品设计渲染用途较多一但是同样也可以很好地满足科研实验方面的探索尝试机会[^4]。 ```python import pcl cloud = pcl.load_XYZRGB('test_pcd.pcd') fil = cloud.make_statistical_outlier_filter() fil.set_mean_k(50) fil.set_std_dev_mul_thresh(1.0) cloud_filtered = fil.filter() pcl.save(cloud_filtered, 'filtered_cloud.pcd') ``` 以上代码片段展示了如何使用Python绑定版Point Cloud Library(PCL) 对加载进来的测试样本进行简单粗暴型统计数据过滤操作实例演示说明文档链接地址如下所示:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值