美文网首页
最小二乘法Savitzky-Golay平滑滤波

最小二乘法Savitzky-Golay平滑滤波

作者: Vieta_Qiu人工智障 | 来源:发表于2020-03-23 15:04 被阅读0次

参考:https://blog.csdn.net/sinat_21258931/article/details/79298478

# -*- coding: utf-8 -*-  
import numpy as np

from numpy import *
import matplotlib.pyplot as plt
from random import *
from scipy.signal import savgol_filter



def loadData():
    x = arange(-1,1,0.02)
    y = ((x*x-1)**3+1)*(cos(x*2)+0.6*sin(x*1.3))
    xr = []
    yr = []
    i = 00
    for xx in x:
        yy = y[i]
        d=float(randint(90,110))/100
        dd=float(randint(80,120))/100
        i+=1  
        xr.append(xx*d)  
        yr.append(yy*dd)  
    return x,y,xr,yr



"""
* 创建系数矩阵X
* size - 2×size+1 = window_size
* rank - 拟合多项式阶次
* x - 创建的系数矩阵
"""
def create_x(size, rank):
    x = []
    for i in range(2 * size + 1):
        m = i - size
        row = [m**j for j in range(rank)]
        x.append(row) 
    x = np.mat(x)
    print("x",x)
    return x


"""
 * Savitzky-Golay平滑滤波函数
 * data - list格式的1×n纬数据
 * window_size - 拟合的窗口大小
 * rank - 拟合多项式阶次
 * ndata - 修正后的值
"""
def savgol(data, window_size, rank):
    m = int((window_size - 1) / 2)
    odata = data[:]
    # 处理边缘数据,首尾增加m个首尾项
    for i in range(m):
        odata.insert(0,odata[0])
        odata.insert(len(odata),odata[len(odata)-1])
    # 创建X矩阵
    x = create_x(m, rank)
    # 计算加权系数矩阵B
    b = (x * (x.T * x).I) * x.T
    print("b",b)
    a0 = b[m]
    print("a0",a0)
    a0 = a0.T
    # 计算平滑修正后的值
    ndata = []
    y2 = []
    for i in range(len(data)):
        y = [odata[i + j] for j in range(window_size)]
        y2.append(y)
    ndata = np.mat(y2) * a0
    return ndata



def figPlot(x1,y1,x2,y2):
    plt.plot(x1,y1,color='g',linestyle='-',marker='')
    plt.plot(x2,y2,color = 'm',linestyle='',marker='.')
    plt.show()

def Main():
    x,y,xr,yr = loadData()
    print(type(x),type(xr))
    myY = savgol(yr,21,3)
    figPlot(x,myY,xr,yr)
    
Main()

效果甚好:


相关文章

  • 使用Matlab对MODIS数据进行SG滤波

    需求 Savitzky-Golay滤波器(简称为S-G滤波器),是一种在时域内基于局域多项式最小二乘法拟合的滤波方...

  • 最小二乘法Savitzky-Golay平滑滤波

    参考:https://blog.csdn.net/sinat_21258931/article/details/7...

  • 数字图像处理之空间域滤波

    空间域滤波大体分为两类:平滑滤波、锐化滤波 1、平滑滤波:模糊处理,用于减小噪声,实际上是低通滤波。典型的滤波器是...

  • 图像滤波

    空域滤波 平滑 高斯滤波image.png

  • 滤波器的分类

    a.平滑空间滤波器:去除图像中不重要的细节,减少噪声b.锐化空间滤波器: a.平滑空间滤波器 线性滤波器(均值滤波...

  • OpenCV学习笔记(六)方框、均值、高斯滤波

    一、图像平滑与滤波概念 介绍图像滤波之前有必要了解一下图像平滑的概念。 图像平滑(smoothing)也称为图像模...

  • 7.6 2D卷积

    OpencV提供了多种滤波方式,来实现平滑图像的效果,例如均值滤波、方框滤波、高斯滤波、中值滤波等,大多数滤波方式...

  • opencv各种卷积核滤波器

    高斯滤波 使图像平滑,可以用来去除噪声。高斯滤波器将中心像素周围的像素按照高斯分布加权平均进行平滑化。 中值滤波 ...

  • OpenCV-Python学习(九):图像滤波

    目录: 1.滤波的相关概念 2.卷积操作 3.平滑操作(低通滤波)均值滤波中值滤波高斯滤波双边滤波 4.锐化操作(...

  • 2.opencv图像处理常用操作

    图像的平滑处理 平滑,也称 模糊, 平滑处理时需要用到一个滤波器 。滤波器想象成一个包含加权系数的窗口,这个加权系...

网友评论

      本文标题:最小二乘法Savitzky-Golay平滑滤波

      本文链接:https://www.haomeiwen.com/subject/srswyhtx.html