图像构成与信号处理之二——信号滤波

2023-11-13

一、信号滤波与图像滤波

信号滤波和图像滤波都是信号处理的重要任务,它们在不同领域中有广泛的应用。

(一)信号滤波

信号滤波是对信号进行处理的过程,通过去除或抑制不需要的频率成分,以实现信号的平滑或去噪。信号滤波的目标是改变信号的频谱分布,以达到特定的信号处理目的。常用的信号滤波方法有低通滤波、高通滤波、带通滤波等。

(二)图像滤波

图像滤波是对图像进行处理的过程,通过对像素值进行平滑或增强,以实现图像的去噪、增强、边缘检测等目的。图像滤波可以分为频域滤波和空域滤波两类。频域滤波利用图像的傅里叶变换来处理频率信息,而空域滤波则在图像的像素域上直接进行操作。

二、信号滤波示例

(一)限幅滤波法(又称程序判断滤波法)

原理:该方法通过设定一个上下限,将信号限制在该范围内,超过该范围的信号值将被修正。

公式: o u t p u t = m i n ( m a x ( i n p u t , l o w e r l i m i t ) , u p p e r l i m i t ) output = min(max(input, lower_limit), upper_limit) output=min(max(input,lowerlimit),upperlimit)

def limit_amplitude_filter(input_signal, lower_limit, upper_limit):
    output_signal = []
    for value in input_signal:
        output_signal.append(min(max(value, lower_limit), upper_limit))
    return output_signal

(二)中位值滤波法

