# 光谱预处理方法 **Repository Path**: aBugsLife/spectral-pretreatment-method ## Basic Information - **Project Name**: 光谱预处理方法 - **Description**: 标准正态变换; 多元散射校正; Savitzky-Golay 平滑滤波函数; 滑动平均滤波; 一阶差分; 二阶差分 ; 小波变换 ; 均值中心化; 标准化 ; 最大最小归一化 ; 矢量归一化 - **Primary Language**: Python - **License**: WTFPL - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 92 - **Forks**: 20 - **Created**: 2021-04-01 - **Last Updated**: 2025-08-24 ## Categories & Tags **Categories**: mathlibs **Tags**: 光谱分析, 近红外 ## README # 算法列表 * 标准正态变换 SNV * 多元散射校正 MSC * Savitzky-Golay平滑滤波函数 SG * 滑动平均滤波 move_avg * 一阶差分 D1 * 二阶差分 D2 * 小波变换 wave * 均值中心化 mean_centralization * 标准化 standardlize * 最大最小归一化 max_min_normalization * 矢量归一化 vector_normalization 感谢 @[panxy0826](https://blog.csdn.net/Joseph__Lagrange/article/details/95302398)的开源,本Tool 部分搬运修改于该作者 # 快速使用 ## 0. WARNING 如果您编程能力较弱 对python理解不足 不建议参考使用本项目代码 本项目代码未经大量测试 无法保证通用性。如果您对本项目进行了结构性更改,请一定通知我进行同步更改。 ## 1. 导入数据 ```python # 导入 pandas 读取数据 import pandas as pd import numpy as np # 读取数据 data = pd.read_csv("./data/peach_spectra_brix.csv") # m * n print("数据矩阵 data.shape:",data.shape) # 50个样本, 600个 波段 第一列是 桃子糖度值 需要分离开 X = data.values[:,1:] ``` ## 2. 数据绘制 ```python from pretreatment import Pretreatment as pre p = pre() # 该方法为快速示例 而编写 # 测试用例 图片名 波段起始点 波段间距 p.PlotSpectrum(X, '演示', 0, 5).show() ## 为保证数据可以正确绘制 请将 矩阵转化为 numpy.ndarray 格式 type(X) ``` image-20211018212653707 ## 3. 数据预处理 ### 多元散射校正 MSC ```python msc = p.msc(X) p.PlotSpectrum(msc, 'msc', 0, 5).show() ``` image-20211018212754142 ### 标准正态变换 SNV ```python snv = p.snv(X) p.PlotSpectrum(snv, 'snv', 0, 5).show() ``` image-20211018212821032 ### Savitzky-Golay平滑滤波函数 SG ```python # 此处参数为参考 具体 后续 详述 sg = p.SG(X, 4*5+1,2*3,2) p.PlotSpectrum(sg, 'sg', 0, 5).show ``` image-20211018212847272 ### 滑动平均滤波 move_avg ```python move_avg = p.move_avg(X) p.PlotSpectrum(move_avg, 'move_avg', 0, 5).show ``` image-20211018212913863 ### 一阶差分 D1 ```python D1 = p.D1(X) p.PlotSpectrum(D1, 'D1', 0, 5).show ``` image-20211018212939808 ### 二阶差分 D2 ```python D2 = p.D2(X) p.PlotSpectrum(D2, 'D2', 0, 5).show ``` image-20211018212958282 ### 小波变换 wave ```python wave = p.wave(X) p.PlotSpectrum(wave, 'wave', 0, 5).show ``` image-20211018213018343 ### 均值中心化 mean_centralization ```python mean_centralization = p.mean_centralization(X) p.PlotSpectrum(mean_centralization, 'mean_centralization', 0, 5).show ``` image-20211018213038106 ### 标准化 standardlize ```python standardlize = p.standardlize(X) p.PlotSpectrum(standardlize, 'standardlize', 0, 5).show ``` image-20211018213059006 ### 最大最小归一化 max_min_normalization ```python max_min_normalization = p.max_min_normalization(X) p.PlotSpectrum(max_min_normalization, 'max_min_normalization', 0, 5).show ``` image-20211018213117138 ### 矢量归一化 vector_normalization ```python vector_normalization = p.vector_normalization(X) p.PlotSpectrum(vector_normalization, 'vector_normalization', 0, 5).show ``` image-20211018213156529 # 注意事项 先将如何使用写出,具体原理后续会补上 示例数据来源:[nirpyresearch.com](https://nirpyresearch.com/)