0

我正在通过 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。

以下是我掌握的信息:

  1. 盒子的质心值
  2. 以弧度和度为单位的框的旋转角度
  3. 长宽高
  4. 最小和最大坐标。

我没有找到 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());

           
4

0 回答 0