Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <pcl/apps/modeler/statistical_outlier_removal_worker.h>
00038 #include <pcl/apps/modeler/parameter.h>
00039 #include <pcl/apps/modeler/parameter_dialog.h>
00040 #include <pcl/apps/modeler/cloud_mesh.h>
00041 #include <pcl/apps/modeler/cloud_mesh_item.h>
00042 #include <pcl/filters/statistical_outlier_removal.h>
00043
00044
00046 pcl::modeler::StatisticalOutlierRemovalWorker::StatisticalOutlierRemovalWorker(const QList<CloudMeshItem*>& cloud_mesh_items, QWidget* parent) :
00047 AbstractWorker(cloud_mesh_items, parent),
00048 mean_k_(NULL), stddev_mul_thresh_(NULL)
00049 {
00050 }
00051
00053 pcl::modeler::StatisticalOutlierRemovalWorker::~StatisticalOutlierRemovalWorker(void)
00054 {
00055 delete mean_k_;
00056 delete stddev_mul_thresh_;
00057 }
00058
00060 void
00061 pcl::modeler::StatisticalOutlierRemovalWorker::initParameters(CloudMeshItem *)
00062 {
00063 return;
00064 }
00065
00067 void
00068 pcl::modeler::StatisticalOutlierRemovalWorker::setupParameters()
00069 {
00070 mean_k_ = new IntParameter("Mean K", "The number of nearest neighbors to use for mean distance estimation", 8, 1, 1024, 1);
00071 stddev_mul_thresh_ = new DoubleParameter("Standard Deviation Multiplier", "The distance threshold will be equal to: mean + stddev_mult * stddev. Points will be classified as inlier or outlier if their average neighbor distance is below or above this threshold respectively.", 1.0, 0.1, 10, 0.1);
00072
00073 parameter_dialog_->addParameter(mean_k_);
00074 parameter_dialog_->addParameter(stddev_mul_thresh_);
00075
00076 return;
00077 }
00078
00080 void
00081 pcl::modeler::StatisticalOutlierRemovalWorker::processImpl(CloudMeshItem* cloud_mesh_item)
00082 {
00083 pcl::StatisticalOutlierRemoval<pcl::PointSurfel> sor;
00084 sor.setInputCloud(cloud_mesh_item->getCloudMesh()->getCloud());
00085 sor.setMeanK(*mean_k_);
00086 sor.setStddevMulThresh(*stddev_mul_thresh_);
00087
00088 CloudMesh::PointCloudPtr cloud(new CloudMesh::PointCloud());
00089 sor.filter(*cloud);
00090
00091 cloud_mesh_item->getCloudMesh()->getCloud() = cloud;
00092
00093 emitDataUpdated(cloud_mesh_item);
00094
00095 return;
00096 }