2020-10-16 PCL给点云加噪声+错误笔记

该博客介绍了如何在PCL中为点云数据添加随机噪声和高斯噪声。通过使用智能指针和boost库,实现对点云每个维度的随机偏移,从而模拟现实世界中的测量误差。文章提供了详细的代码示例,包括设置噪声参数和执行噪声添加操作。
摘要由CSDN通过智能技术生成

2020-10-16 pcl给点云加噪声

想学习滤波方法和原理
转成学习加噪声,尝试随机噪声和高斯噪声
但是点云指针Ptr和点云不能直接相加,需要转换
ptr→point cloud:cloud=*cloud——ptr
point cloud→ptr:cloud_ptr=cloud.makeShared()
可是即便类型一致,直接相加两个点云还是会得到点云的拼接
方块是随机点云构成的噪声,没能加到坐标上,只是索引拼接在原有点云
这是添加点云噪声的办法
(1条消息) PCL 添加噪声_josslyn的博客-CSDN博客 https://blog.csdn.net/josslyn/article/details/79920733
智能指针是可以直接相加的,而且发现了一个问题(运行中间出现absort()和!px=0报错)的解决办法:
进入添加点云噪声的循环之前,定义点云类型应当是带有new的智能指针

void addGaussnoise(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, pcl::PointCloud<pcl::PointXYZ>::Ptr icloud, size_t miu, size_t sigma)
{
    icloud->points.resize(cloud->points.size());//将点云的cloud的size赋值给噪声 
    icloud->header = cloud->header;
    icloud->width = cloud->width;
    icloud->height = cloud->height;

    boost::mt19937 zhongzi;
    zhongzi.seed(static_cast<unsigned int>(time(0)));
    boost::normal_distribution<> nd(miu, sigma);
    boost::variate_generator<boost::mt19937&, boost::normal_distribution<>> ok(zhongzi, nd);
    for (size_t i = 0; i < cloud->size(); ++i)
    {
        icloud->points[i].x = cloud->points[i].x + static_cast<float>(ok());
        icloud->points[i].y = cloud->points[i].y + static_cast<float>(ok());
        icloud->points[i].z = cloud->points[i].z + static_cast<float>(ok());
    }
    return;
}
int main(int argc, char** argv)
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 创建点云(指针)
    readtxt("123.txt", cloud);//自定义函数
    std::cout << "正确查找文件" << std::endl;

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloudfinal(new pcl::PointCloud<pcl::PointXYZ>);
    //func new(Type) *Type
    //它的作用是给一个类型分配内存,并返回指向这个类型的指针。
    //而直接声明一个类型虽然也分配了内存,但是返回的不是指针
    size_t a = 0;
    size_t b = 1;
    addGaussnoise(cloud, cloudfinal, 0, 1);

    showAcloud(cloud, cloudfinal);//自定义函数
}

玫色是加了噪声之后的点云,绿色为原点云
玫色是加了噪声之后的点云,绿色为原点云

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值