0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

3D相机点云数据“如何读取”

新机器视觉 来源:新机器视觉 2023-07-12 10:28 次阅读

Halcon|读取3D相机点云数据

最近发现很多小伙伴在使用Halcon处理3D工业相机扫描结果的时候遇到了“如何读取”的问题。一般的3D工业相机储存数据的格式有txt格式、tif格式、csv格式、ply格式、ptx格式、bin格式、obj格式等。

txt格式

读取txt文件生成3D模型一般需要分析txt文件的储存格式,下图是我使用的工业相机储存的部分txt数据:

60ebb6c0-2045-11ee-962d-dac502259ad0.png 经过分析,前3列为X、Y、Z坐标,第4列到第6列为每一点的法线坐标nX、nY、nZ,第7列到第9列为灰度值。因此我们采用以下代码重构3D模型:

open_file ('data.txt', 'input', XYZ) #打开文件
X :=[]
Y :=[]
Z :=[]
nX :=[]
nY :=[]
nZ :=[]
Gray :=[]
fread_line (XYZ, OutLine, IsEOF) #读文件中一行的字符串
tuple_split (OutLine, ' ', Substrings) #根据空格分割一行的字符串
while (IsEOF==0) #将X Y Z nX nY nZ Gray分别存储在不同的元组中
  X :=[X,Substrings[0]]
  Y :=[Y,Substrings[1]]
  Z :=[Z,Substrings[2]]
  nX :=[nX,Substrings[3]]
  nY :=[nY,Substrings[4]]
  nZ :=[nY,Substrings[5]]
  Gray :=[Gray,Substrings[6]]
  fread_line (XYZ, OutLine, IsEOF)
  tuple_split (OutLine, ' ', Substrings)
endwhile
close_file (XYZ) #关闭文件
tuple_number (X, NumberX) 
tuple_number (Y, NumberY) 
tuple_number (Z, NumberZ)  #将字符串转化为数字
gen_object_model_3d_from_points (NumberX, NumberY, NumberZ, ObjectModel3D) #构建3D模型
visualize_object_model_3d (3600, ObjectModel3D, [], [], [], [], [], [], [], PoseOut) #显示3D模型

代码中的IsEOF参数为循环的判断变量,当文件未到末尾时,IsEOF为0;当文件到达末尾时,IsEOF为1。

3D模型显示结果如下:
61053fc8-2045-11ee-962d-dac502259ad0.png
注意:1、通过元组生成3D模型时,采用gen_object_model_3d_from_points算子;2、一些3D相机的txt文件的数据之间采用@相连,此时应使用@对字符串进行分割。

tif格式

tif图片格式是工业相机损失较小的图片格式。一般3D相机会将不同的数据保存在不同的tif图片中。下图是我使用的工业相机储存的tif文件:
612e75e6-2045-11ee-962d-dac502259ad0.png
其中,PointCloud_X
PointCloud_Y PointCloud_Z为将点云的XYZ坐标作为灰度值生成的图片,NormalMap_X NormalMap_Y
NormalMap_Z为将点云的XYZ法线坐标作为灰度值生成的图片,Texture为一般的灰度图片。可使用以下代码重构3D模型:

61493e9e-2045-11ee-962d-dac502259ad0.png

615da82a-2045-11ee-962d-dac502259ad0.png
其中,读取的PointcloudX PointcloudY PointcloudZ等图片也可以先做Blob分析之后再合成3D模型。此时,若PointcloudX PointcloudY PointcloudZ的大小不一致,代码:

61750f1a-2045-11ee-962d-dac502259ad0.png

生成的3D模型将以PointcloudX为准。

注意:与算子gen_object_model_3d_from_points作对比,当通过图片生成3D模型时,采用xyz_to_object_model_3d算子。

Halcon直接读取

我购买的工业相机可以直接采用以下代码实时抓取数据,可以作为其他工业相机实施抓取数据的参考。

