基于时空同步信息的隧道点云与高清图像配准方法

标题:基于时空同步信息的隧道点云与高清图像配准方法


摘要

关键词:隧道;点云投影;小波变换;融合配准;亚毫米级:

本文首先集成了隧道病害综合检测装备,然后提出了基于小波变换的方法去除环片干扰噪声,最后基于高精度时空同步信息实现了点云投影灰度图像和高清影像融合配准。

结果或者结论:试验结果表明,高清影像和点云正射影像配准后具备了精确的位置角度信息,检测精度由点云正射影像的最高分辨率 2 mm 提高到 0. 4 mm,支持亚毫米级病害的检测与识别。

前言

现阶段,隧道表观状态的检测主要有高清相机和激光扫描技术,能够快速实现隧道渗漏水, 衬砌开裂和压溃剥落等病害。基于图像和深度学习的隧道表面病害检测技术逐渐成熟,对于自动识别各种病害取得了一定的效果。
现有的隧道表面病害识别方法主要基于图像或点云识别,单一的图像不能提供精确的位置姿态信息,而点云投影灰度图的精度无法达到亚毫米细微病害识别的需求,仅依靠数据插值或误差修整等方法不能从根本上提高病害识别和定位的精度,针对上述隧道病害检测中的问题,本文集成了隧道病害综合检测装备,基于高精度时空同步数据完成了点云投影灰度图和高清影像的配准融合,融合后的隧道病害高清图像分辨率能达到 0. 4 mm,同时包含精确的位置和角度信息。

一、隧道病害综合检测装备集成

隧道病害的检测对于测量设备的时效性和精准度均有较高要求,在保证测量速度的基础上如何保证测量的位置精度是当前隧道综合检测装备面临的一大难题。
如图 1 所示,本文提出的隧道病害综合检测装备集成了高精度激光扫描仪、高清 CCD(charge
coupled device)相机、GNSS/ IMU/ DMI(global navigation satellite system / inertial measurement unit / distance measurement indicator)组合定位定姿系统,车轮编码器、同步数据采集单元和车架组成。
在这里插入图片描述
隧道病害综合检测系统的工作方式为空间间隔采样,为了使各传感器采集到的数据达到毫秒级的
时间同步精度,本文集成的隧道病害综合检测系统通过发射触发脉冲信号实现各传感器数据统一控制采集,获取高精度时空基准的隧道高精度点云、高清图像信息、里程信息和姿态信息等,由时间同步控制采集模块统一采集并传输到上位机存储。

如图 2 所示。 系统开始工作后,编码器发出距离脉冲,经过调制放大后,发送到时间同步控制采集模块;GPS 系统校正系统时间并提供给同步信号中的高精度时间;时间同步控制采集模块接收到编码
器发出的距离脉冲信号后会分别向激光扫描仪和惯导系统发出触发采集脉冲信号,二者采集数据后立刻返回时间同步控制采集模块,打包时间信息和各传感器的数据,通过 RS232 传输到上位机并存储,每一帧采集到的数据格式排列如下:时间戳、编码器 数据、惯导系统数据、激光扫描仪数据和高清图像。
在这里插入图片描述

二、点云数据与 POS 数据融合

点云数据与 POS 数据融合后才能获得精确的位置姿态信息,激光扫描仪某一时刻获得的目标表面任意一点的坐标。

三、隧道点云投影及高清影像配准

1.点云数据滤波

为了解决衬砌表面由于管线和支架等障碍物导致采集的点云存在凸出或凹陷的问题,本文提出一种基于小波变换的方法,通过参数标定,选定一个初始圆心位置并计算得到衬砌表面上每个点的半径,将衬砌表面的连续半径看成是时间的函数,则连续半径波形就是一个非平稳信号即获得隧道半径的波形,通过小波变换去除高频分量,保留隧道衬砌表面点的低频分量,完成噪点的去除。

2.点云投影展开

为了获取隧道表面的平面数据,需要将滤波后隧道衬砌表面的点云数据沿隧道圆柱形顶部展开。

3.基于时空同步数据的高清影像配准

