开启左侧

(快速)解析点云文本文件

[复制链接]
绝地武士 发表于 2020-6-10 18:35:28 | 显示全部楼层 |阅读模式
blog-070-tire.jpg
HALCON提供了用于处理3D点云的多功能工具。
最近几个月,我们实施的涉及3D点云的项目数量大大增加了。
在本文中,我们想解决在HALCON中使用点云时可能要解决的第一个问题:如何导入基于文本的点云文件。
这是在所有的,可以在算子read_object_model_3d,例如off,ply或obj处读了许多共同的点云数据格式没有问题。
但是在许多情况下,您会收到自定义文本格式的文本文件。对于本文,我们将手动处理此类文本文件。

比如要解析65MB的这么大的文本文件的格式
151.7266   -633.6000   -25.2167   0006
-151.8364   -633.6000   -24.8572   0006
-152.0389   -633.6000   -24.8338   0005
-158.3584   -633.0000   -26.4589   0013
-130.1936   -632.7000   -25.0663   0009
-130.4456   -632.7000   -25.2497   0012
-130.6545   -632.7000   -25.2521   0011
-140.1130   -632.7000   -25.5433   0013
-140.3224   -632.7000   -25.5458   0012

此文本文件中的每一行代表一个点。列1、2和3是点坐标X,Y,Z。第4列是关联的灰度值。

下面的脚本我们经过了很对次尝试读取和解析,最终获取到21s的速度来读取这么大的文件解析并显示点云效果!
请参考脚本:read_point_cloud_simple_v9.hdev
微信截图_20200610184203.png
相关资料下载:
链接:https://pan.baidu.com/s/1epoBp-nrJ1c2LVeFgWc7vA
提取码:9gua

来自:http://heindl-solutions.com/blog_read_point_cloud.html
土豆丝 发表于 2020-6-24 15:32:23 | 显示全部楼层
我的哥,厉害了 ,我也是做三维的,咱可以加个微信交流一下吧{:6_192:}
zshy2020 发表于 2020-8-31 14:16:26 | 显示全部楼层
厉害了我的哥!下载后确实速度加快了不少,但有句代码不是很清楚有啥功能——Number := number(regexp_replace(P,'^\\s*0*(.+?)\\s*\n*$', '$1'))
 楼主| 绝地武士 发表于 2021-1-27 11:26:56 | 显示全部楼层
zshy2020 发表于 2020-8-31 14:16
厉害了我的哥!下载后确实速度加快了不少,但有句代码不是很清楚有啥功能——Number := number(regexp_repl ...

正则表达式替换
zshy2020 发表于 2021-3-1 13:39:14 | 显示全部楼层
知道是正则表达式替换,但看起来还是有些糊涂,看了您分享的正则表达式笔记https://www.51halcon.com/forum.php?mod=viewthread&tid=4264
也还是要一段时间才能看懂,如果可以的话,麻烦您再仔细讲讲{:1_336:}
 楼主| 绝地武士 发表于 2021-3-1 14:34:40 | 显示全部楼层
zshy2020 发表于 2021-3-1 13:39
知道是正则表达式替换,但看起来还是有些糊涂,看了您分享的正则表达式笔记https://www.51halcon.com/forum ...
注释不是写了三个功能了么?
1.移除左右的空白字符
2.移除末尾的换行字符\n
3.移除开头以0的内容(不移除的话会认为是八进制)

先看看regexp_replace的参数定义:
  1. tuple_regexp_replace( : : Data, Expression, Replace : Result)
复制代码
第一个是数据,第二个是表达式,第三个是替换内容。
  1. regexp_replace(SplitString,'^\\s*0*(.+?)\\s*\n*, '$1')
复制代码
Expression解释:
^ 从字符串开头开始
\\s* 匹配前面0个空格或者多个空格
0* 匹配前面没有0或者多个0
(.+?)匹配除换行以外的任意符号一次或者多次
\\s*  匹配后面0个空格或者多个空格
\n* 匹配0个换行或者多个换行符号
$ 匹配字符串结尾

Replace解释:
$0 表示找出输入字符串符合条件的子字符串,如果找不出就是正则表达式没有写对!
$1 表示获取替换后的结果(范围:<=9)
$ 获取$符号

这回已经非常详细了,如果还不懂,自己研究去吧!
zshy2020 发表于 2021-3-1 15:14:02 | 显示全部楼层
这一回非常清楚了,终于搞明白了!超感谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表