点云双边滤波

news2024/10/6 16:16:42

双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、局部的特点。双边滤波器的好处是可以做边缘保存。

将双边滤波应用到点云中,其算法流程如下:
在这里插入图片描述

%% 双边滤波
 
clear all
 
%% 生成带噪声的点云
gv = 0:0.01:1;
[X,Y] = meshgrid(gv,gv);
% X(:)的意思是把矩阵转换为一行
p = [X(:),Y(:),0.5*ones(numel(X),1)];
% 生成噪声,随机生成500个噪声点
noise = rand(500, 3);
% 合并,p的矩阵为n*3
p = [p;noise];
clear X Y noise gv
% pcshow(p)
 
%% 计算法向量
% r半径搜索,单位m
r = 1;
% 搜索得到全部的r内临近点
[idx,d] = rangesearch(p,p,r,'Distance','euclidean','NSMethod','kdtree'); 
 
% 可以通过pcnormals实现法向量的提取,这个是matlab2019b函数自带的法向量计算函数
% p = pointCloud(p); % p需要先转换成matlab读取的格式
% vec = pcnormals(p); % 这样就可以计算法向量,是通过最邻近点计算的,默认是8个临近点
% p = p.Location; % p还原数组格式
 
% Reig为按照圆搜索邻近点计算法向量,博主自写的函数。
[~,~,~,~,~,vec] = Reig(p, r);
 
 
% 权重因子
% sum_w = 0;
% sum_pr = 0;
% pd为每个点到其邻近点的影响因子
pd = r;
% 每个点到临近点法式的影响因子
% pn = 0.5;
% 循环计算每个点的权重
for i = 1:length(p(:,1))
    % 权重因子
    sum_w = 0;
    sum_pr = 0;
    % 提取当前点
    a = p(i,:);
    % 得到当前点r范围内的点
    curp = idx(i,:);
    % cell转换为数组mat
    curp = cell2mat(curp);
    % 第一个索引是自己,所以去除
    curp = curp(:,2:end);
    % 求取临近点距离标准差
    didx = d(i,:);
    didx = cell2mat(didx);
    didx = didx(:,2:end);
    pn = std(didx);
    % 搜索索引点
    idxpoint = p(curp,:);
    % 循环领域内的点
    for j = 1:length(curp)
        % 领域点的当前点
        b = idxpoint(j,:);
        % 空间权重之一
        dd = norm(b-a);
        % 空间权重之二
        dn = dot(b-a,vec(i,:));
        %
        w = exp(-dd^2/(2*pd^2))*exp(-dn^2/(2*pn^2));
        %
        sum_pr = sum_pr + w * dn;
        %
        sum_w = sum_w + w;
    end
    qp = sum_pr/sum_w;
    p1(i,:) = p(i,:) + qp * vec(i,:);
end
 
% qp = sum_pr/sum_w;
% % 平滑数据处理
% for i = 1:length(p(:,1))
%     p1(i,:) = p(i,:) + qp * vec(i,:);
% end
pcshow(p1)

下图是生成的带噪声的数据:
在这里插入图片描述
在这里插入图片描述
经过双边滤波过后:
在这里插入图片描述
在这里插入图片描述
双边滤波原文“The Bilateral Filter for Point Clouds",作者为 Julie Digne、 Carlo Franchis。由于双边滤波原理简单,其实现过程并不复杂,因此本文不对其原理进行详细说明和解释,有兴趣的小伙伴可以直接下载论文进行详细阅读。本文旨在分析双边滤波的适应范围及其不足之处。

下面直接给出论文中单点更新的方法:
在这里插入图片描述

通过单点更新公式可知,更新点为原始点在法线方向上的移动。作者在此处进行了说明,通过半径搜索得到的邻域点集进行法线估计,法线无需进行定向,其原因在于邻域点与原始点构成的向量,在与法线进行点乘时已经包含了原始点需要移动的正确方向(感兴趣的同学,可以在纸上简单的画一下,就会明白)。

现在考虑两个权重项,距离权重、法线方向投影模长权重,在整个算法的伪代码中作者给出了权重的计算方法:

在这里插入图片描述
通过公式可知,作者使用两个高斯分布,其中距离越近权重越大,反之,距离越远权重越小。关于法线方向投影模长权重亦是如此。权重的作用在于用来保证局部点云即能平滑又不失其特征,故而使距离远,法线方向上投影模长大的点权重变小。

在本人“点云法线计算”一文中对法线的计算进行了说明,由该文可知,法线的估算采用的是平面方程。故而对双边滤波而言其平滑模型为平面模型,因此使用该方法进行平滑时,无论怎么调节参数其本质都不会改变。因此在使用该方法进行平滑时,对于边、角、特征锐利之处都会被袜平,对于要求平滑前后变化较小且特征保持良好的需求而言,双边滤波因此失去了适用性。其实对于局部点云为非平面,采用平面估计法线已经失去了局部的特征。

