@@ -37,7 +37,8 @@ void FilterNoise::addArgs()
3737 argOutputFormat = &programArgs.add (" output-format" , " Output format (las/laz/copc)" , outputFormat);
3838
3939 argAlgorithm = &programArgs.add (" algorithm" , " Noise filtering algorithm to use: statistical or radius." , algorithm, " statistical" );
40-
40+ argRemoveNoisePoints = &programArgs.add (" remove-noise-points" , " Remove noise points from the output." , removeNoisePoints, false );
41+
4142 // radius args
4243 argRadiusMinK = &programArgs.add (" radius-min-k" , " Minimum number of neighbors in radius (radius algorithm only)." , radiusMinK, 2.0 );
4344 argRadiusRadius = &programArgs.add (" radius-radius" , " Radius (radius method only)." , radiusRadius, 1.0 );
@@ -96,7 +97,7 @@ bool FilterNoise::checkArgs()
9697}
9798
9899
99- static std::unique_ptr<PipelineManager> pipeline (ParallelJobInfo *tile, pdal::Options &noiseFilterOptions)
100+ static std::unique_ptr<PipelineManager> pipeline (ParallelJobInfo *tile, pdal::Options &noiseFilterOptions, bool removeNoisePoints )
100101{
101102 std::unique_ptr<PipelineManager> manager ( new PipelineManager );
102103
@@ -130,6 +131,13 @@ static std::unique_ptr<PipelineManager> pipeline(ParallelJobInfo *tile, pdal::Op
130131 }
131132
132133 last = &manager->makeFilter (" filters.outlier" , *last, noiseFilterOptions);
134+
135+ if (removeNoisePoints)
136+ {
137+ Options filter_opts;
138+ filter_opts.add (pdal::Option (" expression" , " Classification != 7" ));
139+ last = &manager->makeFilter ( " filters.expression" , *last, filter_opts);
140+ }
133141
134142 makeWriter (manager.get (), tile->outputFilename , last);
135143
@@ -180,7 +188,7 @@ void FilterNoise::preparePipelines(std::vector<std::unique_ptr<PipelineManager>>
180188
181189 tileOutputFiles.push_back (tile.outputFilename );
182190
183- pipelines.push_back (pipeline (&tile, noiseFilterOptions));
191+ pipelines.push_back (pipeline (&tile, noiseFilterOptions, removeNoisePoints ));
184192 }
185193 }
186194 else
@@ -189,7 +197,7 @@ void FilterNoise::preparePipelines(std::vector<std::unique_ptr<PipelineManager>>
189197 tile.inputFilenames .push_back (inputFile);
190198 tile.outputFilename = outputFile;
191199
192- pipelines.push_back (pipeline (&tile, noiseFilterOptions));
200+ pipelines.push_back (pipeline (&tile, noiseFilterOptions, removeNoisePoints ));
193201 }
194202}
195203
0 commit comments