点击下方
卡片
,关注
「3D视觉工坊」
公众号
选择
星标
,干货第一时间送达
来源:3D视觉之心 | 编辑:计算机视觉工坊
添加小助理:cv3d001,备注:方向+学校/公司+昵称,拉你入群。文末附3D视觉行业细分群。
扫描下方二维码,加入
「3D视觉从入门到精通」知识星球
(
点开有惊喜
)
,星球内凝聚了众多3D视觉实战问题,以及各个模块的学习资料:
近20门秘制视频课程
、
最新顶会论文
、计算机视觉书籍
、
优质3D视觉算法源码
等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!
一、LIO_SAM对于intensity值使用解读
1.1 作为反射率给点云上色
此作用是一种常规的使用方法,是不是这样做,其实比较简单的办法是:在rviz里去显示几个topic即可
/lio_sam/mapping/map_local
/lio_sam/mapping/cloud_registered
当看到这几个与关键帧相关的topic在rviz上显示五颜六色时候,就可以确定了,相关的点云信息里是有intensity值的,否则就会得到
全部一样颜色
的图片(不要用pcl_viewer去确定它有没有颜色,因为不准确);下面介绍了为什么pcl_viewer不准确,并且需要用什么办法去看包含intensity的pcd文件显示!
能够得出intensity值被用于显示,也可印证一开始从雷达驱动读取到信息到最后的渲染出五言六色的信息,intensity在整个全流程参与了!下面这条语句说明了corner关键帧和corner全局地图之间的关系,由前者累加成为后者的!
*globalCornerCloud += *transformPointCloud(cornerCloudKeyFrames[i], &cloudKeyPoses6D->points[i]);
1.2 rviz 上的显示
ROS 的rviz上会有一个选项:Color Transformer(颜色变换器[1]):用于选择用于点云颜色的变换器。你可以选择根据测量值、高度值或intensity等属性来设置点云的渲染颜色 ; 具体函数实现是类rviz::IntensityPCTransformer Class[2]
二、FAST_LIO对intensity值的使用
需要反射率来给不同物体分类的时候,可以继续研究;先研究反射率的意义,再研究反射率和显示的颜色的具体关系!下面具体研究展开:
❝
漫反射[3],是投射在粗糙表面上的光向各个方向反射的现象。当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”,这种反射的光称为漫射光。很多物体,如植物、墙壁、衣服等,其表面粗看起来似乎是平滑,但用放大镜仔细观察,就会看到其表面是凹凸不平的;
2.1 Livox雷达的(目标)反射率[4]到底是什么?
LivoxMID360雷达的量程 (@100 klx) 40 m @ 10% 反射率 70 m @ 80% 反射率
漫反射[5]就是光线照在表面凹凸不平的物体上,光学朝四面八方反射的现象。这是我们人眼能够识别物体的基础,一说为什么能分辨物体,就是漫反射;但全反射场景在工程中比较少见,可忽略;
❝
(目标)反射率:以 0 至 255 表示。其中 0 至 150 对应反射率介于 0 至 100% 的漫反射物体;而151 至 255 对应全反射物体。当被测物体距离 Mid-360 小于 2 m 时,目标反射率误差可能偏大,仅能用于区分目标为全反射物体还是漫反射物体;
配置反射率为[4]敏感模式:
2.2 用intensity提取车道线[6]
基于视觉系统的车道线检测有诸多缺陷,首先是视觉系统对背景光线很敏感,诸如阳光强烈的林荫道,车道线被光线分割成碎片,致使无法提取出车道线;激光雷达检测物体: 物体反射率决定IBEO回波脉冲宽度特性,路面和车道线有着明显的差异,所以可以利用回波脉冲宽度的差异对目标进行区分:
❝
提供点云数据反射强度信息,可以对特定类型的数据目标进行独立分离。比如自动驾驶高精度地图制图过程中,一些点云数据处理软件所具备的基于反射强度提取道路标线功能,就是基于点云数据反射强度将具备高反射强度的道路标线单独分离出来,让反射强度相对较低的道路表面被隐藏。从而便于道路标线的高效精准自动化提取[7] 引用@乔广东
反射率和物体类别有关?
2.3 用intensity对点云上色
针对下面的内容:
typedef pcl::PointXYZINormal PointType;
typedef pcl::PointCloud PointCloudXYZI;
......
PointCloudXYZI::Ptr laserCloudWorld(new PointCloudXYZI(size, 1));
for (int i = 0; i {
RGBpointBodyToWorld(&laserCloudFullRes->points[i],&laserCloudWorld->points[i]);
}
sensor_msgs::msg::PointCloud2 laserCloudmsg;
pcl::toROSMsg(*laserCloudWorld, laserCloudmsg);
其中通过坐标系变换知道了,实际显示只用到了intensity,和XYZ等信息;