为此有学者采用距离权重的方式修改点云法线计算过程中的协方差,来提高法线估计的准确性。当然采用该方法会有一些改进,但是仍旧改变不了其本质因此上述现象仍旧会存在。采用加权协方差计算出的整体模型法线过渡不均匀,会使整体模型平滑效果变差。

在本人实践经验中,目前只有国外的GeoMagic的平滑效果最佳、细节保持最好。有兴趣的小伙伴可以查看其专利,专利中给出了其平滑的策略和方法,采用法线协方差分解后特征值度量的分类方法进行平滑,其中采用平面方程,二次曲面方程,圆锥曲线方程进行拟合。这里需要指出的是,分类后类与类的接缝处会出现台阶,如何对其进行处理是一个相当棘手的问题,显然GeoMagic的处理方法很到位。同样需要说明的是本人按二次曲面拟合方法进行了局部区域点云平滑实验,不管是计算速度上还是效果上都不如GeoMagic,当然比双边滤波要好很多,所以猜测专利给出的是一种方法其实际使用方法并不是专利中的,又或只是部分,也有可能是本人实现错误。

参考文献:
https://blog.csdn.net/qq_33029733/article/details/106909683
https://blog.csdn.net/qq_39632121/article/details/119113362

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/195845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rootlogger 和 logger的关系

你是不是经常看到日志框架&#xff08;log4j、log4j2、logback等&#xff09;配置文件中有类似配置&#xff0c;但是始终搞不清楚啥意思&#xff1f;<root level"INFO"><appender-ref ref"CONSOLE" /><appender-ref ref"FILE" /&…

3.9.1Cache的基本概念和原理

文章目录一、引子二、工作原理三、局部性原理&#xff08;1&#xff09;空间局部性&#xff08;2&#xff09;时间局部性&#xff08;3&#xff09;总结四、性能分析&#xff08;1&#xff09;方案一&#xff08;2&#xff09;方案二&#xff08;3&#xff09;考题五、块&#…

LeetCode 212. 单词搜索 II 【字典树+回溯】

题目链接&#xff1a;https://leetcode.cn/problems/word-search-ii/ 给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&am…

VC+VB开发CAD重生记:CADEditorX 15.X Crack

CADEditorX是一个 ActiveX 组件&#xff0c;用于在任何支持 ActiveX 和 COM 技术的开发环境&#xff08;例如 C#、Visual C、Delphi、VB、JavaScript 等&#xff09;中向网页或正在开发的应用程序添加 CAD 功能。它可以查看、编辑、转换、打印和测量DWG、DXF、SVG、HPGL、PDF、…

python设计模式-构建器(Builder)设计模式,原型设计模式

构建器(Builder)设计模式构建器(Builder)模式是一种独特的设计模式&#xff0c;它有助于使用简单对象构建复杂对象并使用算法。 这种设计模式属于创建型模式。 在这种设计模式中&#xff0c;构建器类逐步构建最终对象。 该构建器独立于其他对象。构建器(Builder)模式的优点它提…

Anolis Os linux U盘 安装

Anolis OS系统8.4安装|U盘安装Anolis OS(龙蜥)8.4系统_白云一键重装系统 (baiyunxitong.com)https://www.baiyunxitong.com/jiaocheng/7092.html#:~:textAnolis%20OS%E7%B3%BB%E7%BB%9F8.4%E5%AE%89%E8%A3%85%E6%AD%A5%E9%AA%A4%EF%BC%9A%20%28%E5%88%B6%E4%BD%9CU%E7%9B%98%E5…

深度解读 python 实现 dbscan算法

DBScan (密度基于空间聚类) 是一种聚类算法&#xff0c;它通过找到图像中的密度峰值来对数据进行聚类。 文章目录DBScan 算法解释说明DBScan 算法的应用场景Python 实现的 DBScan 算法Python 实现 dbscan 高级算法再演示一种 python 实现 dbscan 算法的代码总结DBScan 算法解释…

共享模型之内存(二)

1.有序性 1>.JVM会在不影响正确性的前提下调整语句的执行顺序,思考下面一段代码: static int i; static int j; // 在某个线程内执行如下赋值操作 i ...; j ...;可以看到,至于是先执行i还是先执行j,对最终的结果不会产生影响.所以,上面代码真正执行时,既可以是: i ..…

mysql:日志,redo,undo,为什么使用日志?

