无人机避障——4D毫米波雷达点云滤波去噪(四)

news2024/10/9 17:10:25

噪声的来源:

对于4D毫米波雷达的前后两帧点云数据进行去噪,可以采用多种方法。首先,需要了解点云数据的噪声来源,可能是由于硬件限制、环境干扰或目标本身的反射特性等因素造成的。噪声点通常包括漂移点、孤立点、冗余点和混杂点等。

参考学习:

十种滤波算法的Python实现_控制十个数据,先进先出-CSDN博客

去噪方法可以分为传统方法和基于深度学习的方法:

以4D毫米波的平面和三维点云为例: 

点云效果如下:

 

滤波测试结果:

中值平均滤波法:

中值平均滤波法(Median Mean Filter)是一种常见的信号处理滤波方法,结合了中值滤波和均值滤波的特点。它的基本思想是对信号进行中值滤波和均值滤波的结合,以平衡两种滤波方法的优缺点。

这种滤波方法的步骤通常包括:

  1. 对信号进行中值滤波,以消除噪声对信号的影响。
  2. 对中值滤波后的信号再进行均值滤波,以保留信号的整体特征
结果:

左边是4D雷达点云,右边是滤波之后的效果

pre为10 

pre为5 

改变左边雷达点云,观察右边滤波效果。

[注意]:得看看平面的效果!!!

pre = 10

pre = 5

结论:

有一定的去噪能力,但是感觉滤波能力还不太够

代码: 
def adjust_array_size(points, per):
    """
    调整数组的大小,使其长度为 per 的倍数。

    参数:
    points (numpy.ndarray): 输入的点数组。
    per (int): 每个分组的大小。

    返回:
    numpy.ndarray: 调整大小后的点数组。
    """
    num_points = len(points)  # 获取点数组的长度
    print('调整之前点的数目:',num_points)
    remainder = num_points % per  # 计算点数组长度对 per 的余数
    print('remainder:',remainder)
    if remainder != 0:  # 如果余数不为零,说明需要调整数组大小
        points = points[:-remainder]  # 删除多余的点
        print("删除")

    return points  # 返回调整后的点数组

def MedianAverage3D(points, per):
    """
    对三维点数组进行中值平均去噪。

    参数:
    points (numpy.ndarray): 输入的三维点数组。
    per (int): 每个分组的大小。

    返回:
    numpy.ndarray: 去噪后的点数组。
    """
    points = adjust_array_size(points, per)  # 调整点数组的大小,使其长度为 per 的倍数
    
    num_points = len(points)  # 获取调整后点数组的长度
    num_groups = num_points // per  # 计算分组的数量
    
    # 确保 points 数组的大小是 per 的倍数
    if num_points != num_groups * per:
        raise ValueError(f"The number of points ({num_points}) is not a multiple of per ({per}).")
    
    points_reshaped = points.reshape((num_groups, per, 3))  # 将点数组重塑为 (num_groups, per, 3) 的形状

    denoised_points = np.zeros((num_points, 3))  # 初始化去噪后的点数组

    for i in range(num_groups):  # 遍历每个分组
        for j in range(3):  # 遍历每个通道(x, y, z)
            channel = points_reshaped[i, :, j]  # 获取当前分组的当前通道数据
            # print('channel:',channel)
            # 检查数组大小,确保在删除最大值和最小值后仍然有数据点
            if len(channel) > 2:
                # 检查 channel 中的元素是否都相同
            
                if np.all(channel == channel[0]):
                    # 如果所有元素都相同,则不进行删除操作
                    # print("运行到这1!!!")
                    denoised_points[i*per:(i+1)*per, j] = channel[0]
                    
                else:
                    # print("运行到这2!!!")
                    max_indices = np.where(channel == channel.max())[0]
                    min_indices = np.where(channel == channel.min())[0]
                    # print("max_indices1:",max_indices)
                    # print("min_indices1:",min_indices)                 
                    # 合并需要删除的索引
                    indices_to_delete = np.unique(np.concatenate((max_indices, min_indices)))                    
                    # 删除最大值和最小值
                    channel = np.delete(channel, indices_to_delete)
                    
                    # 如果删除后数组大小为零,则使用原始数据
                    if len(channel) == 0:
                        channel = points_reshaped[i, :, j]
                    
                    denoised_points[i*per:(i+1)*per, j] = np.mean(channel)  # 计算剩余数据的均值,并赋值给去噪后的点数组
            else:
                denoised_points[i*per:(i+1)*per, j] = np.mean(channel)  # 如果数据点不足,直接使用均值

    return denoised_points  # 返回去噪后的点数组

