English | 中文
This repository contains the python implementation of point cloud Re-Height Normalization (ReHN). The code is based on the paper:
Fu, B., Deng, L., Sun, W., He, H., Li, H., Wang, Y., Wang, Y., 2024. Quantifying vegetation species functional traits along hydrologic gradients in karst wetland based on 3D mapping with UAV hyperspectral point cloud. Remote Sens. Environ. 307, 114160. doi:10.1016/j.rse.2024.114160. https://www.sciencedirect.com/science/article/pii/S0034425724001718
- A python package
rehn
- A command line tool
rehn
- A sample point cloud data
samples/HX_sample_with_ground.ply
, from Guilin University of Technology, Fu Bolin's team.
You can simply use the command line tool for point cloud height normalization, or use the python package to integrate the height normalization into your own code.
If you have the ground point information of the point cloud, you can install it directly by:
pip install rehn
If you don't have the ground point information of the point cloud, you need to install the CSF dependency together:
pip install rehn[csf]
git clone https://github.com/DLW3D/ReHN.git
cd ReHN
pip install -e .
# pip install -e . -i https://pypi.mirrors.ustc.edu.cn/simple
Make sure you have add the python bin path to the system environment variable PATH. you can find it by:
- Windows:
where.exe python
- Linux:
which python
The python bin path may look like:
- Windows:
C:\Users\username\AppData\Local\Programs\Python\Python39\Scripts
- Linux:
/etc/miniconda3/envs/env_name/bin
Run the following command to temporarily add the python bin path to PATH:
- Windows:
set PATH=%PATH%;C:\Users\username\AppData\Local\Programs\Python\Python39\Scripts
- Linux:
export PATH=$PATH:/etc/miniconda3/envs/env_name/bin
Replace the path according to your actual situation
Run the following command to normalize the point cloud:
rehn -i samples/HX_sample_with_ground.ply -o samples/outputs/HXs_ReHN.ply -n samples/outputs/HXs_ReHN.npy
-i
or--pc_path
: Required: Path to the input point cloud (PLY format)-o
or--save_path
: Required: Path to save the output point cloud (PLY format)-m
or--dem_save_path
: Path to save the DEM (npy format), default=None
-mr
or--dem_resolution
: Resolution of the DEM, default=0.2
meters-f
or--ground_feature_name
: Name of the ground point feature in the point cloud, default=scalar_is_ground
- See more options by
rehn -h
from rehn import height_norm_f
height_norm_f('samples/HX_sample_with_ground.ply',
'samples/outputs/HXs_ReHN.ply',
'samples/outputs/HXs_ReHN.npy',)
or
from rehn import height_norm, count_dem
xyz = ... # Load point cloud data
ground_mask = ... # Load basic ground mask
norm_z, ground_mask = height_norm(xyz, ground_mask)
dem = count_dem(xyz, ground_mask)
- pykdtree
- cloth-simulation-filter (Optional: CSF algorithm. You need it if you don't have potential ground labels)
- numpy (If you need CSF,
numpy < 2
is required)
If you find this work useful, please consider citing the following paper:
@article{FU2024114160,
author = {Bolin Fu and Liwei Deng and Weiwei Sun and Hongchang He and Huajian Li and Yong Wang and Yeqiao Wang},
title = {Quantifying vegetation species functional traits along hydrologic gradients in karst wetland based on 3D mapping with UAV hyperspectral point cloud},
journal = {Remote Sensing of Environment},
year = {2024},
}