发明名称 基于城墙断面从LiDAR点云数据自动提取古城墙数据的方法
摘要 本发明涉及一种基于城墙断面从LiDAR点云数据自动提取古城墙数据的方法,包括以下步骤:获取城墙待选区,矢量化得到顶部二维中心线,并插值得到完整的城墙顶部三维中心线;对城墙顶部三维中心线密集采样得到探测基点,计算每个探测基点断面上的点云;构建城墙断面格网;并基于城墙断面“横向探测—纵向探测”城墙顶部、垛口和侧面点云数据。本发明提出利用LiDAR点云数据提取古城墙的数据,解决了利用LiDAR技术进行数字存档的关键技术,有效的解决了传统测量耗时耗力,且无法获取城墙侧面细节信息的不足。本发明提出的“纵向探测‑横向探测”的城墙侧面点精确提取方法,可以有效的实现城墙侧面细节信息和顶部信息的自动获取。
申请公布号 CN105844707A 申请公布日期 2016.08.10
申请号 CN201610148169.0 申请日期 2016.03.15
申请人 南京大学 发明人 程亮;王娅君;李满春;许浩;袁一;陈焱明;谌颂;伍阳;夏南;孙越凡
分类号 G06T17/05(2011.01)I 主分类号 G06T17/05(2011.01)I
代理机构 南京同泽专利事务所(特殊普通合伙) 32245 代理人 蔡晶晶
主权项 一种基于城墙断面从LiDAR点云数据自动提取古城墙数据的方法,包括以下步骤:第一步、提取城墙待选区获取预定区域的机载LiDAR点云数据,从所述LiDAR点云数据中分离出地面点云数据,得到该预定区域的DEM数据和DSM数据,通过栅格计算从DSM数据中减去DEM数据得到归一化的DSM数据,即得到nDSM数据;从所述nDSM数据中滤除城墙附近的建筑物和植被,得到多个连通区域,其中面积最大的连通区域即为城墙待选区;第二步、从所述城墙待选区中找出城墙顶部构建三维体元坐标系,得到所述城墙待选区的三维体元格网,记录所有体元内部所含的LiDAR数据点,剔除没有LiDAR数据点的空体元后计算剩余每个体元的粗糙度;遍历所述城墙待选区所有的体元,若以每个体元为中心的3×3×3空间邻域中的相邻体元的粗糙度差值小于预设的第一粗糙度差值阈值,则该中心体元与相邻体元内的LiDAR数据点属于同一类别;计算各类别的体元中所有LiDAR数据点的平均高程值,其中平均高程值大于预设的高程阈值且体元个数最多的一类体元即为城墙顶部;每个体元的粗糙度的计算方法如下:假设一个体元中共有n个LiDAR数据点,h<sub>i</sub>为该体元中第i个LiDAR数据点的高程值,其中1≤i≤n;则该体元的粗糙度<img file="FDA0000941838190000011.GIF" wi="491" he="77" />式中<img file="FDA0000941838190000012.GIF" wi="323" he="67" />第三步、提取城墙顶部的三维中心线将城墙顶部的点云数据转换为面状要素,然后对所述面状要素进行细化和跟踪并矢量化后得到城墙顶部的二维中心线;对所述二维中心线进行等间距重采样得到多个采样点,按delaunay三角剖分算法找到每个采样点周围构成三角形的属于城墙顶部的三个LiDAR数据点,然后对上述三个LiDAR数据点的高程值进行线性内插得到每个采样点的高程值;将每个采样点赋予高程值后再矢量化从而得到城墙顶部的三维中心线;第四步、构建城墙断面空间格网将所述城墙待选区的LiDAR点云数据和所述三维中心线均投影至一个二维平面,沿所述三维中心线投影至该二维平面得到的城墙中心线按小于平均点间距的距离进行等间距重采样得到m个探测基点,依次是O<sub>1</sub>,O<sub>2</sub>,…,O<sub>m</sub>,m≥2,所述平均点间距是机载LiDAR点云数据在扫描测量时的采样间隔,是数据本身的一个属性,可以通过查看原始LiDAR数据获得;对每个探测基点O<sub>I</sub>,1≤I≤m,计算与探测基点O<sub>I</sub>邻近的探测基点O<sub>I‑1</sub>构成的直线L1,该直线L1为探测基点O<sub>I</sub>的探测基准线,与探测基准线L1垂直且交于O<sub>I</sub>点的垂线L2即为探测基点O<sub>I</sub>的断面;遍历投影至所述二维平面的城墙待选区所有LiDAR点云数据,每个到垂线L2的距离小于为断面厚度length的LiDAR数据点均属于所述探测基点O<sub>I</sub>的断面;构建探测基点O<sub>I</sub>的断面空间格网,令城墙断面体元的宽度width等于平均点间距,城墙断面体元的高度height为所述城墙顶部的LiDAR数据点的最大高度和最小高度之差;计算探测基点O<sub>I</sub>的断面上的每个LiDAR数据点到直线L1的平面距离d1,并根据该LiDAR数据点在直线L1的不同侧赋予flag值为1或‑1,从而得到该LiDAR数据点的行、列、层号(e,j,k)=(I,Int(flag*d1/width),Int((z‑Z<sub>I</sub>)/height)+Number),式中e是该LiDAR数据点在城墙断面体元格网中的行号,j是该LiDAR数据点在城墙断面体元格网的中的列号,k是该LiDAR数据点在城墙断面体元格网中的层号,number是用于保证k≥0的常数,z是该LiDAR数据点的高程值,Z<sub>I</sub>是探测基点O<sub>I</sub>的高程值;第五步、基于城墙断面格网提取城墙顶部、垛口和城墙侧面对每个探测基点O<sub>I</sub>进行横向探测,以探测基准线L1为基准在城墙断面格网内向两侧探测若探测的体元内有LiDAR数据点,则该体元为顶部体元,计算该体元的粗糙度,然后计算此体元与后一体元的粗糙度差值,若该粗糙度差值小于预设的第一粗糙度差值阈值,则后一体元也为顶部体元;若该粗糙度差值大于预设的第二粗糙度差值阈值,则后一体元为垛口体元,并向上探测下一体元,若下一体元内有LiDAR数据点,则该下一单元也为垛口体元;当探测到垛口体元后向外探测一个体元,若该体元内有LiDAR数据点,则该体元为顶部体元;若在同一个方向连续探测到两个或两个以上没有LiDAR数据点的空体元时,则到达顶部边缘,停止该方向扫描;对每个探测基点O<sub>I</sub>进行纵向探测,以探测基点O<sub>I</sub>所在层为基准往下移动一层,以纵向探测基准线L1为基准向两侧扫描探测,直至探测次数超过预定次数或者扫描到体元内有LiDAR点数据,则停止该侧扫描,内有LiDAR点数据的体元为城墙侧面;继续往下移动一层,重复向两侧扫描探测,直到探测基准线L1两侧的体元内均没有LiDAR数据点,则停止纵向探测。
地址 210023 江苏省南京市栖霞区仙林大道163号