PCL快速双边滤波(fast_bilateral、fast_bilateral_omp)

PCL专栏目录及须知-优快云博客

1.原理

双边滤波的速度较慢。快速双边滤波使用近似计算的方法(下采样)提升双边滤波的速度。

(1)对有序点云进行下采样

(2)同双边滤波一样,也是先计算空间领域,得到的空间领域内的所有点。

(3)在该领域范围内,计算操作点和空间邻域内所有点的强度差异是否在高斯权重的范围内,如果不在高斯权重的范围内,那么使用高斯权重平滑强度。

(4)得到最终结果。

2.使用场景

对点云进行强度的降噪平滑

3.注意事项

(1)输入点云必须是有序点云

(2)fast_bilateral同fast_bilateral_omp区别在于多了一个线程加速的功能,fast_bilateral_omp为fast_bilateral的子类。

fast_bilateral_omp类名为:FastBilateralFilterOMP

其中FastBilateralFilterOM特有的方法如下,参数为线程数。

setNumberOfThreads()

4.关键函数

(1)设置空间邻域的标准差(也就是高斯权重计算的那个窗口大小/邻域半径);用于确定空间邻域。

setSigmaS()

(2)设置强度邻域的标准差;用于确定当前领域内强度的变化权重。

setSigmaR()

5.代码

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/fast_bilateral.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>

int main()
{
    /****************快速双边滤波********************/
    // 原始点云
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
    pcl::io::loadPCDFile("D:/code/csdn/data/kmeansTest.pcd", *cloud);   // 加载原始点云数据
    // 结果点云
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>);
    
    // 快速双边滤波
    pcl::FastBilateralFilter<pcl::PointXYZRGB> filters;
    filters.setInputCloud(cloud);
    filters.setSigmaS(0.1);                                                     // 设置空间邻域的标准差(也就是高斯权重计算的那个窗口大小)
    filters.setSigmaR(0.3);                                                     // 设置强度邻域的标准差(也就是判断领域内点的强度差异是不是在一定范围内,在的话不处理,不在的话滤波)
    filters.filter(*cloud_filtered);                                            // 计算

    /****************展示********************/
    boost::shared_ptr<pcl::visualization::PCLVisualizer> view_raw(new pcl::visualization::PCLVisualizer("raw"));
    pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> raw_rgb(cloud);
    view_raw->addPointCloud<pcl::PointXYZRGB>(cloud, raw_rgb, "raw cloud");
    view_raw->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "raw cloud");

    boost::shared_ptr<pcl::visualization::PCLVisualizer> view_filtered(new pcl::visualization::PCLVisualizer("filter"));
    pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> filtered_rgb(cloud);
    view_filtered->addPointCloud<pcl::PointXYZRGB>(cloud_filtered, filtered_rgb, "filtered cloud");
    view_filtered->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "filtered cloud");

    while (!view_raw->wasStopped())
    {
        view_raw->spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    }
    while (!view_filtered->wasStopped())
    {
        view_filtered->spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    }

    return 0;
}

6.结果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值