Add rasterize script in the package
This commit is contained in:
parent
a370d17dd5
commit
99b68be4ca
@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"global": {
|
|
||||||
"resolution": 1,
|
|
||||||
"interpolation": "idw",
|
|
||||||
"out_dir": "./results"
|
|
||||||
},
|
|
||||||
"rasters": [
|
|
||||||
{
|
|
||||||
"feature": "elevation",
|
|
||||||
"bin_structure": "voxel",
|
|
||||||
"bin_method": "mean",
|
|
||||||
"squash_method": ["top", "bottom", "std"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"feature": "elevation",
|
|
||||||
"bin_structure": "pixel",
|
|
||||||
"bin_method": "mean"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bin_structure": "pixel",
|
|
||||||
"bin_method": "density"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"feature": "num_returns",
|
|
||||||
"bin_structure": "pixel",
|
|
||||||
"bin_method": "mode"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
2
idefix/tools/rasterize-lidar.py
Executable file → Normal file
2
idefix/tools/rasterize-lidar.py
Executable file → Normal file
@ -16,7 +16,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
import idefix as ix
|
import idefix as ix
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='Compute features rasters from LiDAR point cloud.',
|
parser = argparse.ArgumentParser(description='Compute features rasters from .npz point cloud.',
|
||||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
epilog="""
|
epilog="""
|
||||||
The config file can contain any parameters of the
|
The config file can contain any parameters of the
|
||||||
|
|||||||
99
idefix/tools/rasterize.py
Executable file
99
idefix/tools/rasterize.py
Executable file
@ -0,0 +1,99 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# file rasterize-lidar.py
|
||||||
|
# author Florent Guiotte <florent.guiotte@irisa.fr>
|
||||||
|
# version 0.0
|
||||||
|
# date 18 févr. 2021
|
||||||
|
"""Create raster of LiDAR features.
|
||||||
|
|
||||||
|
Use npz point clouds from Idefix.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import argparse
|
||||||
|
from multiprocessing import Pool
|
||||||
|
from tqdm.auto import tqdm
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import idefix as ix
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Compute features rasters from LiDAR point cloud.',
|
||||||
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
|
epilog="""
|
||||||
|
The config file can contain any parameters of the
|
||||||
|
idefix.helpers.rasterize function in a json file.
|
||||||
|
|
||||||
|
You can define 'global' parameters (for all the rasters) and raster
|
||||||
|
specific parameters in a list 'rasters'.
|
||||||
|
|
||||||
|
See the following `config.json` example file:
|
||||||
|
|
||||||
|
{
|
||||||
|
"global": {
|
||||||
|
"resolution": 5,
|
||||||
|
"interpolation": "idw",
|
||||||
|
"out_dir": "./results"
|
||||||
|
},
|
||||||
|
"rasters": [
|
||||||
|
{
|
||||||
|
"feature": "elevation",
|
||||||
|
"bin_structure": "voxel",
|
||||||
|
"bin_method": "mean",
|
||||||
|
"squash_method": ["top", "bottom", "std"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"feature": "elevation",
|
||||||
|
"bin_structure": "pixel",
|
||||||
|
"bin_method": "mean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bin_structure": "pixel",
|
||||||
|
"bin_method": "density"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"feature": "num_returns",
|
||||||
|
"bin_structure": "pixel",
|
||||||
|
"bin_method": "mode"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
""")
|
||||||
|
|
||||||
|
parser.add_argument('-c', '--config', type=str, help='json file to setup the rasterization processes', dest='c')
|
||||||
|
parser.add_argument('-n', '--nprocess', type=int, help='number of child processes to use', default=1, dest='n')
|
||||||
|
parser.add_argument('in_dir', type=str, help='the path to the point cloud directory')
|
||||||
|
parser.add_argument('out_dir', type=str, help='path to output raster results')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
def _map_rasterize(kwargs):
|
||||||
|
return ix.helpers.rasterize(**kwargs)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
in_dir = Path(args.in_dir)
|
||||||
|
out_dir = Path(args.out_dir)
|
||||||
|
out_dir.mkdir(exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
|
pc_files = list(in_dir.glob('*.npz'))
|
||||||
|
|
||||||
|
|
||||||
|
config = {'global': {'out_dir': out_dir}}
|
||||||
|
config |= json.load(open(args.c)) if args.c else {}
|
||||||
|
|
||||||
|
globalc = config['global']
|
||||||
|
rasters = config['rasters'] if 'rasters' in config else [{}]
|
||||||
|
|
||||||
|
queue = []
|
||||||
|
for pc_file in pc_files:
|
||||||
|
for raster in rasters:
|
||||||
|
job = globalc.copy()
|
||||||
|
job |= raster
|
||||||
|
job |= {'pc_file': pc_file}
|
||||||
|
queue += [job]
|
||||||
|
|
||||||
|
pool = Pool(processes=args.n)
|
||||||
|
for _ in tqdm(pool.imap_unordered(_map_rasterize, queue), total=len(queue)):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
7
setup.py
7
setup.py
@ -15,7 +15,7 @@ with open('README.md', 'r') as fh:
|
|||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name='idefix',
|
name='idefix',
|
||||||
version='0.1.5',
|
version='0.2.0',
|
||||||
description='Utils and processing pipelines for LiDAR point clouds',
|
description='Utils and processing pipelines for LiDAR point clouds',
|
||||||
author='Florent Guiotte',
|
author='Florent Guiotte',
|
||||||
author_email='florent.guiotte@uhb.fr',
|
author_email='florent.guiotte@uhb.fr',
|
||||||
@ -23,7 +23,10 @@ setuptools.setup(
|
|||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
long_description_content_type='text/markdown',
|
long_description_content_type='text/markdown',
|
||||||
packages=['idefix', 'idefix.tools'],
|
packages=['idefix', 'idefix.tools'],
|
||||||
entry_points = {'console_scripts':['txt2npz = idefix.tools.txt_to_npz:main',]},
|
entry_points = {'console_scripts':[
|
||||||
|
'txt2npz=idefix.tools.txt_to_npz:main',
|
||||||
|
'rasterize=idefix.tools.rasterize:main',
|
||||||
|
]},
|
||||||
classifiers=[
|
classifiers=[
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'License :: OSI Approved',
|
'License :: OSI Approved',
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user