资源简介
使用C++ 编写的sg滤波,需要依赖GSL库,滤波方法文献参考Chen, et al., 2004. A simple method for reconstructing a high-quality
; NDVI time-series data set based on the Savitzky�Golay filter. Remote Sensing of Environment,
代码片段和文件信息
/***************************************************************************
*
* Time: 2018-3-5
* Project: 滤波函数
* Purpose: 各种滤波函数的实现
* Author: wk
* Copyright (c) 2018
* Describe: 实现各种滤波,以便后续的使用。目前仅实现了S-G滤波(该方法来源于文献Chen et al. 2004),
* 用SavitzkyGolay方法对EVI时序序列进行滤波去噪。
*
****************************************************************************/
#pragma once
#include “Filter.h“
Filter::Filter(){}
Filter::~Filter(){}
/**
* @brief sg滤波
* @param y 平滑数组
* @param iSize 数组大小
* @return 返回值:表示计算过程中出现的各种错误信息
*/
int Filter::SG_Filter(float *yint iSizefloat*Sgresult)
{
float *fQuality = new float[iSize];
memset(fQuality0.0sizeof(float)*iSize);
findNoiceInEVI(yiSize0.2fQuality);
lineInterpol(yiSizefQuality);
delete [] fQuality;
//gsl_vector_free(gslQuality);
//第三步:探测时序的长期趋势
//创建滤波系数
int iFilterSize = 2*5+1;
float * fFilter = new float[iFilterSize];
memset(fFilter0.0sizeof(float)*iFilterSize);
SG_FilterCreate(52fFilter);
//float * fFilter = new float[iFilterSize];
//for (int i= 0;i // fFilter[i] = gsl_vector_get(sgFilteri);
//gsl_vector_free(sgFilter);
//根据滤波进行卷积
float *ytr = new float[iSize];
memset(ytr0.0sizeof(float)*iSize);
gsl_MyConv(yiSizefFilteriFilterSizeytr);
delete [] fFilter;
//cout<<“ytr0: “< //for (int i = 0;isize;i++)
//{
// cout< //}
//gsl_vector_free(sgFilter);
//第四步:设定各点权重
//设定EVI序列各点的权重
//gsl_vector*gvWeight = gsl_CalWeight(yytr);
float * fWeight = new float[iSize];
memset(fWeight0.0sizeof(float)*iSize);
gsl_CalWeight(yiSizeytrfWeight);
//对初始结果的三次拟合结果进行判断,如果第一、二次的拟合指数最小,则滤波结束,否则进入滤波循环
//////////////////////////////////////////////////////////////////////////
float * ffittresulet = new float[3];
memset(ffittresulet0.0sizeof(float)*3);
//////////////////////////////////////////////////////////////////////////
//第一次拟合
//第五步:产生一条新的EVI序列
float* newy1 = new float[iSize];
memset(newy10.0sizeof(float)*iSize);
gsl_GetMaxValueofVectors(yiSizeytrnewy1);
//第六步:用SG滤波处理这条新的NDVI序列
//gsl_vector*sgFilter46 = SG_FilterCreate(46);
int iFilter2Size = 2*4+1;
float * fFilter2 = new float[iFilter2Size];
memset(fFilter20.0sizeof(float)*iFilter2Size);
SG_FilterCreate(46fFilter2);
//for(int i = 0 ; i // fFilter2[i] = gsl_vector_get(sgFilter46i);
//float *newy1 = new float[iSize];
gsl_MyConv(newy1iSizefFilter2iFilter2Sizeytr);
//gsl_vector_free(sgFilter46);
//cout<<“ytr1: “< //for (int i = 0;isize;i++)
//{
// cout< //}
//第七步:计算拟合效果指数
ffittresulet[0]=gsl_CalTotal(ytriSizeyfWeight);
//////////////////////////////////////////////////////////////////////////
//第二次拟合
//第五步,产生一条新的EVI序列
float* newy2 = new float[iSize];
memset(newy20.0sizeof(float)*iSize);
gsl_GetMaxValueofVectors(yiSizeytrnewy2);
//第六步:用SG滤波处理这条新的NDVI序列
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2695 2018-03-08 18:01 Filter.h
文件 754 2018-03-08 18:14 main.cpp
文件 14331 2018-03-08 18:16 Filter.cpp
----------- --------- ---------- ----- ----
17780 3
- 上一篇:模拟 Linux 文件系统 C++
- 下一篇:汽车票管理系统C语言制作
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- 经典滤波算法
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
评论
共有 条评论