Savitzky-Golay平滑滤波的python实现

Savitzky-Golay平滑滤波是光谱预处理中常用滤波方法,它的核心思想是对一定长度窗口内的数据点进行k阶多项式拟合,从而得到拟合后的结果。对它进行离散化处理后后,S-G 滤波其实是一种移动窗口的加权平均算法,但是其加权系数不是简单的常数窗口,而是通过在滑动窗口内对给定高阶多项式的最小二乘拟合得出。
这里写图片描述
接下来以二阶多项式情况下的直线滑动平均法作为特殊例子,进行详细分析,并给出通用的多阶加权系数计算方法以及python实现的代码。
文章结构:


直线滑动平均法

对自变量x按等距△x作实验观测得数据如下:
这里写图片描述
t=xxiΔx t = x − x i Δ x ,上述数据变为
这里写图片描述
用下面的方法 yi y i 修正的值:取定正整数n,使 in>=0i+n<=m i − n >= 0 和 i + n <= m

  • 26
    点赞
  • 205
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
中值滤波是一种非线性滤波算法,它的基本思想是用滑动窗口将图像中的每个像素点替换成该窗口内像素值的中值。以下是用Python实现中值滤波的代码: ``` python import cv2 import numpy as np def median_filter(img, size): # 获取图像的行数和列数 row, col = img.shape # 计算滑动窗口的边长 border = (size - 1) // 2 # 创建一个全零的数组,用于存储处理后的图像 out_img = np.zeros((row, col), np.uint8) # 遍历每个像素点 for i in range(border, row-border): for j in range(border, col-border): # 获取滑动窗口中的像素值 window = img[i-border:i+border+1, j-border:j+border+1] # 将滑动窗口中的像素值排序 sort_window = np.sort(window.flatten()) # 取中间值作为该像素点的值 out_img[i, j] = sort_window[(size*size)//2] return out_img # 读取图像 img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE) # 调用中值滤波函数 out_img = median_filter(img, 3) # 显示原图和处理后的图像 cv2.imshow('Original Image', img) cv2.imshow('Median Filter Image', out_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上面的代码中,`median_filter`函数实现了中值滤波算法。它接受两个参数:原始图像和滑动窗口的大小。函数内部首先计算了滑动窗口的边长,然后遍历每个像素点,获取对应的滑动窗口,将窗口内的像素值排序并取中间值作为该像素点的值,最后将处理后的像素值存储在输出图像中。最后,我们读取一张灰度图像,调用`median_filter`函数对其进行中值滤波处理,并显示原图和处理后的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值