mysql日志 mysql事务的隔离性是通过锁来实现的 而原子性&#xff0c;一致性&#xff0c;持久性就是通过日志来实现的。 REDO LOG 称为 重做日志 &#xff0c;提供再写入操作&#xff0c;恢复提交事务修改的页操作&#xff0c;用来保证事务的持 久性。 UNDO LOG 称为 回滚日志 …

凑个小热闹:python采集《狂飙》评论

前言 昨晚&#xff0c;2023年首部爆款剧集《狂飙》迎来大结局&#xff0c;一度冲上热搜第一 “是非面前稍不留神&#xff0c;就会步入万丈深渊&#xff0c;唯有坚守信仰&#xff0c;才能守得初心” 面对这么多广大网友的讨论&#xff0c;我也来凑上一个热闹 用python采集一下…

Mybatis框架(三)深入Mybatis之Mybatis注解开发与分页的实现

本文是本人专栏【Java开发后端系列框架】里的文章&#xff0c;文章根据各框架官网与网上资料加上本人工作经验&#xff0c;进行修改总结发布在这个专栏&#xff0c;主要目的是用于自我提升&#xff0c;不用于获取利益。如果系列文章能到帮到您本人将感到荣幸&#xff0c;如果有…

docker学习(四):DockerFile微服务实战及docker端口映射

文章目录前言1.Dockerfile介绍2.微服务实战案例3.docker端口映射3.1查看docker网络模式命令3.2docker网络模式前言 大家好&#xff0c;这是我学习docker系列的笔记文章&#xff0c;目标是掌握docker,为后续学习K8s做准备。本文记录了springBoot微服务项目通过DockerFile生成镜…

基于Android的租车app

需求信息&#xff1a; 1.用户中心 进行登陆注销、修改信息、修改密码、上传用户信息:身份证、驾驶证等&#xff0c;并提供基本的验证真伪功能。2.租车交易 用户可以查看可以根据条件查看可以租用的汽车车辆信,息。完成租用车辆功能&#xff0c;(包括登记汽车使用的位置范围) 车…

基于数字孪生的智慧电网3D可视化运维系统

十四五规划提出&#xff1a;“加快推动数字产业化&#xff0c;培育壮大人工智能、大数据、区块链、云计算、网络安全等新兴数字产业”&#xff0c;这是深化电网领域以新能源为主体的国家新型电力系统战略。建设背景在2020年的联合国气候峰会上&#xff0c;我国正式提出了“3060…

听说,这届飞桨社区的框架贡献者真的很“卷”

飞桨平台的快速发展&#xff0c;与开源开放密不可分。飞桨框架建设并非只靠百度工程师&#xff0c;也离不开热爱飞桨、热爱开源的开发者们&#xff0c;他们用自己的方式参与飞桨框架建设&#xff0c;与飞桨共同成长。 为了鼓励更多的开发者参与到飞桨社区的开源建设中&#xff…

前端利器——炫酷的CodePen

前言众所周知&#xff0c;前端是一个很容易将自己的劳动成果呈现出来的一个职位&#xff0c;无论是写1行代码还是写100行代码&#xff0c;都可以通过页面来进行呈现&#xff0c;在工作中的劳作成果也是可以一眼就呈现给客户、用户的。比如一些精美的页面&#xff0c;炫酷的特效…

C++智能指针auto_ptr、unique_ptr、shared_ptr、weak_prt详解

目录 一.为什么要使用智能指针 二.auto_ptr 三.unique_ptr 四.shared_ptr 五.weak_ptr 智能指针均定义在头文件<memory>中&#xff1a; #include<memory> 同时每种智能指针都是以类模板的方式实现 一.为什么要使用智能指针 C的内存管理中&#xff0c;每当…

如何使用ArcGIS拼接栅格

1、概述数据的来源是多种多样的&#xff0c;特别是从网上下载的各种数据往往是分块的数据&#xff0c;在使用的时候需要进行数据的拼接&#xff0c;这里为大家介绍一下ArcGIS进行栅格拼接的方法&#xff0c;希望能对你有所帮助。2、直接拼接在ArcToolbox中点击“数据管理工具\栅…

某书x-s和web_session

开工发现某书web更新了,目前笔记信息接口: /api/sns/web/v1/feed 请求时headers中需要x-s、x-t,cookie中需要有web_session。 文章目录 web_sessionX-SJS代码Python代码web_session web_session和当前环境绑定,重新注册后浏览器中的ID也会更新。 其主要依赖的参数是webI…

WebDAV之葫芦儿·派盘 +Polaris Office

Polaris Office 支持WebDAV方式连接葫芦儿派盘。 推荐一款可以实现在Windows桌面PC,Mac,Android设备和iOS设备上同步的移动办公软件,还支持通过WebDAV添加葫芦儿派盘。 Polaris Office是一款功能全面的办公自动化套件,软件集成了