递推平均滤波法:

递推平均滤波(也称为移动平均滤波或滑动平均滤波)是一种常用的信号处理技术,用于减少数据中的随机噪声,平滑数据序列。以下是递推平均滤波的特点以及它的优缺点:

 特点:
1. **简单易实现**:递推平均滤波的算法简单,容易在硬件或软件中实现。
2. **时域滤波**:它在时域内对信号进行处理,不需要像频域滤波那样进行傅里叶变换。
3. **局部平均**:通过对数据序列中相邻的一组数据点求平均值,实现局部平滑。
4. **递推计算**:每个点的平均值是基于前一个平均值和当前窗口的数据点计算的,这样可以减少计算量。

优点:
1. **去噪效果好**:对于随机噪声,递推平均滤波能够有效地减少数据的波动,使信号更加平滑。
2. **稳定性高**:由于是局部操作,对数据的局部变化不敏感,因此滤波结果比较稳定。
3. **实时处理**:适合于在线实时处理,因为每个新数据点的滤波结果可以快速计算出来。
4. **无需训练**:不需要像一些自适应滤波器那样进行训练或参数调整。

缺点:
1. **引入延迟**:由于需要考虑当前点和前面的点,所以滤波后的数据会有一定的时间延迟。
2. **边缘效应**:在数据序列的开始和结束部分,无法形成完整的窗口,这可能导致边缘处的数据不够平滑。
3. **不能消除周期性噪声**:如果噪声的周期与窗口大小相匹配,递推平均滤波可能无法有效去除这种噪声。
4. **信号失真**:对于非平稳信号,递推平均滤波可能会导致信号的波形失真,尤其是在信号的快速变化区域。
5. **参数依赖**:滤波效果依赖于窗口大小的选择,窗口太大可能导致信号过度平滑,失去细节;窗口太小则去噪效果不佳。

在使用递推平均滤波时,需要根据具体的应用场景和数据特性来选择合适的窗口大小。过大的窗口会消除信号中的重要细节,而过小的窗口则可能无法有效去除噪声。此外,对于非静态信号或非线性信号,递推平均滤波可能不是最佳选择,可能需要考虑更复杂的滤波方法。

结果:

pre = 15

pre = 10

pre = 5

结论:

去噪声比较弱,但是其有产生连续性规则性的点,肯定没法直接用的

