crop.h
Go to the documentation of this file.
1#pragma once
2
3#include <Eigen/Core>
4
5#include <pcl/PointIndices.h>
6#include <pcl/common/io.h>
7#include <pcl/point_cloud.h>
8
9#include <SimoxUtility/shapes/AxisAlignedBoundingBox.h>
10
11namespace visionx::tools
12{
13
14 template <typename PointCloudT>
15 pcl::PointIndices::Ptr
16 getCropIndices(const PointCloudT& inputCloud, Eigen::Vector3f min, Eigen::Vector3f max)
17 {
18 using PointT = typename PointCloudT::PointType;
19
20 const simox::AxisAlignedBoundingBox aabb(min, max);
21 pcl::PointIndices::Ptr indices(new pcl::PointIndices);
22 for (size_t i = 0; i < inputCloud.size(); ++i)
23 {
24 const PointT& p = inputCloud[i];
25 if (aabb.is_inside(p))
26 {
27 indices->indices.push_back(int(i));
28 }
29 }
30 return indices;
31 }
32
33 template <typename PointCloudT>
34 typename PointCloudT::Ptr
35 getCropped(const PointCloudT& inputCloud, Eigen::Vector3f min, Eigen::Vector3f max)
36 {
37 pcl::PointIndices::Ptr indices = getCropIndices(inputCloud, min, max);
38
39 typename PointCloudT::Ptr result(new PointCloudT);
40 pcl::copyPointCloud(inputCloud, *indices, *result);
41
42 return result;
43 }
44
45} // namespace visionx::tools
T min(T t1, T t2)
Definition gdiam.h:44
T max(T t1, T t2)
Definition gdiam.h:51
pcl::PointIndices::Ptr getCropIndices(const PointCloudT &inputCloud, Eigen::Vector3f min, Eigen::Vector3f max)
Definition crop.h:16
PointCloudT::Ptr getCropped(const PointCloudT &inputCloud, Eigen::Vector3f min, Eigen::Vector3f max)
Definition crop.h:35