精华内容
下载资源
问答
  • 地震信号 一维滤波

    2013-06-16 13:10:26
    用于从sgy数据读取并作一维滤波,读取文件为.sgy格式
  • 高斯滤波之一维滤波

    千次阅读 2014-09-04 15:21:07
    高斯滤波: 高斯滤波的解释: http://blog.csdn.net/jia20003/article/details/9156935

    高斯滤波:

    高斯滤波的解释:

    http://blog.csdn.net/jia20003/article/details/9156935


    下面使用高斯滤波中的一维滤波达到滤波的效果

    public class ImageJAndroid2Activity extends Activity {
         ImageView sourceImage;
         ImageView destinationImage;
         float[] gaussianKeneral;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            sourceImage=(ImageView) findViewById(R.id.source);
            destinationImage=(ImageView) findViewById(R.id.destination);
        }
       
        //二维高斯滤波分解为两个一维处理。
        public void remove(View v){
            gaussianKeneral=getGaussian(2,1);
            Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.cc);
            int width=bitmap.getWidth();
            int height=bitmap.getHeight();
            int[] pixel=new int[width*height];
            int[] outpixel=new int[width*height];
            bitmap.getPixels(pixel, 0, width, 0, 0, width, height);
            blur(pixel,outpixel,width,height);
            blur(outpixel,pixel,height,width);//两者的高宽顺序调了。
            
            Bitmap newBitmap=Bitmap.createBitmap(width, height,Config.RGB_565);
            newBitmap.setPixels(pixel, 0, width,0, 0, width, height);
            destinationImage.setImageBitmap(newBitmap);
        }
        
        public void blur(int[] pixel,int[] outpixel,int width,int height){
            for(int y=0;y<height;y++){
                int index=y;
                for(int x=0;x<width;x++){
                    //x方向的一维高斯
                    int a=pixel[y*width+x]>>24&0xff;
                    int sumred=0;
                    int sumgreen=0;
                    int sumblue=0;
                    
                    for(int i=-2;i<=2;i++){
                        int subx=x+i;
                        if(subx<0 || subx>=width){
                            subx=0;
                        }
                        int red=pixel[y*width+subx]>>16&0xff;
                        int green=pixel[y*width+subx]>>8&0xff;
                        int blue=pixel[y*width+subx]&0xff;
                        
                        sumred+=(int)(red*gaussianKeneral[i+2]);
                        sumgreen+=(int)(green*gaussianKeneral[i+2]);
                        sumblue+=(int)(blue*gaussianKeneral[i+2]);
                    }
                    outpixel[y*width+x]=a<<24|clamp(sumred)<<16|clamp(sumgreen)<<8|clamp(sumblue);
                    index+=height;
                }
            }
        }
        
        //获取高斯一维算子
        public  float[] getGaussian(int n,float sigma){
            int size=2*n+1;
            float[]  gaussianKeneral=new float[size];
            float sigma22=2*sigma*sigma;
            float pi2=(float)Math.PI*2;  //2pi
            float sqrtpi2=(float)Math.sqrt(pi2)*sigma;
            int index=0;
            float sum=0f;
            for(int i=-n;i<=n;i++){
                float distance=i*i;
                gaussianKeneral[index]=(float)Math.exp(-(distance)/sigma22)/sqrtpi2;
                sum+=gaussianKeneral[index];
                index++;
            }
            
            for(int i=0;i<size;i++){
                gaussianKeneral[i]=gaussianKeneral[i]/sum;
            }
            return gaussianKeneral;
        }
       

    效果图:

    如果大家对高斯二维滤波的代码感兴趣,请参看

    http://blog.csdn.net/jia20003/article/details/7234741

    展开全文
  • shen滤波,是源自shen算法的思想,主要就是加权平均和差分思想。
  • 如题。如何在matlab里实现对个确定的视频信号的三维滤波?是先对每帧图像进行滤波之后再进行帧间滤波吗?那仅时间维滤波是否需要考虑帧间相关性?
  • 一维中值滤波函数,调用函数,输入滤波窗口值和初始一维滤波向量,输出滤波后的向量
  • 一维二维卡尔曼滤波

    2019-01-12 22:56:42
    程序描述了一维卡尔曼滤波和二维卡尔曼滤波的实现过程,其中卡尔曼滤波的初始化参数需要根据实际情况进行修改
  • 一维二维中值滤波均值滤波matlab编码实现
  • Kalman滤波算法C代码实现,包括一维Klaman滤波算法和二维Kalman滤波算法
  • 一维二维中值滤波均值滤波matlab编码实现
  • 一维中值滤波.

    2012-05-15 10:34:50
    一维中值滤波.给你个程序参考,中值滤波效果不一定好,你可以依据你的数据进行改进
  • 在详细研究了二维滤波原理基础上,根据雷达数据中有效波和干扰波的视速度差异,利用频率波数域二维滤波技术,采用在时间域和频率域两种实现方式去除噪声,对实际的雷达数据进行处理,结果表明频率波数域二维滤波...
  • 实例26边缘保留平滑滤波对PNG图像进行二维滤波 #include "itkImage.h" #include "itkCastImageFilter.h" #include "itkCurvatureFlowImageFilter.h" #include "itkImageFileReader.h" #include ...

    实例26 边缘保留平滑滤波对PNG图像进行二维滤波

    #include "itkImage.h"
    #include "itkCastImageFilter.h"
    #include "itkCurvatureFlowImageFilter.h"
    #include "itkImageFileReader.h"
    #include "itkImageFileWriter.h"
    
    int main(int argc, char* argv[])
    {
        //定义浮点像素类型 InternalPixelType
        typedef   float           InternalPixelType;
        const     unsigned int    Dimension = 2;
        //定义浮点、维数2的图像类型 InternalImageType
        typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;
        //定义无符号字符 输出像素类型 OutputPixelType
        typedef unsigned char                            OutputPixelType;
        //定义无符号字符、维数2 输出图像类型 OutputImageType
        typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
        //定义滤波输入图像类型InternalImageType   滤波输出图像类型OutputImageType
        typedef itk::CastImageFilter< InternalImageType, OutputImageType >
            CastingFilterType;
        //实例化滤波器对象caster
        CastingFilterType::Pointer caster = CastingFilterType::New();
        //定义图像读取类型ReaderType
        typedef  itk::ImageFileReader< InternalImageType > ReaderType;
        //定义图像写类型WriterType
        typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
    
        ReaderType::Pointer reader = ReaderType::New();
        WriterType::Pointer writer = WriterType::New();
    
        reader->SetFileName("BrainProtonDensitySlice.png");
        writer->SetFileName(" lvbo_CastingFilter.png");
    
        //实例化滤波对象smoothing
        typedef itk::CurvatureFlowImageFilter< InternalImageType, InternalImageType >
            CurvatureFlowImageFilterType;
        CurvatureFlowImageFilterType::Pointer smoothing =
            CurvatureFlowImageFilterType::New();
    
        现在连接管道
        smoothing->SetInput(reader->GetOutput());
        //输出滤波后的效果图
        caster->SetInput(smoothing->GetOutput());
        writer->SetInput(caster->GetOutput());
    
        /*IsolatedConnectedImageFilter 期望用户指定一个门限和两个种子。在这个例子中,我们
        从命令行得到它们*/
        smoothing->SetNumberOfIterations(10);
        smoothing->SetTimeStep(0.125);
    
        try
        {
            writer->Update();
        }
        catch (itk::ExceptionObject & excep)
        {
            std::cerr << "Exception caught !" << std::endl;
            std::cerr << excep << std::endl;
        }
    
        return EXIT_SUCCESS;
    }
    

                                                                  

                                                               输入图像                   CurvatureFlowImageFilter 平滑 

     

    ITK系列目录:

    1 ITK图像数据表达之图像

    2 ITK图像处理之图像滤波

    3 ITK图像处理之图像分割

    注:例程配套素材见系列目录

    展开全文
  • 简单的一维高斯滤波程序

    热门讨论 2014-02-10 19:21:46
    简单的一维高斯滤波程序。适用于图像处理初学者。开发平台vs2008+OpenCV2.3.1
  • MedianFilter:一种快速的一维中值滤波算法
  • F-K二维滤波不能简单地通过直线在频率波数域内进行次波和多次波的分离,直线边界会引入Gibbs现象,为了有效选取切除函数,Zhou和Greenhalgh(1994)提出了非线性F-K滤波方法,利用波场外推之后的多次波来自动确定...
  • 本文档采用Matlab程序,设计数字图像二维滤波平台,用户可任意给定滤波参数及图像,即可观察滤波器特征图像、图像的滤 波效果,并可根据需要存储结果.这种可视化处理过程,形象直观,便于理解和学习图像处理过程、二维...
  • 实现1维的卡尔曼滤波算法 1.首先完成滤波算法的编程(有参考,...// 一维滤波器信息结构体 typedef struct{ double filterValue; //k-1时刻的滤波值,即是k-1时刻的值 double kalmanGain; // Kalamn增益 double A; /

    实现1维的卡尔曼滤波算法
    1.首先完成滤波算法的编程(有参考,不知道作者是谁了,侵权可删)

    #ifndef KAERMAN_H_
    #define KAERMAN_H_
    #include <iostream>
    using namespace std;
    // 一维滤波器信息结构体
    typedef  struct{
    	double filterValue;  //k-1时刻的滤波值,即是k-1时刻的值
    	double kalmanGain;   //   Kalamn增益
    	double A;   // x(n)=A*x(n-1)+u(n),u(n)~N(0,Q)
    	double H;   // z(n)=H*x(n)+w(n),w(n)~N(0,R)
    	double Q;   //预测过程噪声偏差的方差
    	double R;   //测量噪声偏差,(系统搭建好以后,通过测量统计实验获得)
    	double P;   //估计误差协方差
    }  KalmanInfo;
    
    void Init_KalmanInfo(KalmanInfo* info, double Q, double R)
    {
    	info->A = 1;  //标量卡尔曼
    	info->H = 1;  //
    	info->P = 10;  //后验状态估计值误差的方差的初始值(不要为0问题不大)
    	info->Q = Q;    //预测(过程)噪声方差 影响收敛速率,可以根据实际需求给出
    	info->R = R;    //测量(观测)噪声方差 可以通过实验手段获得
    	info->filterValue = 0;// 测量的初始值
    }
    double KalmanFilter(KalmanInfo* kalmanInfo, double lastMeasurement)
    {
    	//预测下一时刻的值
    	double predictValue = kalmanInfo->A* kalmanInfo->filterValue;
    	//x的先验估计由上一个时间点的后验估计值和输入信息给出,此处需要根据基站高度做一个修改
    
    	//求协方差
    	kalmanInfo->P = kalmanInfo->A*kalmanInfo->A*kalmanInfo->P + kalmanInfo->Q;
    	//计算先验均方差 p(n|n-1)=A^2*p(n-1|n-1)+q
    
    	double preValue = kalmanInfo->filterValue;  //记录上次实际坐标的值
    
    	//计算kalman增益
    	kalmanInfo->kalmanGain = kalmanInfo->P*kalmanInfo->H / (kalmanInfo->P*kalmanInfo->H*kalmanInfo->H + kalmanInfo->R);
    	//Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R)
    
    	//修正结果,即计算滤波值
    	kalmanInfo->filterValue = predictValue + (lastMeasurement - predictValue)*kalmanInfo->kalmanGain;  //利用残余的信息改善对x(t)的估计,给出后验估计,这个值也就是输出  X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1))
    
    	//更新后验估计
    	kalmanInfo->P = (1 - kalmanInfo->kalmanGain*kalmanInfo->H)*kalmanInfo->P;
    	//计算后验均方差  P[n|n]=(1-K[n]*H)*P[n|n-1]
    
    	return  kalmanInfo->filterValue;
    }
    #endif // KAERMAN_H_
    
    

    2.测试程序,有高斯函数生成一些列随机数,额后经过卡尔曼算法,查看输出的数据,经过Matlab看更直观:

    #include "kaerman.h"
    #include <ctime>
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    double gaussrand()
    {
        static double V1, V2, S;
        static int phase = 0;
        double X;
    
        if ( phase == 0 ) {
            do {
                double U1 = (double)rand() / RAND_MAX;
                double U2 = (double)rand() / RAND_MAX;
                V1 = 2 * U1 - 1;
                V2 = 2 * U2 - 1;
                S = V1 * V1 + V2 * V2;
            } while(S >= 1 || S == 0);
    
            X = V1 * sqrt(-2 * log(S) / S);
        } else
            X = V2 * sqrt(-2 * log(S) / S);
        phase = 1 - phase;
        return X;
    }
    int main()
    {
    
        KalmanInfo *data;
        Init_KalmanInfo(data,1.0,1000.0);
        for(int i=0;i<1000;i++)
        {
            double n = gaussrand();
            //cout << i << ", "<<n<<endl;
            double value = KalmanFilter(data,n);
           // cout<< "Num : "<< i+1 << ": "<<endl;
            cout << "input: "<< n<< ", output: "<<value<<endl;
        }
        return 0;
    }
    

    运行结果如图所示
    在这里插入图片描述
    3.此后我们将input,output的点进入Matlab画图更直观的观看结果。
    在这里插入图片描述
    根据图片看,下面这个经过卡尔曼滤波值后的随机点,比滤波前的随机点更加靠近均值,滤波效果也还可以。

    展开全文
  • 一维数字图像滤波处理,包括膨胀运算、腐蚀运算、中值滤波
  • 应用一维高斯公式,生成一维矩阵,对图像分别进行横向和竖向的高斯滤波处理
  • 一维高斯滤波

    2019-07-30 13:44:00
    1.从正态分布说起 ...我们生成的高斯模板就是从这个公式...例如要生成个大小为3,标准差为1的模板,则只需要代公式计算(此处均值μ \muμ为0,不为0将其平移即可):f(−1) f(-1)f(−1) 、f(0) f(0)f(0)、f...

    转自:https://blog.csdn.net/shanchuan2012/article/details/53071159 

     

    1.从正态分布说起

     

     

    我们生成的高斯模板就是从这个公式来的。例如要生成一个大小为3,标准差为1的模板,则只需要代公式计算(此处均值μ \muμ为0,不为0将其平移即可):f(−1) f(-1)f(−1) 、f(0) f(0)f(0)、f(1) f(1)f(1)就可以得到模板的值了。

    2.高斯滤波是如何实现的?
    其实思想很简单,高斯分布的特点是在均值μ \muμ两边的概率都很大,离之越远的概率越小,所以高斯函数用在滤波上体现的思想就是:离某个点越近的点对其产生的影响越大,所以让其权重大,越远的产生的影响越小,让其权重越小。

    举个例子,有如下一个序列,对其中的6进行操作,模板为[1,2,1]:

    1 2 3 5 6 3 1 7 5 3 8
    |
    1 2 1
    1
    2
    3
    那么结果为:(5∗1+6∗2+3∗1)/(1+2+1)=5 (5*1+6*2+3*1)/(1+2+1)=5(5∗1+6∗2+3∗1)/(1+2+1)=5 ,对每个数据都进行这样的操作,就是所谓的高斯滤波了。

    有一个问题,如果是开头和结尾怎么办?

    一种做法是补0:

    0 1 2 3 5 6 3 1 7 5 3 8
    |
    1 2 1
    1
    2
    3
    另一种做法就是不让模板超出信号的范围,此处采用后一种做法。

    3.matlab代码
    高斯滤波函数Gaussianfilter:

    % 功能:对一维信号的高斯滤波,头尾r/2的信号不进行滤波
    % r :高斯模板的大小推荐奇数
    % sigma :标准差
    % y :需要进行高斯滤波的序列
    function y_filted = Gaussianfilter(r, sigma, y)

    % 生成一维高斯滤波模板
    GaussTemp = ones(1,r*2-1);
    for i=1 : r*2-1
    GaussTemp(i) = exp(-(i-r)^2/(2*sigma^2))/(sigma*sqrt(2*pi));
    end

    % 高斯滤波
    y_filted = y;
    for i = r : length(y)-r+1
    y_filted(i) = y(i-r+1 : i+r-1)*GaussTemp';
    end

    测试代码:

    % 测试数据
    x = 1:50;
    y = x + rand(1,50)*10;

    % 设置高斯模板大小和标准差
    r = 3;
    sigma = 1;
    y_filted = Gaussianfilter(r, sigma, y);

    % 作图对比
    plot(x, y, x, y_filted);
    title('高斯滤波');
    legend('滤波前','滤波后','Location','northwest')

    如何使用?

    新建2个m文件,一个命名为Gaussianfilter,把第一段代码复制进去;另一个命名为testgauss,把第二段代码复制进去,保存。在testgauss中点击运行按钮,即可看到结果。

    结果:


    ---------------------
    作者:itsc
    来源:CSDN
    原文:https://blog.csdn.net/shanchuan2012/article/details/53071159
    版权声明:本文为博主原创文章,转载请附上博文链接!

    转载于:https://www.cnblogs.com/hjj-fighting/p/11269552.html

    展开全文
  • VD算法是种自适应滤波算法,用它可以实现对机动目标的跟踪,此源代码就是采用VD算法跟踪激动目标
  • 本文以rssi(接收信号强度)滤波为背景,结合卡尔曼的五个公式,设计 rssi 一维卡尔曼滤波器,用MATLAB语言实现一维卡尔曼滤波器,并附上代码和滤波结果图; 本文工分为以下几个部分: 1、引言 2、模型的系统方程和...
  • 简单的卡尔曼滤波算法,适合初学者的学习和应用,同时可以在此基础上,进行改进。
  • 一维二维卡尔曼滤波C++ ROS节点

    千次阅读 2018-06-01 12:48:17
    订阅高斯噪声,添加到匀加速的里程上形成带噪声的观测,卡尔曼滤波处理,处理结果发布出去,用matplot显示.高斯噪声:import random import numpy import rospy from std_msgs.msg import Float32 class pub_gauss(): ...
  • 14. (3 分)另一种中值滤波的做法是:首先按行对图像做一维中值滤波(1 × 3),然后对结果再按列做一维中值滤波(3 × 1)。这种做法与直接做3 × 3中值滤波的结果是一样的吗?请解释,并举例说明。 代码 # -*- ...
  • 一、算子说明 data_filter( : :Grayval,rateLowRemove,rateHighRemove:GrayvalOut) ...** 功能:对一维数组进行滤波 ** 输入 ** Grayval 输入一维数组 ** rateLowRemove 去除高差低的百分比(滤波) eg:0.1 ** rate...
  • Matlab产生一维高斯滤波

    千次阅读 2019-11-21 10:52:34
    相关代码如下: dSigma =2.7; fK1=1.0/(2*dSigma*dSigma); fK2=fK1/pi; iSize = 11; out = zeros(1,iSize) step = floor(iSize/2 + 0.5); for i = 1 : iSize x=i-step; fTemp=fK2*exp(-x*x*fK1);... out(1,x+ste...
  • python的中值滤波使用起来,不如matlab的方便。matlab直接能对数组进行滤波,只需要传入数据和窗宽就行。python的中值滤波函数对数组的数要求严格,打个比方你用维数为(20

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,967
精华内容 12,386
关键字:

一维滤波