场景

由于二维相机对于有些病害无法很好识别,甚至病害之间会出现混淆的情况,所以想到使用三维图像识别,用更加精准的数据去判断是否存在道路病害的可能性

相机的选择

三维相机种类

    1. 结构光(Structured Light)相机
    • 原理:通过投射已知的光栅图案到物体表面,记录图案在物体表面上的变形,从而计算物体的三维形状。
    • 优点:精度高,适合高分辨率的三维建模。
    • 缺点:对环境光敏感,户外使用效果较差。
    • 应用:广泛用于工业检测、3D扫描仪、面部识别等。
    1. 飞行时间(Time-of-Flight, ToF)相机
    • 原理:通过发射红外光激光,并测量光从相机发射到反射回来的时间差来计算物体的距离。
    • 优点:适用于远距离测量,实时性好。
    • 缺点:精度相对较低,分辨率受限。
    • 应用:自动驾驶、AR/VR、手势识别、移动设备上的人脸识别。
    1. 双目立体视觉(Stereo Vision)相机
    • 原理:利用两台或多台相机捕捉同一场景的不同视角图像,运用两个相机之间物体的差距通过算法,计算物体的深度信息。
    • 优点:不依赖主动光源,适合自然光环境。
    • 缺点:深度信息的精度取决于相机间距及视角,不适合纹理较少或复杂的场景。
    • 应用:机器人导航、自动驾驶、机器视觉等。

实验室采用的是结构光相机

结构光相机的大致原理

通过近红外激光器,将具有一定结构特征的光线投射到被拍摄物体上,再由专门的红外摄像头进行采集。这种具备一定结构的光线,会因被摄物体的不同深度区域,而采集不同的图像相位信息,然后通过运算单元将这种结构的变化换算成深度信息,以此来获得三维结构。 简单来说就是,通过光学手段获取被拍摄物体的三维结构,再将获取到的信息进行更深入的应用

三维点云项目识别道路病害过程

数据处理

点云数据采集后,对于无效值 (NaN 或者数组上字段为零的点) 进行对应的去除

点云降采样

目的在于缩减数据量的同时保持数据的整体特征。 该项目中采用的是体素下采样

体素下采样 | NadirEcho’s Blog

点云的降噪

统计滤波器(去噪) | NadirEcho’s Blog

使用这个的目的是希望,去除路面以外的一些离群点。

离群点Responsive Image

4a92d1323b4eae1335125f029174f53.png

使用算法后类似效果于: 去除前Responsive Image

image.png
去除异常值后,噪声点也被去除。

Responsive Image

image.png

图片来源:filters.outlier — pdal.io

分割路面

这一步的目的在于,把整条路面分割出来,想要将其平面分割出来,算法选择下面两种之一

随机样本一致性算法(RANSAC) | NadirEcho’s Blog

PCA主成分分析算法 | NadirEcho’s Blog

Responsive Image

84de503c992e54b7937c2f0bfdd3616.png

Responsive Image

c949b50b2057b47349b7debfba81273.png

路面拼接

点云做一个点云配准序列点云连续采样(类似于图片拼接) 这一步的目的是,有时候三维相机会连续拍几个页面,前后两张照片的路面实际是连续的。连续拍摄的图像生成了多个局部重叠的点云,这些点云包含重复的部分(如连续路面),我们希望将这些重叠的点云拼接在一起,形成一个完整的三维场景。为了实现这一目标,需要将前后两帧的点云进行对齐,也就是配准。这个对齐过程会涉及找到各帧之间的变换矩阵,包括平移、旋转等,使得这些点云能够在同一坐标系下正确拼接。

多个点云数据集在相同坐标系下进行对齐的过程,使得它们在空间中具有一致的位置和姿态。在点云配准中,需要估计点云之间的转换关系,包括平移、旋转和尺度(非刚性配准)等变换。 这个操作的目的是为了先将点云初始对齐。ICP的效率和结果往往依赖于初始对齐的精度,如果初始对齐较好,ICP可以在局部找到最优的刚性变换,从而更快地收敛并得到准确的拼接结果。

这样做有三大好处

  • 减少计算量:ICP算法在初始对齐较好的情况下,能够更快收敛。如果两帧点云之间的初始位姿差异较大,ICP需要更多的迭代才能找到最优解,甚至可能会陷入局部最优解。因此,初始变换矩阵可以帮助减少ICP的工作量。
  • 避免局部最优解:ICP是一种局部优化算法,依赖初始状态。如果两帧点云之间的初始姿态差异过大,ICP可能无法正确对齐。因此,通过预先应用合理的旋转和平移变换,可以将两帧点云带到较为接近的对齐状态,帮助ICP找到全局最优解。
  • 改善拼接效果:通过预先的粗对齐,可以确保点云在全局坐标系下处于合理的初始位置,这对多帧点云拼接非常重要。

然后使用 ICP 配准算法

迭代最近点算法(ICP) | NadirEcho’s Blog

分离内点和外点

外点就是路面之外的点–>确定路面

使用 DBscan 算法或者 K-means 算法

DBscan算法 | NadirEcho’s Blog

K-mean算法 | NadirEcho’s Blog

一个疑问

点云的线性变换,平移旋转,怎么实现一个任意的旋转坑害的值就可以用 z 值表示了旋转矩阵路平面的法向量

z 轴我们知道计算旋转轴(z 轴和法向量轴的叉乘,它俩的夹角也知道,构筑旋转矩阵(有个计算公式罗德里格斯公式旋转矩阵)求出旋转矩阵 R (加上平移向量 )