open_framegrabber ('PhoXi', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', '2018-08-034-LC3', -1, -1, AcqHandle) #打开相机
get_framegrabber_param (AcqHandle, 'revision', Revision) #得到相机参数
GrabDataItems:=['PointCloud', 'Texture', 'NormalMap', 'ConfidenceMap']
set_framegrabber_param (AcqHandle, 'grab_data_items', GrabDataItems) #设置相机参数
grab_data (ImageData, Region, Contours, AcqHandle, Data) #抓取数据
select_obj (ImageData, XYZ, 1) #选择3维数据XYZ(点云坐标)
select_obj (ImageData, Texture, 2) #选择1维度数据Texture
select_obj (ImageData, Normals, 3) #选择3维数据Normals(法线)
select_obj (ImageData, Confidence, 4) #选择1维数据Confidence
decompose3 (XYZ, XImage, YImage, ZImage) #将XYZ分解为X Y Z三通道
decompose3(Normals, nX, nY, nZ)  #将Normals分解为nX nY nZ三通道

同样,可以对其中任意一张图像做Blob分析等操作,也可采用:

618cee1e-2045-11ee-962d-dac502259ad0.png

生成3D模型并进行显示。

CSV格式

CSV格式(Comma-Separated Values)直译为逗号分隔值(也称字符分隔值,因为分隔字符也可以不是逗号),是一种以逗号作为分隔符,对数据进行直接记录的文件。

读取csv文件生成3D模型一般需要分析csv文件的储存格式。我们先创建一个csv文件。如下图所示,直接创建txt文件,每一行保存一个点云坐标,不同坐标之间采用“,”作为分隔符,另存为csv文件即可。
61a99104-2045-11ee-962d-dac502259ad0.png

61c31f5c-2045-11ee-962d-dac502259ad0.png

结果如下:
62023d5e-2045-11ee-962d-dac502259ad0.png

ply格式

ply是Halcon可识别的3D模型储存格式,可以直接打开。

622d84e6-2045-11ee-962d-dac502259ad0.png

结果如下:
62505430-2045-11ee-962d-dac502259ad0.png

责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6512

    浏览量

    87601
  • 储存
    +关注

    关注

    3

    文章

    184

    浏览量

    22283
  • 3D相机
    +关注

    关注

    0

    文章

    79

    浏览量

    7932

原文标题:Halcon|读取3D相机点云数据

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    友思特C系列3D相机:实时3D云图像

    3D相机
    虹科光电
    发布于 :2024年01月10日 17:39:25

    3D打印的树莓派相机(又要3D打印机了)

    Multibox PC123D Design焊料内六角扳手小锤子钳子尺子工艺刀合适的工作台|空间第二步:设备测试第三步:开始3D建模第四步:外壳和液晶屏第五步:第二层第六步:第七步:第八步:相机前部
    发表于 12-31 15:14

    采用DLP技术的3D机器视觉参考设计包括BOM

    3D 。高度差异化 3D 机器视觉系统利用 DLP®(...)主要特色 集成型 API 和针对 DLP 芯片组的驱动程序支持,可实现快速以及可编程图形针对同步捕捉的集成型摄像机支
    发表于 10-12 15:33

    D435获得完整的数据集不完整

    800000-900000左右。假设数据是从图像生成的,则预期完整的具有结构 - 即,理想地,它将根据像素位置的行或列进行排序。一旦某些
    发表于 10-30 11:27

    如何同时获取2d图像序列和相应的3d

    如何同时获取2d图像序列和相应的3d?以上来自于谷歌翻译以下为原文How to obtain the sequence of 2d im
    发表于 11-13 11:25

    3D模拟飞机飞行串口

    Labview-3D模拟飞机飞行-串口通讯通过Labview导入飞机3维模型(.wrl),支持手动调整姿态,另外支持串口通讯,自动调整姿态!主要技术:1、串口通讯,读取飞机姿态X、Y
    发表于 04-02 09:40

    PYNQ框架下如何快速完成3D数据重建

    来实现基于这些约束的三维重建的完整管道。  在这个项目中,作者的目标是朝着实时生成3D视觉数据迈进一步。首先,在CPU上生成3D,然后使
    发表于 01-07 17:25

    浩辰3D的「3D打印」你会用吗?3D打印教程

    设计。由浩辰CAD公司研发的浩辰3D作为从产品设计到制造全流程的高端3D设计软件,不仅能够提供完备的2D+3D一体化解决方案,还能一站式集成3D打印的多元化
    发表于 05-27 19:05

    什么是3D相机? 相关资料分享

    无论2D相机还是3D相机,提到相机不可避免地涉及到机器视觉。机器视觉与计算机视觉并没有一个明显的定义去划分。但在实际应用中,...
    发表于 07-02 06:50

    格式主要有哪几种

    由于数据的量非常大,cesium在显示海量数据的时候就非常的吃力,因此需要用到3dtiles。3D
    发表于 07-12 07:48

    嵌入式3D视觉功能相关资料推荐

    如需在汽车工业等生产线使用3D相机自动检测目标体积或目标的多角度视图,则必须快速生成和处理高分辨率的3D数据。配备500万像素大尺寸传感器和可变基线的立体
    发表于 12-23 07:20

    嵌入式3D有何功能呢

    如需在汽车工业等生产线使用3D相机自动检测目标体积或目标的多角度视图,则必须快速生成和处理高分辨率的3D数据。配备500万像素大尺寸传感器和可变基线的立体
    发表于 12-23 07:54

    面向3D机器视觉应用并采用DLP技术的精确生成参考设计

    3D 。高度差异化 3D 机器视觉系统利用 DLP® LightCrafter™ 4500 估模块 (EVM)(采用 DLP® 0.45 英寸 WXGA 芯片组),能够灵活控制工
    发表于 09-22 10:20

    使用结构光的3D扫描介绍

    控制、医疗、牙科和原型设计。 3D扫描是提取一个物体的表面和物理测量,并用数字的方式将其表示出来。这些数据被采集为一个由X,Y和Z坐标(表示物体外部表面)组成的。对于一个
    发表于 11-16 07:48

    光学3D表面轮廓仪可以测金属吗?

    测量金属制品的长度、宽度、高度等维度参数。 除了测量金属表面的形状和轮廓外,光学3D表面轮廓仪还可以生成三维数据和色彩图像,用于进一步分析和展示: 1、三维
    发表于 08-21 13:41