From d722ffcc58336bb3dad271ec4586ead77d6509c2 Mon Sep 17 00:00:00 2001 From: Maciej Wielgosz <maciej.wielgosz@nibio.no> Date: Tue, 29 Aug 2023 11:04:35 +0200 Subject: [PATCH] implemented low vegatation removal in folders --- .../distance_filtering_dem_based_in_folder.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 nibio_preprocessing/distance_filtering_dem_based_in_folder.py diff --git a/nibio_preprocessing/distance_filtering_dem_based_in_folder.py b/nibio_preprocessing/distance_filtering_dem_based_in_folder.py new file mode 100644 index 0000000..e47d2dc --- /dev/null +++ b/nibio_preprocessing/distance_filtering_dem_based_in_folder.py @@ -0,0 +1,56 @@ +import argparse +import os +from glob import glob +from tqdm import tqdm +from joblib import Parallel, delayed + +from nibio_preprocessing.distance_filtering_dem_based import DistanceFilteringDemBased # Import your existing class + +def process_file(las_file, DISTANCE, OUTPUT_FOLDER, VERBOSE): + if VERBOSE: + print(f"Processing {las_file}...") + + # Determine the output file path + filename = os.path.basename(las_file) + filename = filename.replace('.las', '_filtered.las') + output_las_file = os.path.join(OUTPUT_FOLDER, filename) + + # Run the distance filtering + distance_filtering = DistanceFilteringDemBased( + distance=DISTANCE, + input_las_file_path=las_file, + output_las_file_path=output_las_file, + verbose=VERBOSE + ) + distance_filtering.run() + + if VERBOSE: + print(f"Filtered {las_file} and saved to {output_las_file}") + +if __name__ == '__main__': + # Command-line argument parser + parser = argparse.ArgumentParser(description='Batch processing of distance filtering based on DEM') + parser.add_argument('-d', '--distance', help='Distance in meters e.g. 0.5', default=0.5, required=False, type=float) + parser.add_argument('-i', '--input_folder', help='Input folder containing LAS files', required=True) + parser.add_argument('-o', '--output_folder', help='Output folder to save filtered LAS files', required=True) + parser.add_argument('-v', '--verbose', action='store_true', help="Print information about the process") + + args = vars(parser.parse_args()) + + DISTANCE = args['distance'] + INPUT_FOLDER = args['input_folder'] + OUTPUT_FOLDER = args['output_folder'] + VERBOSE = args['verbose'] + + # Make sure output folder exists + if not os.path.exists(OUTPUT_FOLDER): + os.makedirs(OUTPUT_FOLDER) + + # List all LAS files in the input folder + las_files = glob(os.path.join(INPUT_FOLDER, '*.las')) + + # Run parallel processing using joblib + Parallel(n_jobs=-1)(delayed(process_file)(las_file, DISTANCE, OUTPUT_FOLDER, VERBOSE) for las_file in tqdm(las_files)) + + if VERBOSE: + print("Batch processing complete.") -- GitLab