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

    文章

    7006

    浏览量

    88955
  • 储存
    +关注

    关注

    3

    文章

    201

    浏览量

    22370
  • 3D相机
    +关注

    关注

    0

    文章

    111

    浏览量

    8052

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

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

收藏 人收藏

    评论

    相关推荐

    基于3D的多任务模型在板端实现高效部署

    对于自动驾驶应用来说,3D 场景感知至关重要。3D数据就是具有3D特征的
    的头像 发表于 12-28 16:35 1459次阅读
    基于<b class='flag-5'>3D</b><b class='flag-5'>点</b><b class='flag-5'>云</b>的多任务模型在板端实现高效部署

    基于深度学习的方法在处理3D进行缺陷分类应用

    背景部分介绍了3D应用领域中公开可访问的数据集的重要性,这些数据集对于分析和比较各种模型至关重要。研究人员专门设计了各种
    的头像 发表于 02-22 16:16 1131次阅读
    基于深度学习的方法在处理<b class='flag-5'>3D</b><b class='flag-5'>点</b><b class='flag-5'>云</b>进行缺陷分类应用

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

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

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

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

    3D威廉希尔官方网站 介绍及其与VR体验的关系

    ;x>nkedIn上发表了一篇跟澳大利亚科技公司优立(Euclideon)所使用的数据有关的文章,并在业内引起了一番讨论。 1.
    发表于 09-15 09:28 20次下载

    问题的介绍及3D威廉希尔官方网站 在VR中的应用

    1. 的问题 是由3D扫描硬件收集的数据,如FARO的Focus
    发表于 09-27 15:27 17次下载

    3D相机的类别及工作原理

    3D相机的不同之处在于,它可以测量普通数码相机无法测量的深度数据。所谓深度数据,就是像素到相机
    的头像 发表于 09-24 12:40 1.8w次阅读

    谷歌AI发布3D物体数据集,附带标记边界框、相机位姿、稀疏

    见过3D物体数据集,见过会动的3D物体数据集吗? 每段动态视频都 以目标为中心拍摄,不仅自带标注整体的边界框,每个视频还附带相机位姿和稀疏
    的头像 发表于 11-13 14:28 2257次阅读

    3D结构光相机的工作原理及优点

    结构光3D相机,一般指采用多幅条纹光栅,即先通过光栅投射模组按照时间序列依次投射在被测物体表面,再通过双目对物体表面的光栅进行拍照,基于事先编码规则进行解码和双目视差匹配,从而获得高精度的3D
    发表于 04-22 10:10 6404次阅读

    何为3D语义分割

    融合标注使用的3D标注工具仍以3D立体框为主,但在3D数据以外,还需要使用2
    的头像 发表于 07-21 15:52 8657次阅读

    如何试用MediaPipe实现人脸3D数据提取

    本文介绍如何试用MediaPipe实现人脸3D数据提取,提取的数据为人脸468位。
    发表于 02-23 17:47 1419次阅读

    3D数据集在3D数字化威廉希尔官方网站 中的应用

    随着计算机视觉威廉希尔官方网站 的不断发展,3D 数字化威廉希尔官方网站 已经成为了当今工业制造领域和三维医学影像领域的关键威廉希尔官方网站 。然而,构建高精度、高分辨率的 3D 数据
    的头像 发表于 05-06 16:46 1431次阅读

    自动驾驶3D语义分割数据标注

    在自动驾驶环境感知系统中,如何获取高精度实时路况数据,是决定自动驾驶系统行车安全的关键。 目前主流的两种感知威廉希尔官方网站 路径“纯视觉”与“高精地图+激光雷达”中,由于激光雷达采集的3D
    发表于 06-06 09:48 3次下载
    自动驾驶<b class='flag-5'>3D</b><b class='flag-5'>点</b><b class='flag-5'>云</b>语义分割<b class='flag-5'>数据</b>标注

    基于3D障碍物检测介绍

    基于3D障碍物检测 主要有以下步骤: 数据的处理 基于
    的头像 发表于 06-26 10:22 952次阅读
    基于<b class='flag-5'>点</b><b class='flag-5'>云</b>的<b class='flag-5'>3D</b>障碍物检测介绍

    基于深度学习的3D实例分割方法

    3D实例分割(3DIS)是3D领域深度学习的核心问题。给定由云表示的 3D 场景,我们寻求为每个
    发表于 11-13 10:34 2330次阅读
    基于深度学习的<b class='flag-5'>3D</b><b class='flag-5'>点</b><b class='flag-5'>云</b>实例分割方法