原理:取一组数据的中位数作为滤波后的输出值,用于去除异常值或突发噪声。(涉及窗口的问题,比如每次只对窗口的波进行处理

公式: o u t p u t = m e d i a n ( i n p u t ) output = median(input) output=median(input)

import numpy as np

def median_filter(input_signal):
    output_signal = []
    for i in range(len(input_signal)):
        window = input_signal[max(i-1, 0):min(i+2, len(input_signal))]
        output_signal.append(np.median(window))
    return output_signal

(三)算术平均滤波法

原理:将一组数据的平均值作为滤波后的输出值,平滑信号。涉及窗口的问题,比如每次只对窗口的波进行处理

公式: o u t p u t = s u m ( i n p u t ) / l e n ( i n p u t ) output = sum(input) / len(input) output=sum(input)/len(input)

def mean_filter(input_signal):
    output_signal = []
    for i in range(len(input_signal)):
        window = input_signal[max(i-2, 0):min(i+3, len(input_signal))]
        output_signal.append(sum(window) / len(window))
    return output_signal

(四)递推平均滤波法(又称滑动平均滤波法)

原理:采用递推方式计算滑动窗口内数据的平均值,每次新数据进入窗口时,旧数据移除,保持窗口大小不变。

公式: o u t p u t [ i ] = o u t p u t [ i − 1 ] + ( i n p u t [ i ] − i n p u t [ i − n ] ) / n output[i] = output[i-1] + (input[i] - input[i-n]) / n output[i]=output[i1]+(input[i]input[in])/n

def recursive_mean_filter(input_signal, window_size):
    output_signal = []
    current_sum = sum(input_signal[:window_size])
    output_signal.append(current_sum / window_size)
    for i in range(window_size, len(input_signal)):
        current_sum = current_sum - input_signal[i - window_size] + input_signal[i]
        output_signal.append(current_sum / window_size)
    return output_signal

(五)中位值平均滤波法(又称防脉冲干扰平均滤波法)

原理:该方法先用中位值滤波法处理数据,然后再使用算术平均滤波法进一步平滑数据。

公式: o u t p u t = m e a n ( m e d i a n ( i n p u t ) ) output = mean(median(input)) output=mean(median(input))

def median_mean_filter(input_signal):
    median_filtered = median_filter(input_signal)
    output_signal = mean_filter(median_filtered)
    return output_signal

(六)限幅平均滤波法

原理:该方法先使用限幅滤波法处理数据,再对处理后的数据使用算术平均滤波法进行平滑。

公式: o u t p u t = m e a n ( l i m i t a m p l i t u d e f i l t e r ( i n p u t ) ) output = mean(limit_amplitude_filter(input)) output=mean(limitamplitudefilter(input))

def limit_amplitude_mean_filter(input_signal, lower_limit, upper_limit):
    limited_signal = limit_amplitude_filter(input_signal, lower_limit, upper_limit)
    output_signal = mean_filter(limited_signal)
    return output_signal

(七)一阶滞后滤波法

原理:该方法利用当前数据与上一时刻的滤波结果之间的差值进行滤波,适用于平稳变化的信号。

公式: o u t p u t [ i ] = ( 1 − a l p h a ) ∗ o u t p u t [ i − 1 ] + a l p h a ∗ i n p u t [ i ] output[i] = (1 - alpha) * output[i-1] + alpha * input[i] output[i]=(1alpha)output[i1]+alphainput[i]

def first_order_lag_filter(input_signal, alpha):
    output_signal = [input_signal[0]]
    for i in range(1, len(input_signal)):
        output_signal.append((1 - alpha) * output_signal[i - 1] + alpha * input_signal[i])
    return output_signal

(八)加权递推平均滤波法

原理:对滑动窗口内的数据进行加权平均,以增加对新数据的重视程度。

公式: o u t p u t [ i ] = ( 1 − w ) ∗ o u t p u t [ i − 1 ] + w ∗ i n p u t [ i ] output[i] = (1 - w) * output[i-1] + w * input[i] output[i]=(1w)output[i1]+winput[i]

def weighted_recursive_mean_filter(input_signal, weight):
    output_signal = [input_signal[0]]
    for i in range(1, len(input_signal)):
        output_signal.append((1 - weight) * output_signal[i - 1] + weight * input_signal[i])
    return output_signal

(九)消抖滤波法

原理:消除信号中的抖动或短时波动,只有当信号值连续n次出现在某一范围内时,才接受该值。

公式: o u t p u t [ i ] = i n p u t [ i ] output[i] = input[i] output[i]=input[i]

def debouncing_filter(input_signal, n):
    output_signal = []
    count = 0
    for i in range(len(input_signal)):
        if input_signal[i] == input_signal[i - 1]:
            count += 1
        else:
            count = 1
        if count >= n:
            output_signal.append(input_signal[i])
    return output_signal

(十)卡尔曼滤波(非扩展卡尔曼)

原理:卡尔曼滤波是一种递归算法,利用状态估计和观测值来融合多个数据来源,优化信号估计。具体原理以及简单示例见下述两个优秀的链接。

图说卡尔曼滤波,一份通俗易懂的教程 - 知乎 (zhihu.com)

(53条消息) Kalman滤波通俗理解+实际应用_南叔先生的博客-CSDN博客

from filterpy.kalman import KalmanFilter

def kalman_filter(input_signal, process_noise, measurement_noise):
    kf = KalmanFilter(dim_x=1, dim_z=1)
    kf.x = input_signal[0]  # 初始状态估计
    kf.F = np.array([[1]])  # 状态转移矩阵
    kf.H = np.array([[1]])  # 观测矩阵
    kf.P *= 1000           # 初始协方差矩阵
    kf.R = measurement_noise  # 观测噪声协方差
    kf.Q = process_noise      # 过程噪声协方差

    output_signal = []
    for z in input_signal:
        kf.predict()
        kf.update(z)
        output_signal.append(kf.x[0])
    
    return output_signal
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像构成与信号处理之二——信号滤波 的相关文章

随机推荐

  • 刚拿到esp32-cam想测试该怎么办?看这篇文章就可以了

    无意间对esp32 cam感兴趣 就去某pdd买了一个模块玩玩 组装摄像头的时候不要硬插进去 有个活动卡槽可以扣开 如下图 接下来去arduino官网或者中文社区下载 arduino官网 https www arduino cc en so
  • LeetCode题目笔记——206. 反转链表

    文章目录 题目描述 题目难度 简单 方法一 顺序遍历 C 代码 Python代码 方法二 递归 代码 题目描述 题目难度 简单 方法一 顺序遍历 我们只需顺序遍历一次列表 在原地将它们的指向依次逆转 需要注意的是 当链表本身为空的时候我们直
  • python数据分析-超市客流量高峰期分析--调用matplotlib折线图

    python数据分析 超市客流量高峰期分析 调用matplotlib折线图 数据处理 有一份超市订单csv格式数据源导入后如下 导入需要使用的模块 import pandas as pd import matplotlib pyplot a
  • 6个 Python 办公黑科技,工作效率提升100倍!(附代码)

    下班晚 加班久感觉已经成为现代打工人的通病 每天将大部分时间浪费在一些机械 重复的工作上 如何提升你自己的工作效率才是关键 今天给大家分享6个 Python 办公小技巧 让你的工作效率倍增 欢迎大家学习收藏 喜欢点赞支持 废话不说 让我们开
  • 微信小程序遇到的坑系列---小程序上传图片线上失败

    微信小程序中 上传图片的代码如下 实现功能 1 上传图片到七牛云 2 上传成功后 对于返回的路径展示到页面 3 将返回的路径发送给后端 对于第一个需求 1 上传图片到七牛云 我们需要在七牛云上有一个账号去存自己的图片 于是不能忽略的一步 就
  • 【业务功能篇49】Springboot+EasyPoi 实现Excel 带图片列的导入导出

    SpringBoot整合EasyPoi实现Excel的导入和导出 带图片 51CTO博客 springboot easypoi导出excel
  • JDBC Utils 详解(通俗易懂)

    目录 一 前言 二 JDBCUtils说明 1 背景及起因 2 示意图 3 JDBCUtils类的定义 三 JDBCUtils应用 1 DML的应用 2 DQL的应用 四 总结 一 前言 第三节内容 up主要和大家分享一下JDBC Util
  • 输入权重和偏置的范围问题?

    对于张的单输入单输出的非线性函数 用黄的程序 隐层神经元的个数并没有太大的影响 而输入权重和偏置的范围有很大的影响 隐层神经元数50 InputWeight rand NumberofHiddenNeurons NumberofInputN
  • 龙芯+RT-Thread+LVGL实战笔记(1)——从移植开始

    过去的大半年时间 一直带着学生备战全国职业院校技能大赛 嵌入式系统应用开发 赛项 由于是首次参加该赛项 很多东西都是从0到1的摸索和积累 最后的成绩自然也不甚理想 作为指导教师 备赛期间除了给予学生必要的指导 自己也花了不少精力研究了大赛指
  • 9.7C++作业

    include
  • redis安装过程报错解决方案

    问题一 出现如下错误 cd src make all make 1 Entering directory xx xx redis x x x src CC adlist o bin sh cc command not found make
  • pycharm 安装 markdown 的三种方法! 绝对管用!!!

    Markdown是一种可以使用普通文本编辑器编写的标记语言 通过简单的标记语法 它可以使普通文本内容具有一定的格式 本人使用的是专业版pycharm 自己破解的 不知道正版的有没有安装不上markdown的情况 就个人所遇到的问题解决方案如
  • Spark读取ES报错EsHadoopInvalidRequest The number of slices [1632] is too large

    Spark读取ES报错EsHadoopInvalidRequest The number of slices 1632 is too large 1 背景 最近需要将ES指定索引中的数据使用Spark读取 进行简单处理后写入HBase 使用
  • avalon框架系列-指令(一)

    avalon的指令是一个非常重要的东西 它用来引入一些新的HTML语法 使元素拥有特定的行为 指令一共拥有3种形式 插值表达式 自定义标签 绑定属性 先说说两个比较少的形式 插值表达式和自定义标签 1 插值表达式 跟Vue框架的一样 都是一
  • MATLAB线性回归

    问题陈述 目标是通过使用线性回归技术进行统计推断预测 使用来自论文 1977 Narula and Wellington Prediction Linear Regression and the Minimum Sum of Relativ
  • 【深度学习】Inception的前世今生(四)--Inception V4,Inception-ResNet

    Inception的系列文章 1 Inception v1 Going deeper with convolutions https arxiv org abs 1409 4842 2 Inception v2 Batch Normaliz
  • 通过Docker创建CentOS容器

    前言 先安装Docker 使用文内的脚本可以快速创建CentOS 7 8虚拟系统集群 并通过SSH Secure Shell 远程工具连接 创建桥接网络 方便容器间通信 指令格式为docker network create lt 网络名称
  • 动态原型模式

    动态原型模式 通过开关 动态添加函数的方法
  • 史上最全!大数据开源框架技术扫盲

    一 目录 系统平台 Hadoop CDH HDP 监控管理 CM Hue Ambari Dr Elephant Ganglia Zabbix Eagle 文件系统 HDFS GPFS Ceph GlusterFS Swift BeeGFS
  • 图像构成与信号处理之二——信号滤波

    一 信号滤波与图像滤波 信号滤波和图像滤波都是信号处理的重要任务 它们在不同领域中有广泛的应用 一 信号滤波 信号滤波是对信号进行处理的过程 通过去除或抑制不需要的频率成分 以实现信号的平滑或去噪 信号滤波的目标是改变信号的频谱分布 以达到