我正在通过 pcl::CropBox (C++) 过滤云。正如 API 所建议的,有些方法采用最小和最大坐标,然后返回云的过滤索引。还有用于设置旋转、平移和变换的 API。
https://pointclouds.org/documentation/classpcl_1_1_crop_box_3_01pcl_1_1_p_c_l_point_cloud2_01_4.html
我尝试使用最小和最大坐标 API,当所有角度的框旋转为 0(即框与所有轴对齐)时,它工作正常。
但是当我将旋转与 setMin 和 setMax API 一起使用时,我在裁剪框过滤器中遇到了问题。当我们拥有的盒子被旋转时,我们如何使用其他 API。
以下是我掌握的信息:
- 盒子的质心值
- 以弧度和度为单位的框的旋转角度
- 长宽高
- 最小和最大坐标。
我没有找到 pcl 裁剪框的任何示例。
谁能建议我应该如何前进。
这是一些示例云
// Sample filtered cloud needed
PointCloudT::Ptr bodyFiltered (new PointCloudT);
pcl::CropBox<PointT> boxFilter(true);
boxFilter.setTranslation(Eigen::Vector3f(centroid_x, centroid_y, centroid_z));
// Roll, pitch and yaw are in radians.
boxFilter.setRotation(Eigen::Vector3f(annoDetails.roll, annoDetails.pitch, annoDetails.yaw));
boxFilter.setMin(Eigen::Vector4f(minMaxXCordinates.first, minMaxYCordinates.first, minMaxZCordinates.first, 1.0));
boxFilter.setMax(Eigen::Vector4f(minMaxXCordinates.second, minMaxYCordinates.second, minMaxZCordinates.second, 1.0));
boxFilter.setInputCloud(m_pCurrentSetCloud);
boxFilter.filter(*bodyFiltered);
std::vector<int> removedIndices = *(boxFilter.getRemovedIndices());
std::vector<int> wholeIndices = *(boxFilter.getIndices());