有云pcl::PointCloud<xyzrgb>,如何独立计算每个颜色层的直方图?
Having a cloud pcl::PointCloud<xyzrgb>, how to compute the histogram of each color layer independently?
我有一个使用 pcl::PointCloud::Ptr 的 3d 点云,我想计算每个颜色层 R、G、B 的直方图。
也许有一个 class 可以直接计算直方图?谢谢
有了 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]++;
我有一个使用 pcl::PointCloud::Ptr 的 3d 点云,我想计算每个颜色层 R、G、B 的直方图。
也许有一个 class 可以直接计算直方图?谢谢
有了 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]++;