隧道病害综合检测系统集成了激光扫描仪、POS 系统、高清相机和里程计。 多源数据的采集时刻均由里程计触发脉冲激发,其中高清相机以固距离触发采集的方式拍摄隧道衬砌表面的高清图像,激光扫描仪获取的点云数据与 POS 数据融合后获得了位置姿态信息并建立了对应的索引关系,根据
修正后的精确位置信息,将高清图像数据进行缩放后依据像素点对应关系完成配准,具体配准流程如
图 6 所示。
在这里插入图片描述
在点云与 POS 数据融合和里程信息融合前,根据实际工程精度需求,可采用基于铁路控制网的正
反向航位推算算法[18] 进一步消除隧道病害综合检测系统的位置姿态误差;在对不同尺寸的隧道进行数据采集时,由于高清相机距离隧道衬砌表面的距离是变动的,在每一帧高清图像和点云投影灰度
图位置和角度信息匹配之后,特定位置的高清图像需要进行适当缩放后完成最终配准。

四、试验验证与分析

如表 1 所示某地地铁裂缝区的实际检测结果,检测数据除了可以提供裂缝的大小信息,数据中还包含了高精度的里程和角度信息,极大地提升了实际隧道安全维护的直接效率,实现了病害发生位置的精确定位。

五、结论

在当前两种主流的隧道病害检测方法中,基于点云的隧道病害检测方法受限于点云数据自身的精度,无法实现毫米级和亚毫米级病害的检测,尤其对于细微裂缝的检测;基于高清影像的病害检测方法虽然提升了检测精度,但无法提供精确的位置和角度信息,维修人员到达现场后还需要进一步查找,并
不能从根本上提高病害检测和修复的效率。 针对以上瓶颈难题,本文集成了一套隧道病害综合检测系统,提出了一种基于小波变换的方法去除管片多余噪声,然后将融合 POS 信息后的点云投影为隧道灰度图像,最后基于时空同步信息完成了高清图像与隧道灰度图像的融合。 经过实地试验测试,成功获取了地铁隧道的裂缝数据和精确的位置角度信息,极大地提升了隧道安全运维的检测获取数据的精度和速度,间接提升了后续病害检测的精度,为实现隧道衬砌表面亚毫米级病害提供有力的数据支撑。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一段点云数据图像配准的 Python 代码: ```python import open3d as o3d import numpy as np import cv2 # 读取点云数据 pcd = o3d.io.read_point_cloud("point_cloud.pcd") # 读取图像 img = cv2.imread("image.jpg") # 定义相机内参 fx, fy = 1000, 1000 # 焦距 cx, cy = img.shape[1] / 2, img.shape[0] / 2 # 中心点 # 获取点云数据的 RGB 点颜色值 color_arr = np.asarray(pcd.colors) color_list = [] for c in color_arr: color_list.append([int(c[0] * 255), int(c[1] * 255), int(c[2] * 255)]) # 定义 OpenCV 的绘制函数 def draw_registration_result(source, target, transformation): source_temp = copy.deepcopy(source) source_temp.transform(transformation) o3d.visualization.draw_geometries([source_temp, target]) # 定义点云图像配准函数 def register_pcd_with_image(pcd, img, fx, fy, cx, cy): # 将 RGB 点颜色值转换为 OpenCV 的颜色表示方式 image_colors = np.array(color_list)[:, ::-1] # 将点云的坐标转换为相机坐标系下的 2D 坐标 coords = np.asarray(pcd.points) x, y, z = coords[:, 0], coords[:, 1], coords[:, 2] X = np.array([x/z*fx + cx, y/z*fy + cy]).T # 使用 OpenCV 的函数计算图像中的特征点 sift = cv2.SIFT_create() keypoints, descriptors = sift.detectAndCompute(img, None) # 进行匹配 bf = cv2.BFMatcher() matches = bf.knnMatch(descriptors, descriptors, k=2) # 使用 RANSAC 算法估计相机位姿 src_pts = np.float32([keypoints[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2) dst_pts = np.float32([keypoints[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2) M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0) mask = mask.ravel().tolist() # 绘制结果并返回变换矩阵 draw_params = dict(matchColor = (0, 255, 0), singlePointColor = None, matchesMask = mask, flags = 2) img_matches = cv2.drawMatches(img, keypoints, img, keypoints, matches, None, **draw_params) cv2.imshow("matches", img_matches) cv2.waitKey(0) return M # 进行点云图像配准 M = register_pcd_with_image(pcd, img, fx, fy, cx, cy) # 将点云数据变换到图像坐标系下 pcd.transform(M) # 显示配准结果 o3d.visualization.draw_geometries([pcd]) ``` 希望这段代码对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值