资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Python

点云二维高程属性格网投影python

Python 更新时间: 发布时间: 计算机考试归档 最新发布

点云二维高程属性格网投影python

点云二维高程属性格网投影

  • 1 原理
  • 2 代码

1 原理

关于点云投影其实三维点云投影成二维的栅格图像过程,传统的图像在python中通过固定行列的数组表示,数组中的每个数值为格网属性。其投影过程主要分为以下几步:

  1. 获取点云数据边界(Xmax,Ymax,Xmin,Ymin)
  2. 计算投影格网行列总数(Row,Col)
    需要注意点云坐标系,当坐标系的水平轴为X,则投影的列于X对应;同理,坐标系的纵轴为Y,则投影的行于Y对应。
    R o w = c e i l ( Y m a x − Y m i n s t e p ) C o l = c e i l ( X m a x − X m i n s t e p ) Row=ceil(frac{Y_{max}-Y_{min}}{step}) Col=ceil(frac{X_{max}-X_{min}}{step}) Row=ceil(stepYmax​−Ymin​​)Col=ceil(stepXmax​−Xmin​​)
    step: 格网间隔
  3. 计算当前点 P i ( x i , y i ) P_{i}(x_{i},y_{i}) Pi​(xi​,yi​)所在行列索引 ( r o w s i , c o l s i ) (rows_{i},cols_{i}) (rowsi​,colsi​)
    r o w s i = c e i l ( y i − Y m i n s t e p ) c o l s i = c e i l ( x i − X m i n s t e p ) rows_{i}=ceil(frac{y_{i} - Ymin} {step}) cols_{i}=ceil(frac{x_{i} - Xmin}{step}) rowsi​=ceil(stepyi​−Ymin​)colsi​=ceil(stepxi​−Xmin​)
  4. 为了方便准确获取当前点的格网位置,可以建立数组,每一行为[x,y,z,行索引,列索引],当然也可通过格网的行列索引为格网编号number,不同格网之间编号不同。上一步计算出每个点的行列索引,为其编号,能够快速定位格网序列,编号后建立数组,每一行为[x,y,z,编号]。
    n u m b e r i = ( r o w s i − 1 ) ∗ C o l + c o l s i number_{i}=(rows_{i} - 1) * Col + cols_{i} numberi​=(rowsi​−1)∗Col+colsi​

2 代码

将格网内点的平均高程作为格网属性值,生成均值高程属性图像。

def MeanAltitudeProjection(pcd,step):    points=np.asarray(pcd.points)    total=points.shape[0]    # 获取点云数据边界    x_max = max(points[:, 0])    x_min = min(points[:, 0])    y_max = max(points[:, 1])    y_min = min(points[:, 1])    # 计算格网行列数    Row = int(np.ceil((y_max - y_min) / step)) + 1    Col = int(np.ceil((x_max - x_min) / step)) + 1    img_meanH=np.zeros((Row,Col))    # 计算点所在行列    number = np.zeros(total)  # 该点对应的格网编号    for i in range(total):        rows = (int(np.ceil((points[i, 1] - y_min) / step)))        cols = (int(np.ceil((points[i, 0] - x_min) / step)))        number[i] = (rows - 1) * Col + cols    number_sort=sorted(number)    number_argSort=np.argsort(number)    begin=0    for i in range(total-1):        if number_sort[i]==number_sort[i+1]:  # 若前后点编号相同,视为同一格网            continue        else:            grids_points=points[number_argSort[begin:i+1]]            rows = int(np.ceil((grids_points[0, 1] - y_min) / step))            cols = int(np.ceil((grids_points[0, 0] - x_min) / step))            img_meanH[rows,cols]=np.mean(grids_points[:,2])        begin=i+1    return img_meanH

格网投影参考:马新江《一种基于几何特征的高速公路路面点云提取方法》

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1097865.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【点云二维高程属性格网投影python】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2