代码:
# 递推平均滤波
def SlidingAverage(inputs, per):
    # 如果输入数组的行数不能被'per'整除,则去掉余数部分
    if inputs.shape[0] % per != 0:
        # 去掉不能整除的部分
        inputs = inputs[:inputs.shape[0] // per * per]
    
    # 初始化一个空数组来存储滤波后的结果
    filtered = np.zeros_like(inputs)
    
    # 遍历每个点,计算递推平均
    for i in range(inputs.shape[0]):
        # 计算当前点的起始索引
        start_idx = max(i - per + 1, 0)
        # 计算当前点的结束索引
        end_idx = i + 1
        # 计算窗口内的数据
        window = inputs[start_idx:end_idx]
        # 计算平均值
        filtered[i] = window.mean(axis=0)
    
    # 返回滤波后的数组
    return filtered

中值平均滤波+递推平均滤波法:

结果:

中值:pre = 10

+

递推:pre = 5

中值:pre = 15

+

递推:pre = 5

递推:pre = 5

+

中值:pre = 10

[注意]:这个数据可以用

递推:pre = 5

+

中值:pre =  5

递推:pre = 5

+

中值:pre =  7

递推:pre = 5

+

中值:pre =  13

递推:pre = 5

+

中值:pre =  15

结论:

能够具有一些效果。

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

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

相关文章

【通过zip方式安装mysql服务】

通过zip方式安装mysql服务 Mysql安装包下载mysql安装及环境配置1.解压缩配置环境变量初始化mysql配置安装mysql服务启动MySQL服务连接mysql修改root用户密码 Mysql安装包下载 通过访问mysql官网下载:mysql下载地址 mysql安装及环境配置 1.解压缩 下载完成后&am…

YOLOv10改进策略【注意力机制篇】| GAM全局注意力机制: 保留信息以增强通道与空间的相互作用

一、本文介绍 本文记录的是基于GAM注意力模块的YOLOv10目标检测改进方法研究。GAM注意力模块通过3D排列和重新设计的子模块,能够在通道和空间方面保留信息,避免了先前方法中由于信息减少和维度分离而导致的全局空间-通道交互丢失的问题。本文利用GAM改进…

『网络游戏』角色创建界面逻辑【11】

创建代码:CreateWnd.cs 编写脚本:CreateWnd.cs 绑定脚本 修改脚本:LoginWnd.cs 绑定事件 修改脚本:Constans.cs 修改脚本:LoginSys.cs 修改脚本:LoginWnd.cs 拖拽框选 运行项目 - 点击开始进入创建角色界面…

柯桥外语培训韩语学习考级韩语中TOPIK常用语法表达

-기 위해서는 -는 것이 좋다 为了......,......比较好 -는 것보다는 -는 것이 좋다 比起......,......比较好 -(으)려면 -아/어/야 한다 如果想......的话,得...... -왜냐하면 -기 때문이다 因为...... -그 이유는 -기 때문이다 理由是…

TinyOS 点对基站通信

文章目录 一、前言1.1 发包的BlinkToRadio的数据包格式 二、混淆基站源码分析2.1 Makefile2.2 组件连接2.3 主逻辑代码 一、前言 1.1 发包的BlinkToRadio的数据包格式 如下,注意:AM层类型(1byte)即handlerID使可以在组件中修改的。 二、混淆基站源码…

专访:青年制片人林苏楠给影视行业新人的建议

近十年,对影视行业抱有浓厚兴趣,并进入专业院校学习的年轻人越来越多。但他们中的很多人毕业后却选择了其他行业,或者从事影视行业几年后决定转行。这其中的缘由似乎一部分来源于年轻创作者对真实的影视市场的不了解和不适应。 我们这次采访…

GC9118S替代TMI8118的优势分析,可应用在牙刷,电子锁,医疗设备等产品中

GC9118S作为一种新型集成电路,逐渐被视为TMI8118的理想替代品。以下是GC9118S在多个方面的优势,使其能够有效替代TMI8118。 1. 低功耗设计 GC9118S在功耗方面进行了优化,使其在待机和工作状态下都能显著降低能耗。这对于电池供电的设备&…

SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析

文章目录 同步编程&异步编程线程池为什么要使用线程池?Spring自定义线程池SpringBoot轻松调用线程池总结 测试demo链接 同步编程&异步编程 在Java并发编程中,同步和异步是两种常见的处理方式。 同步是指多个任务按顺序执行,一个任务的…

虚拟机三种网络配置方式随笔

1.1桥接模式 虚拟机和物理机同时直接连接物理网络(均作为独立主机) 桥接模式下,虚拟主机与真实主要在VMnet0构成的局域网内通信,同时通过真实主机中的网关与外网通信。由上表可看出,VMnet0直接连接到真实主机的某块真…

AGI时代存内计算芯片的语音识别之旅 —— 知存科技开发板体验与感悟

目录 一、简介二、活动内容2.1 多模态时代,存内计算框架的应用与发展1、多模态时代计算需求2、存内计算技术3、知存科技存内产品 2.2 分布式环境下深度学习任务的高效可靠执行研究2.3 IGZO在后道单片三维集成中的机遇与挑战1、IGZO的背景2、IGZO的优势3、IGZO器件的…

OpenStack 创建自定义的QCOW2格式镜像

目录 创建kvm虚拟机 创建目录上传ISO镜像 将 CentOS 7.4 上传到 /soft 目录下 创建 kvm虚机 使用的磁盘文件 配置kvm虚拟机 修改 KVM 虚机网络配置文件 安装 cloud-init 软件包 编辑 cloud.cfg 文件 编辑 network 文件 编辑 grub 文件 关闭kvm虚拟机 创建 QCOW2 镜…

10.8 C高级-shell脚本3

1、思维导图: 2、练习 分支结构结合test指令完成一下编程 1>判断闰年 2>输入一个数判断是否为偶数 3>使用test指令实现等级判断 90--100A 60--89B 0-50C 其他错误 代码: #!/bin/bash #分支结构结合test指令完成以下编程 #1判断是否闰年 read …

工业网关设备在智能制造中的应用有哪些?天拓四方

工业网关设备是一种用于连接工业设备和物联网子系统的设备,它能够实现数据采集、远程监控、远程控制和数据传输等功能。基于强大的数据处理和传输能力,工业网关设备能够实时采集各种工业设备的运行数据,并将其传输到云平台或数据中心进行存储…

【java】final关键字详解

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…

升级 OpenSSL 的详细步骤(解决 SSH 漏洞的前提)

目录 前言1. 准备工作1.1 安装必要的依赖1.2 下载 OpenSSL 源码 2. 解压和配置2.1 解压文件2.2 配置编译参数 3. 编译和安装3.1 编译源码3.2 安装 OpenSSL 4. 验证安装5. 解决 SSH 漏洞的必要性6. 结语 前言 在信息安全的时代,服务器的安全性至关重要。特别是在互联…

颠覆再临!OpenAI Canvas让AI写作与编程焕然一新

目录 在Canvas界面中,你可以:Canvas有哪些强大功能?写作助手的升级编程功能的提升 网友反响如何?[如何直接使用ChatGPT4o、o1、OpenAI Canvas](https://www.nezhasoft.cn/) 👇 [ChatGPT o1网页入口在文末](https://www…

Java软件架构师结合实际项目经验总结软件架构的发展进程与原理(重点讲微服务架构怎么来的)

软件架构师结合实际项目经验总结软件架构的发展进程与原理 一、前言 笔者自己一直从事软件开发工作,算上大四实习1年,一直到今年整整12年,这期间有些人已经转了管理岗或者转行,已经完全不敲代码了!笔者依然在一线编码…

tp5 fastadmin列表页图片批量压缩并下载

记录&#xff1a;tp5 fastadmin对列表页选中数据的多张图片进行压缩并下载。 html代码 <a href"javascript:;" class"btn btn-info btn-apple btn-disabled disabled {:$auth->check(zhuanli/zhuanli/xiazai)?:hide}" title"批量下载专利证书…

关于学习神经网络的一些感悟

intro 本文主要是笔者学习神经网络时一些思考的感悟&#xff0c;由于本人对人工智能方向了解甚浅&#xff0c;所以记录的理解会有不正确的地方&#xff0c;欢迎批评指正&#xff01; 深度学习与传统机器学习算法的一个显著区别&#xff1a;对于传统的机器学习算法&#xff0c;可…

Sealos Devbox 发布,珍爱生命,远离 CI/CD

水滴攻击太阳系用的是最原始的攻击方式&#xff1a;撞击&#xff01;却又如此有效率。 当我们搞了一堆容器、编排、CI/CD、DevOps&#xff0c;发明了一大堆没什么用的名词之后&#xff0c;最终发现这些操作都是花里胡哨&#xff0c;让开发者越陷越深。 最终你会发现一个真理&…