基于Python实现JSON点云数据的3D可视化与过滤

基于Python实现JSON点云数据的3D可视化与过滤


一、前言

点云数据是三维空间中点的集合,广泛应用于计算机视觉、机器人导航和3D建模等领域。其核心在于通过大量离散点描述物体的几何形状。本文的代码旨在解决以下问题:

  1. 如何从JSON格式中高效读取点云数据;
  2. 如何利用Python可视化工具展示点云分布;
  3. 如何对点云数据进行简单过滤(如Z轴值筛选)。

通过该代码,用户可以快速生成点云分布图,并分析不同转速比下的点云特征。


二、整体架构流程

  1. 模块划分

    • Batch_reading:批量读取JSON文件并绘制点云。
    • single_reading:单个文件读取、过滤并绘制3D/2D点云。
  2. 核心流程

    • 数据读取

      with open(f'D:/.../Orthogonal_axis_motor_point_cloud_data_{
               num+1}.json', 'r') as file:
          points_data = json.load(file)
      

      使用json.load读取JSON文件,将点云数据加载为Python对象。

    • 数据处理

      points_array = np.array(points_data)
      

      将点云数据转换为NumPy数组,便于后续操作。

    • 3D绘图

      fig = plt.figure()
      ax = fig.add_subplot(111, projection='3d')
      ax.scatter(points_array[:, 0], points_array[:, 1], points_array[:, 2], c='b', marker='o', s=5)
      

      使用Matplotlib绘制3D点云,支持动态标题和网格线显示。

    • 过滤与2D投影

      z_0 = 15000 * np.tan(-np.pi / 18)
      points_array = points_array[points_array[:, 2] >= z_0]
      

      基于Z轴值过滤点云数据,并支持2D投影展示。


三、技术细节

  1. JSON文件读取
    json包如下:

    [
     [
         0.0,
         49.99999999999999,
         19.20832241028353
     ],
     [
         0.2277464405828954,
         49.99948131289765,
         19.2062623555502
     ],
     [
         0.45542715698783337,
         49.99792581802448,
         19.20008297879511
     ],
     [
         0.6829764678185707,
         49.995335213841756,
         19.18978664134152
     ],
     [
         0.9103287771569357,
         49.991712328319785,
         19.1753772753
### 使用高分七号激光点云数据创建DEM #### 数据准备 为了利用高分七号卫星的激光点云数据生成数字高程模型(DEM),首先需要获取并整理这些原始数据。通常情况下,这类数据会以LAS或LAZ文件格式提供。确保下载的数据覆盖目标区域,并且质量良好。 #### 预处理阶段 在正式进入建模之前,需对点云数据执行必要的预处理操作: - **去噪**:去除异常值和噪声点,这一步骤对于保证最终地形表示准确性至关重要。 - **分类**:区分地面点其他类型的特征点(如建筑物、植被)。此过程有助于更精确地提取地表形态信息[^1]。 ```bash lasnoise -i input.las -o filtered.las lastools/bin/lasclassify -i filtered.las -o classified.las ``` #### DEM生产流程 完成上述准备工作之后,可以按照如下步骤来构建DEM: ##### 提取地面点 仅保留标记为地面类别的点用于后续计算。通过专门软件(例如PDAL, LAStools)筛选特定类别编号下的记录。 ```bash pdal pipeline ground_extraction.json ``` 其中`ground_extraction.json`定义了一个简单的管道配置,指定输入输出路径以及过滤条件。 ##### 网格化插值 将经过滤后的离散坐标转换成规则网格形式,在此基础上实施内插算法填补空白处的高度值。常用的有反距离加权法(IDW),克里金(Kriging)等方法。 ```python import numpy as np from scipy.interpolate import griddata def interpolate_dem(points, values, xi, method='linear'): """Interpolate elevation at target locations.""" zi = griddata(points, values, xi, method=method) return zi # Example usage with synthetic data points and coordinates points = ... # (N, 2) array of point coordinates [[x,y],...] values = ... # N-length vector containing elevations corresponding to each coordinate pair above xi = ... # MxL meshgrid representing the desired output resolution dem = interpolate_dem(points, values, xi) ``` ##### 输出成果 最后把得到的结果保存到标准栅格图像文件中,比如GeoTIFF格式,便于进一步可视化展示或是集成至其他地理信息系统(GIS)平台进行综合分析。 ```bash gdal_translate -of GTiff -a_srs EPSG:4326 dem.asc dem.tif ``` 以上即是从高分辨率遥感传感器获得的LiDAR扫描资料转化为连续表面描述的一般工作流概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值