高斯滤波、均值滤波、savgol滤波python程序

本文深入探讨了卡尔曼滤波算法的实现,通过具体代码示例展示了如何处理传感器数据,实现噪声抑制和平滑。同时,介绍了中值滤波和平滑滤波的应用,帮助读者理解不同数据处理方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

def kalman_filter(self, z):
        '''
        :param z: 待滤波的数组
        :return: 滤波之后的数组
        '''
        # intial parameters
        n_iter = len(z)
        sz = (n_iter,)  # size of array
        x = -0.37727  # truth value (typo in example at top of p. 13 calls this z)
        Q = 1e-5  # process variance

        # allocate space for arrays
        xhat = np.zeros(sz)  # a posteri estimate of x
        P = np.zeros(sz)  # a posteri error estimate
        xhatminus = np.zeros(sz)  # a priori estimate of x
        Pminus = np.zeros(sz)  # a priori error estimate
        K = np.zeros(sz)  # gain or blending factor

        R = 0.1 ** 2  # estimate of measurement variance, change to see effect

        # intial guesses
        xhat[0] = 0.0
        P[0] = 1.0

        for k in range(1, len(z)):
            # time update
            xhatminus[k] = xhat[k - 1]  # X(k|k-1) = AX(k-1|k-1) + BU(k) + W(k),A=1,BU(k) = 0
            Pminus[k] = P[k - 1] + Q  # P(k|k-1) = AP(k-1|k-1)A' + Q(k) ,A=1

            # measurement update
            K[k] = Pminus[k] / (Pminus[k] + R)  # Kg(k)=P(k|k-1)H'/[HP(k|k-1)H' + R],H=1
            xhat[k] = xhatminus[k] + K[k] * (z[k] - xhatminus[k])  # X(k|k) = X(k|k-1) + Kg(k)[Z(k) - HX(k|k-1)], H=1
            P[k] = (1 - K[k]) * Pminus[k]  # P(k|k) = (1 - Kg(k)H)P(k|k-1), H=1
        return xhat

#####################################################
def my_media_filter(data):
    index_data_x = len(data)
    # print(index_data_x)
    dat = np.mean(data)
    # print(dat)
    for m in range(index_data_x):
        if data[m] > dat + 0.4:
            data[m] = dat
        elif data[m] < dat - 0.4:
            data[m] = dat
        else:
            pass
    return data

###################################################
from scipy.signal import savgol_filter
savgol_filter(data, 9, 3)

 

### 高斯滤波均值滤波和中值滤波的区别详解 高斯滤波均值滤波和中值滤波是图像处理领域中常用的滤波技术,它们在去噪效果、边缘保护能力以及应用场景上各有特点。以下是三者的详细对比: #### 1. 均值滤波 均值滤波是一种线性滤波方法,其基本原理是对目标像素周围的邻域像素求平均值,以此来替代目标像素的值。这种方法可以有效减少图像中的噪声,但由于对所有像素一视同仁,因此会模糊图像的细节和边缘信息[^2]。 ```python import cv2 import numpy as np # 均值滤波示例 image = cv2.imread('image.jpg') blurred_image = cv2.blur(image, (5, 5)) cv2.imshow('Mean Filter', blurred_image) cv2.waitKey(0) ``` #### 2. 高斯滤波 高斯滤波同样是一种线性滤波方法,但它使用的是加权平均的方式,权重由高斯分布决定。这意味着距离中心越近的像素,其权重越大,而距离中心越远的像素,权重越小。高斯滤波能够较好地去除高斯噪声,但也会导致图像边缘变得模糊,因为该方法仅考虑了位置信息,而未考虑像素值的变化[^2]。 ```python # 高斯滤波示例 gaussian_blurred_image = cv2.GaussianBlur(image, (5, 5), 0) cv2.imshow('Gaussian Filter', gaussian_blurred_image) cv2.waitKey(0) ``` #### 3. 中值滤波 中值滤波是一种非线性滤波方法,其核心思想是用目标像素邻域内像素值的中值来替代目标像素的值。由于中值滤波不依赖于加权平均,而是直接选取中值,因此它对椒盐噪声(salt-and-pepper noise)具有较好的抑制效果,同时能够较好地保持图像的边缘细节[^1]。 ```python # 中值滤波示例 median_blurred_image = cv2.medianBlur(image, 5) cv2.imshow('Median Filter', median_blurred_image) cv2.waitKey(0) ``` #### 总结对比 - **去噪能力**:均值滤波高斯滤波适用于去除高斯噪声,而中值滤波更适合处理椒盐噪声。 - **边缘保护**:中值滤波在去噪的同时能够较好地保留图像的边缘信息,而均值滤波高斯滤波则会导致边缘模糊。 - **计算复杂度**:均值滤波的计算最为简单,高斯滤波需要额外计算权重,而中值滤波需要排序操作,因此计算复杂度较高。 ### 示例代码综合比较 以下代码展示了三种滤波方法的效果对比: ```python import cv2 import numpy as np # 加载图像 image = cv2.imread('image.jpg') # 均值滤波 mean_filtered = cv2.blur(image, (5, 5)) # 高斯滤波 gaussian_filtered = cv2.GaussianBlur(image, (5, 5), 0) # 中值滤波 median_filtered = cv2.medianBlur(image, 5) # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Mean Filtered', mean_filtered) cv2.imshow('Gaussian Filtered', gaussian_filtered) cv2.imshow('Median Filtered', median_filtered) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值