Skip to content

Commit

Permalink
Adapt ground kernel to pmf filter changes
Browse files Browse the repository at this point in the history
* Classify option is no longer needed, PMF always classifies points
* Extract option is retained, but is now implemented by adding a range filter
  • Loading branch information
chambbj committed Apr 27, 2017
1 parent 8de8c4c commit 6629004
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 61 deletions.
113 changes: 54 additions & 59 deletions kernels/GroundKernel.cpp
@@ -1,47 +1,47 @@
/******************************************************************************
* Copyright (c) 2011, Michael P. Gerlek (mpg@flaxen.com)
* Copyright (c) 2014-2015, Bradley J Chambers (brad.chambers@gmail.com)
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following
* conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided
* with the distribution.
* * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
* names of its contributors may be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
****************************************************************************/
* Copyright (c) 2011, Michael P. Gerlek (mpg@flaxen.com)
* Copyright (c) 2014-2017, Bradley J Chambers (brad.chambers@gmail.com)
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following
* conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided
* with the distribution.
* * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
* names of its contributors may be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
****************************************************************************/

#include "GroundKernel.hpp"

#include <pdal/KernelFactory.hpp>
#include <pdal/Options.hpp>
#include <pdal/pdal_macros.hpp>
#include <pdal/PointTable.hpp>
#include <pdal/PointView.hpp>
#include <pdal/Stage.hpp>
#include <pdal/StageFactory.hpp>
#include <pdal/pdal_macros.hpp>

#include <memory>
#include <string>
Expand All @@ -51,25 +51,21 @@ namespace pdal
{

static PluginInfo const s_info = PluginInfo("kernels.ground", "Ground Kernel",
"http://pdal.io/apps/ground.html" );
"http://pdal.io/apps/ground.html");

CREATE_STATIC_PLUGIN(1, 0, GroundKernel, Kernel, s_info)

std::string GroundKernel::getName() const { return s_info.name; }
std::string GroundKernel::getName() const
{
return s_info.name;
}

GroundKernel::GroundKernel()
: Kernel()
, m_inputFile("")
, m_outputFile("")
, m_maxWindowSize(33)
, m_slope(1)
, m_maxDistance(2.5)
, m_initialDistance(0.15)
, m_cellSize(1)
, m_classify(true)
, m_extract(false)
, m_approximate(false)
{}
: Kernel(), m_inputFile(""), m_outputFile(""), m_maxWindowSize(33),
m_slope(1), m_maxDistance(2.5), m_initialDistance(0.15), m_cellSize(1),
m_extract(false)
{
}

void GroundKernel::addSwitches(ProgramArgs& args)
{
Expand All @@ -80,34 +76,33 @@ void GroundKernel::addSwitches(ProgramArgs& args)
args.add("max_distance", "Max distance", m_maxDistance, 2.5);
args.add("initial_distance", "Initial distance", m_initialDistance, .15);
args.add("cell_size", "Cell size", m_cellSize, 1.0);
args.add("classify", "Apply classification labels?", m_classify);
args.add("extract", "extract ground returns?", m_extract);
args.add("approximate,a", "use approximate algorithm? (much faster)",
m_approximate);
args.add("approximate", "Use approximate PMF?", m_approximate, true);
}

int GroundKernel::execute()
{
PointTable table;

Stage& readerStage(makeReader(m_inputFile, ""));

Options groundOptions;
groundOptions.add("max_window_size", m_maxWindowSize);
groundOptions.add("slope", m_slope);
groundOptions.add("max_distance", m_maxDistance);
groundOptions.add("initial_distance", m_initialDistance);
groundOptions.add("cell_size", m_cellSize);
groundOptions.add("classify", m_classify);
groundOptions.add("extract", m_extract);
groundOptions.add("approximate", m_approximate);

Stage& groundStage = makeFilter("filters.pmf", readerStage,
groundOptions);
Options rangeOptions;
rangeOptions.add("limits", "Classification[2:2]");

Stage& readerStage(makeReader(m_inputFile, ""));
Stage& groundStage = makeFilter("filters.pmf", readerStage, groundOptions);

// setup the Writer and write the results
Stage& writer(makeWriter(m_outputFile, groundStage, ""));
Stage* rangeStage = &groundStage;
if (m_extract)
rangeStage = &makeFilter("filters.range", groundStage, rangeOptions);

Stage& writer(makeWriter(m_outputFile, *rangeStage, ""));
writer.prepare(table);
writer.execute(table);

Expand Down
3 changes: 1 addition & 2 deletions kernels/GroundKernel.hpp
@@ -1,6 +1,6 @@
/******************************************************************************
* Copyright (c) 2013, Howard Butler (hobu.inc@gmail.com)
* Copyright (c) 2014-2015, Brad Chambers (brad.chambers@gmail.com)
* Copyright (c) 2014-2017, Brad Chambers (brad.chambers@gmail.com)
*
* All rights reserved.
*
Expand Down Expand Up @@ -71,7 +71,6 @@ class PDAL_DLL GroundKernel : public Kernel
double m_maxDistance;
double m_initialDistance;
double m_cellSize;
bool m_classify;
bool m_extract;
bool m_approximate;
};
Expand Down

0 comments on commit 6629004

Please sign in to comment.