有了一个云pcl :: PointCloud <xyzrgb>,如何独立计算每个颜色层的直方图?

时间:2017-09-08 20:12:32

标签: c++ histogram point-cloud-library

我有一个使用pcl :: PointCloud :: Ptr的3d点云,我想计算每个颜色层R,G,B的直方图。
也许有一个类直接计算直方图?感谢

1 个答案:

答案 0 :(得分:0)

拥有pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud,一个计算每个颜色层直方图的解决方案如下

const int nbins=8;
const int ndim=3;
const Eigen::Vector3f maxrgb(255.0,255.0,255.0);

std::vector< std::vector<int> > histog(nbins, std::vector<int>(ndim));

Eigen::Vector3f divisor_rgb = maxrgb/(float)nbins;
for (int i=0; i< cloud->size() ; i++)
    Eigen::Vector3i tricolor = cloud->at(i).getRGBVector3i();

Eigen::Vector3f bin_tricolor = floor(tricolor.cast<float>().array()/divisor_rgb.array());
for (int k=0;k<ndim;k++)
    histog[(int)bin_tricolor(k,0)][k]++;