swh:1:snp:e19303b5caf9fb6e591d1d985f0767020645282b
Raw File
Tip revision: 48149026cf02a353ab8abee7a8420d4196a9ad38 authored by Moye-mio on 06 April 2024, 16:36:01 UTC
Update README.md
Tip revision: 4814902
OutlierDetector.cpp
#include "pch.h"
#include "OutlierDetector.h"
#include <pcl/filters/statistical_outlier_removal.h>

using namespace core;

bool COutlierDetecter::run(const PC_t::Ptr& vCloud, int k, float vThres) {
    _EARLY_RETURN(vCloud->empty(), "Cloud is empty.", false);

    pcl::PointCloud<pcl::PointXYZ>::Ptr pCloud(new pcl::PointCloud<pcl::PointXYZ>);

    auto extractPositions = ([=](const PC_t::Ptr& vCloud, pcl::PointCloud<pcl::PointXYZ>::Ptr& voCloud) {
        for (const auto& p : *vCloud) {
            voCloud->emplace_back(pcl::PointXYZ(p.x, p.y, p.z));
        }
        }
    );

    extractPositions(vCloud, pCloud);

    pcl::StatisticalOutlierRemoval<pcl::PointXYZ> Detecter;
    Detecter.setInputCloud(pCloud);
    Detecter.setMeanK(k);
    Detecter.setStddevMulThresh(vThres);
    Detecter.filter(m_Inliers);
    Detecter.setNegative(true);
    Detecter.filter(m_Outliers);

   std::cout << "Inliers size: " << m_Inliers.size() << ", Outliers size: " << m_Outliers.size() << std::endl;

    return true;
}
back to top