5 #include <Eigen/Geometry>
7 #include <pcl/PointIndices.h>
8 #include <pcl/common/io.h>
9 #include <pcl/point_cloud.h>
10 #include <pcl/point_types.h>
11 #include <pcl/point_types_conversion.h>
21 Eigen::Vector3f
pointCloudMedian(
const pcl::PointCloud<pcl::PointXYZRGBA>& cloud,
22 const pcl::PointIndices&
indices = {});
26 const pcl::PointIndices&
indices,
27 Eigen::Vector3f
center = Eigen::Vector3f::Zero());
29 Eigen::Vector3f
center = Eigen::Vector3f::Zero());
35 pcl::PointIndicesPtr
getPlaneInliers(
const pcl::PointCloud<pcl::PointXYZRGBA>& cloud,
41 const pcl::PointXYZHSV& rhs,
42 const Eigen::Vector3f& hsvWeights = Eigen::Vector3f::Ones());
44 const Eigen::Vector3f& rhs,
45 const Eigen::Vector3f& hsvWeights = Eigen::Vector3f::Ones());
48 Eigen::Vector3f
hsvMean(
const pcl::PointCloud<pcl::PointXYZHSV>& hsvCloud,
49 const std::vector<int>&
indices);
51 template <
class Po
intRGB>
53 hsvMean(
const pcl::PointCloud<PointRGB>& rgbCloud,
const std::vector<int>&
indices)
55 pcl::PointCloud<pcl::PointXYZHSV> hsvCloud;
56 pcl::PointCloudXYZRGBAtoXYZHSV(rgbCloud, hsvCloud);
60 template <
class Po
intT>
63 const std::vector<int>&
indices,
64 pcl::PointCloud<PointT>& output)
68 output.reserve(
input.size() - indexSet.size());
69 for (
size_t i = 0; i <
input.size(); ++i)
71 if (indexSet.count(
int(i)) == 0)
73 output.push_back(
input[i]);
78 template <
class Po
intT>
79 typename pcl::PointCloud<PointT>::Ptr
81 const std::vector<int>&
indices)
83 typename pcl::PointCloud<PointT>::Ptr output(
new pcl::PointCloud<PointT>);
88 template <
class Po
intT>
89 typename pcl::PointCloud<PointT>::Ptr
92 typename pcl::PointCloud<PointT>::Ptr output(
new pcl::PointCloud<PointT>);
97 template <
class Po
intT>
98 typename pcl::PointCloud<PointT>::Ptr
101 typename pcl::PointCloud<PointT>::Ptr output(
new pcl::PointCloud<PointT>);
109 return lhs.indices.size() > rhs.indices.size();
118 template <
class Po
intT>
122 const auto isNan = [](
const PointT& p) ->
bool {
return std::isnan(p.z); };
124 pc.points.erase(std::remove_if(
pc.points.begin(),
pc.points.end(), isNan),
pc.points.end());
127 pc.width =
pc.points.size();