精华内容
下载资源
问答
  • 今天介绍高光谱数据预处理算法中的:移动窗口平均平滑算法。 顾名思义,移动窗口平均平滑的意思就是平滑窗口在数据上移动求平均,从而对数据进行去噪。上一节我们讲的标准化是对全体样本数据的移动、缩放,从而消除...
    展开全文
  • 灰度图像的加权平均平滑算法

    万次阅读 2016-03-24 20:36:32
    //函数功能:加权平均平滑 //输入参数:int structure[3][3] 表示邻域加权模板 //返回值:成功,返回TRUE;否则返回FALSE //----------------------------------------- BOOL CSmoothProcessDib::Valu

    高斯滤波程序3*3

    算法描述

    灰度图像的加权平均算法的实现步骤如下:
    1. 获得图像的首地址及图像的宽和高。
    2. 开辟一块内存缓冲区,用以暂存结果图像,并初始化为0。
    3. 求模板中各元素的权值总和。
    4. 逐个扫描图像中的像素点,根据模板中各位置的权值求其邻域加权平均值,并将求得的加权平均值赋给目标图像中与当前点对应的像素点。
    5. 循环步骤4,直到处理完源图像的全部像素点。
    6. 将结果从内存缓冲区复制到原图像的数据中。

    代码块

    //-----------------------------------------
    //函数功能:加权平均平滑
    //输入参数:int structure[3][3] 表示邻域加权模板
    //返回值:成功,返回TRUE;否则返回FALSE
    //-----------------------------------------
    BOOL CSmoothProcessDib::Value_Average_Smooth()
    {
      int Structure[3][3]=(121242121);
      LPBYTE lpDst;                          //指向缓存图像的指针
      LPBYTE lpNewDIBBits;                   //指向缓存DIB图像的指针
      HLOCAL hNewDIBBits;                    //HLOCAL是内存地址的句柄,就是void*,Handle to a local memory block,指向内存区域的首地址
      long i,j,m,n;                          //循环变量
      int sum=0;                             //模板中各个元素总和
      BYTE value_average;                    //邻域加权均值变量
      LPBYTE lpDIBBits=m_pDib->GetData();    //找到原图像的起始位置
      LONG 1Width=m_pDib->GetWidth();        //获得原图像的宽度
      LONG 1Height=m_pDib->GetHeight();      //获得原图像的高度
      //暂时分配内存,以保存新图像 
      //LocalAlloc从堆中分配内存(指定大小的字节数)
      hNewDIBBits=LocalAlloc(LHND,1Width*1Height);  
      if(hNewDIBBits==NULL)
      {
       return FALSE;
      }
      lpNewDIBBits=(LPBYTE)LocalLock(hNewDIBBits);
      lpDst=(LPBYTE)lpNewDIBBits;             //强制转换成指向字节的指针
      memset(lpDst,(BYTE)0,1Width*1Height);   //初始化新分配的内存,设定初始值为0
      //求模板中各元素权值总和
      for(m=0;m<3;m++)
      {
       for(n=0;n<3;n++)
       {
        sum+=Structure[m][n];
       }
      }
      //逐个扫描图像中的像素点,求其邻域加权平均值
      for(j=1;j<1Height-1;j++)
      {
       for(i=1;i<1Width-1;i++)
       {
        //指向目标图像第j行第i个像素的指针
        lpDst=(LPBYTE)lpNewDIBBits+1Width*j+i;
        // 求加权平均值
        value_average=(BYTE)((float)(
        lpDIBBits[(j+1)*1Width+(i-1)]*Structure[0][0]+
        lpDIBBits[(j+1)*1Width+i]*Structure[0][1]+
        lpDIBBits[(j+1)*1Width+i+1]*Structure[0][2]+
        lpDIBBits[j*1Width+(i-1)]*Structure[1][0]+
        lpDIBBits[j*1Width+i]*Structure[1][1]+
        lpDIBBits[j*1Width+i+1]*Structure[1][2]+
        lpDIBBits[(j-1)*1Width+(i-1)]*Structure[2][0]+
        lpDIBBits[(j-1)*1Width+i]*Structure[2][1]+
        lpDIBBits[(j-1)*1Width+i+1]*Structure[2][2])/sum+0.5);           //+0.5是四舍五入
        // 将求得的加权均值赋给目标图像中与当前点对应的像素点
        *lpDst=value_average;
       }
      }
      memcpy(lpDIBBits, lpNewDIBBits,1Width*1Height);  //复制变换后的图像
      //释放内存
      LocalUnlock(hNewDIBBits);
      LocalFree(hNewDIBBits);
      return TRUE;
    }

    几个小疑问

    1. Q: 找到原图像的起始位置语句中 m_pDib?是什么?
      A: 是指向插入的图像的指针。
    2. Q: 求加权平均值中为什么要➕0.5?另外加权平均那儿可以用两个循环,不用写这么多。
      A: 为了四舍五入
    3. Q: Structure[3][3] 要自己输入模板,怎么输?
      A: int Structure[3][3]=(1,2,1,2,4,2,1,2,1)

    另一种高斯写法

    void Operator(BYTE f[500][500], long h, long w, float op[3][3], int 3, BYTE g[500][500])
    {
    for(int y=1; y<h-1;y++)
      {
       for(int x=1;x<w-1;x++)
         {
          float sum=0;
          for(int t=-1; t<1;t++)
            {
             for(int s=-1;s<1;s++)
               {
                sum+=op[t+1][s+1]*f[y+t][x+s];
               }
              if(sum<0)g[y][x]=0;
              else if(sum>255) g[y][x]=sum;
              else g[y][x]=sum;
            }
         }
      }
    }

    Reference Book

    Visual C++数字图像处理技术详解 刘海波 沈晶 机械工业出版社 p164-165

    展开全文
  • 递推平滑滤波算法原理是利用N个点(N最好为奇数)的平均值来代替采样点的值,这里使用N=11和N=21的两次递推平滑滤波对信号滤波,效果如图。 随着点数N的增大,滤波后的加速度信号曲线越来越平滑。递推平滑滤波的...

    递推平滑滤波算法原理是利用N个点(N最好为奇数)的平均值来代替采样点的值,这里使用N=11和N=21的两次递推平滑滤波对信号滤波,效果如图。

    随着点数N的增大,滤波后的加速度信号曲线越来越平滑。递推平滑滤波的Matlab函数为smooth。

     

     

     

    展开全文
  • 空间平滑MUSIC算法(2) 继续上一篇博客,继续讲后向空间平滑和前/后向空间平滑MUSIC算法。 基于空间平滑MUSIC算法的相干信号DOA估计(1) 2.3 后向空间平滑算法 后向空间平滑更准确的说是共轭后向空间平滑,它是对后...

    空间平滑MUSIC算法(2)

    继续上一篇博客,继续讲后向空间平滑和前/后向空间平滑MUSIC算法。
    基于空间平滑MUSIC算法的相干信号DOA估计(1)

    2.3 后向空间平滑算法

    后向空间平滑
    后向空间平滑更准确的说是共轭后向空间平滑,它是对后向子阵列地共轭接收数据协方差矩阵进行平滑。定义第一个共轭后向子阵列由 {M,M1,,Mp+1}\{M, M-1, \cdots, M-p+1\} 组成, 第二个子阵列由 {M1,M2,,Mp}\{M-1, M-2, \cdots, M-p\} 组成,依次组成的子阵列个数为 L=Mp+1\mathrm{L}=\mathrm{M}-\mathrm{p}+1 个
    容易知道,共轭后向空间平滑协方差矩阵R~b\tilde{R}^{b}与前向空间平滑协方差矩阵R~f\tilde{R}^{f}的关系:
    R~b=J(R~f)J\tilde{R}^{b}=J*(\tilde{R}^{f})^**J利用后向空间平滑协方差矩阵和MUSIC算法也可以分辨出多个相干信号的方位。可以证明,该方法最大也可以检测M/2个相干的信号。

    MATLAB代码

    % bss.m
    % Code For Music Algorithm Based On Backward Spatial Spectrum
    % The Signals Are All Coherent
    % Author:痒羊羊
    % Date:2020/10/29
    
    clc; clear all; close all;
    %% -------------------------initialization-------------------------
    f = 500;                                        % frequency
    c = 1500;                                       % speed sound
    lambda = c/f;                                   % wavelength
    d = lambda/2;                                   % array element spacing
    M = 20;                                         % number of array elements
    N = 100;                                        % number of snapshot
    K = 6;                                          % number of sources
    L = 10;                                         % number of subarray
    L_N = M-L+1;                                    % number of array elements in each subarray
    coef = [1; exp(1i*pi/6);... 
            exp(1i*pi/3); exp(1i*pi/2);... 
            exp(2i*pi/3); exp(1i*2*pi)];            % coherence coefficient, K*1
    doa_phi = [-30, 0, 20, 40, 60, 75];             % direction of arrivals
    
    %% generate signal
    dd = (0:M-1)'*d;                                % distance between array elements and reference element
    A = exp(-1i*2*pi*dd*sind(doa_phi)/lambda);      % manifold array, M*K
    S = sqrt(2)\(randn(1,N)+1i*randn(1,N));         % vector of random signal, 1*N
    X = A*(coef*S);                                 % received data without noise, M*N
    X = awgn(X,10,'measured');                      % received data with SNR 10dB
    
    %% reconstruct convariance matrix
    %% calculate the covariance matrix of received data and do eigenvalue decomposition
    Rxx = X*X'/N;                                   % origin covariance matrix
    H = fliplr(eye(M));                             % transpose matrix
    Rxxb = H*(conj(Rxx))*H;
    Rf = zeros(L_N, L_N);                           % reconstructed covariance matrix
    for i = 1:L
        Rf = Rf+Rxxb(i:i+L_N-1,i:i+L_N-1);
    end
    Rf = Rf/L;
    [U,V] = eig(Rf);                                % eigenvalue decomposition
    V = diag(V);                                    % vectorize eigenvalue matrix
    [V,idx] = sort(V,'descend');                    % sort the eigenvalues in descending order
    U = U(:,idx);                                   % reset the eigenvector
    P = sum(V);                                     % power of received data
    P_cum = cumsum(V);                              % cumsum of V
    
    %% define the noise space
    J = find(P_cum/P>=0.95);                        % or the coefficient is 0.9
    J = J(1);                                       % number of principal component
    Un = U(:,J+1:end);
    
    %% music for doa; seek the peek
    dd1 = (0:L_N-1)'*d;
    theta = -90:0.1:90;                             % steer theta
    doa_a = exp(-1i*2*pi*dd1*sind(theta)/lambda);   % manifold array for seeking peak
    music = abs(diag(1./(doa_a'*(Un*Un')*doa_a)));  % the result of each theta
    music = 10*log10(music/max(music));             % normalize the result and convert it to dB
    
    %% plot
    figure;
    plot(theta, music, 'linewidth', 2);
    title('Music Algorithm For Doa', 'fontsize', 16);
    xlabel('Theta(°)', 'fontsize', 16);
    ylabel('Spatial Spectrum(dB)', 'fontsize', 16);
    grid on;
    

    后向空间平滑可以看到,在6个入射信号均相干的情况下,基于后向空间平滑的MUSIC算法能较好地对其进行DOA估计,且估计精度较高。

    2.3 前/后向空间平滑算法

    把前向和共轭后向空间平滑协方差矩阵定义为前向空间平滑协方差矩阵和共轭后向空间平滑协方差矩阵的平均值,即:
    R=12(R~f+R~b) \overline{\mathbf{R}}=\frac{1}{2}\left(\tilde\mathbf{R}^{f}+\tilde\mathbf{R}^{b}\right) 那么只要空间平滑的次数大于等于相干信号源的个数,前向和共轭后向空间平滑协方差矩阵一般情况下都是满秩的。使用前/后向空间平滑的方法最多可以检测的相干信号源个数为 2M/32 \mathrm{M} / 3 个。你可能很好奇这个最大相干信号源检测数是怎么得到的?
    假设: 阵列天线的阵元数为M\mathrm M个,前/后向空间平滑次数分别为L\mathrm L次,则每个子阵的阵元数为 N=ML+1\mathrm N={\mathrm M}-\mathrm{L}+1 个, 同时可以知道, 可以分辨的最大信号个数为ML\mathrm{M}-\mathrm{L}个, 也就是子阵的阵元个数减1;1 ;前后向分别平滑N\mathrm{N}次可以解相干信号的个数为 2L2 \mathrm{L}个, 最大情况下,两者相等所以 ML=2L\mathrm M- \mathrm L=2 \mathrm L,也就是 L=M/3;\mathrm{L}=\mathrm{M} / 3 ; 所以 2L=2M/3,2 \mathrm{L}=2 \mathrm{M} / 3, 所以前/后向空间平滑最大可以解相干的信号个数为2M/32 \mathrm{M} / 3 个。所以说采用前/后向空间平滑的改进技术可以很大地提高阵列孔径。

    MATLAB代码

    % fbss.m
    % Code For Music Algorithm Based On Backward Spatial Spectrum
    % The Signals Are All Coherent
    % Author:痒羊羊
    % Date:2020/10/29
    
    clc; clear all; close all;
    %% -------------------------initialization-------------------------
    f = 500;                                        % frequency
    c = 1500;                                       % speed sound
    lambda = c/f;                                   % wavelength
    d = lambda/2;                                   % array element spacing
    M = 20;                                         % number of array elements
    N = 100;                                        % number of snapshot
    K = 6;                                          % number of sources
    L = 10;                                         % number of subarray
    L_N = M-L+1;                                    % number of array elements in each subarray
    coef = [1; exp(1i*pi/6);... 
            exp(1i*pi/3); exp(1i*pi/2);... 
            exp(2i*pi/3); exp(1i*2*pi)];            % coherence coefficient, K*1
    doa_phi = [-30, 0, 20, 40, 60, 75];             % direction of arrivals
    
    %% generate signal
    dd = (0:M-1)'*d;                                % distance between array elements and reference element
    A = exp(-1i*2*pi*dd*sind(doa_phi)/lambda);      % manifold array, M*K
    S = sqrt(2)\(randn(1,N)+1i*randn(1,N));         % vector of random signal, 1*N
    X = A*(coef*S);                                 % received data without noise, M*N
    X = awgn(X,10,'measured');                      % received data with SNR 10dB
    
    %% reconstruct convariance matrix
    %% calculate the covariance matrix of received data and do eigenvalue decomposition
    Rxx = X*X'/N;                                   % origin covariance matrix
    H = fliplr(eye(M));                             % transpose matrix
    Rxxb = H*(conj(Rxx))*H;
    Rxxfb = (Rxx+Rxxb)/2;
    Rf = zeros(L_N, L_N);                           % reconstructed covariance matrix
    for i = 1:L
        Rf = Rf+Rxxfb(i:i+L_N-1,i:i+L_N-1);
    end
    Rf = Rf/L;
    [U,V] = eig(Rf);                                % eigenvalue decomposition
    V = diag(V);                                    % vectorize eigenvalue matrix
    [V,idx] = sort(V,'descend');                    % sort the eigenvalues in descending order
    U = U(:,idx);                                   % reset the eigenvector
    P = sum(V);                                     % power of received data
    P_cum = cumsum(V);                              % cumsum of V
    
    %% define the noise space
    J = find(P_cum/P>=0.95);                        % or the coefficient is 0.9
    J = J(1);                                       % number of principal component
    Un = U(:,J+1:end);
    
    %% music for doa; seek the peek
    dd1 = (0:L_N-1)'*d;
    theta = -90:0.1:90;                             % steer theta
    doa_a = exp(-1i*2*pi*dd1*sind(theta)/lambda);   % manifold array for seeking peak
    music = abs(diag(1./(doa_a'*(Un*Un')*doa_a)));  % the result of each theta
    music = 10*log10(music/max(music));             % normalize the result and convert it to dB
    
    %% plot
    figure;
    plot(theta, music, 'linewidth', 2);
    title('Music Algorithm For Doa', 'fontsize', 16);
    xlabel('Theta(°)', 'fontsize', 16);
    ylabel('Spatial Spectrum(dB)', 'fontsize', 16);
    grid on;
    

    前/后向空间平滑因为前/后向空间平滑的改进技术很大地提高了阵列孔径,从以上的DOA结果图可以看出分辨率提高了。

    参考论文:《阵列信号处理相关技术研究,陈四根》
    代码Code均为原创。
    欢迎转载,表明出处。

    展开全文
  • 用于一维、二维、三维轨迹平滑(对需要平滑的轴使用该函数即可) 公式 以5点MA平滑为例: ys(i)=12N+1(y(i+N)+y(i+N−1)+…+y(i−N))ys(1)=y(1)ys(2)=(y(1)+y(2)+y(3))/3ys(3)=(y(1)+y(2)+y(3)+y(4)+y(5))/5ys(4)=(y...
  • SG平滑算法记录

    2020-09-20 10:21:24
    SG平滑算法是由Savizkg和Golag提出来的。基于最小二乘原理的多项式平滑算法,也称卷积平滑。 原理 代码实现 使用了MathNet.Numerics包来进行矩阵的计算,以下是实现5点3次的代码 //y为纵坐标 private static double...
  • 今天介绍高光谱数据预处理算法中的:移动窗口平均平滑算法。 顾名思义,移动窗口平均平滑的意思就是平滑窗口在数据上移动求平均,从而对数据进行去噪。上一节我们讲的标准化是对全体样本数据的移动、缩放,从而消除...
  • 空间平滑MUSIC算法(1) 1. 前言 在上一篇博客中有提到,当多个入射信号相干时,传统MUSIC算法的效果就会不理想。具体原因是多个入射信号相干时,有部分能量就会散发到噪声子空间,使得MUSIC算法不能对其进行有效...
  • 指数加权平均算法

    千次阅读 2018-07-15 00:30:16
    在深度学习优化算法中,涉及到指数加权平均算法,这里做一个总结。 问题引入 加权平均数 假如我们现在有365天的温度,要求这365天的平均温度值。 Vaver=(θ1+θ2+θ3+...+θ365)÷365Vaver=(θ1+θ2+θ3+...+θ...
  • 空间平滑MUSIC算法(只适用于均匀线性阵列) 1、由于信号阵列会接收到不同方向上的相干信号,而相干信号会导致信源协方差矩阵的秩亏缺(不是满秩矩阵),从而使得信号特征向量发散到噪声子空间去(就是组成噪声子...
  • Savitsky-Golay 平滑算法

    千次阅读 2018-12-18 22:46:23
    Savitsky-Golay平滑算法 作用# 信号平滑处理可以除去高频噪音对数据信号的干扰,是消除噪音最常用的一种方法 算法原理# 通过多项式对移动窗口内的数据进行多项式最小二乘拟合,算出窗口内中心点关于其周围点的...
  • 地图轨迹平滑算法

    万次阅读 2016-08-04 00:21:34
    地图轨迹平滑算法,Savitzky-Golay 滤波器
  • 几个简单的数据点平滑处理算法

    万次阅读 2017-03-23 20:53:05
    在一本老版本的《数学手册》中找到了几个基于最小二乘法的数据平滑算法。将其写成了C 代码,测试了一下,效果还可以。这里简单的记录一下,算是给自己做个笔记。 算法的原理很简单,以五点三次平滑为例。取相邻的...
  • 图像空域平滑算法

    千次阅读 2015-04-02 17:32:26
    基于空间相领像素点的平滑算法是图像处理里面经常用到的去噪算法。 它的核心思想是:选择当前像素点c和其周围的一些像素{c, n1, n2, ..., nN}(共N+1个像素点),根据他们与c的距离和/或与c的像素差值,赋予他们...
  • 图像平滑平均平滑

    千次阅读 2016-11-25 09:45:23
    图像平滑中的平均平滑的实现
  • 平均算法

    千次阅读 2013-06-22 15:48:57
    1、调和平均数:Hn=n/(1/a1+1/a2+...+1/an) 2、几何平均数:Gn=(a1a2...an)^(1/n) 3、算术平均数:An=(a1+a2+...+an)/n  4、平方平均数:Qn=√ (a1^2+a2^2+...+an^2)/n  这四种平均数满足Hn≤Gn≤An≤Qn 的式...
  • 移动平均算法公式

    千次阅读 2017-08-05 22:19:00
    MA/SMA/DMA/EMA移动平均算法公式 1、简单移动平均MA 用法: MA(X,N):X的N日简单移动平均 算法(X1+X2+X3+...+Xn)/N 2、移动平均SMA 用法: SMA(X,N,M),求X的N日移动平均,M/N为给予观测值X的权重,N...
  • 蓝色为实际采样数据,红色为128次平均值,如何让红色曲线更平滑一点,达到更好的显示效果? 方案: 加权移动平均 其中影响因子ɑ越大,新数据影响越小,曲线越平滑,反之则显示越灵敏 另一种加权移动...
  • 本代码用于平滑轨迹,方法是每进入5个点,就对五个点进行处理,让其符合一段平滑曲线。前一个第五点后面新进的第一个点的链接方法是直接连线(暂未想到更好的方法,如果有就再次更新),里面有注释可以慢慢看。
  • 预测算法——指数平滑

    万次阅读 多人点赞 2016-07-21 12:59:03
    指数平滑法是移动平均法中的一种,其特点在于给过去的观测值不一样的权重,即较近期观测值的权数比较远期观测值的权数要大。根据平滑次数不同,指数平滑法分为一次指数平滑法、二次指数平滑法和三次指数平滑法等。但...
  • 算法——指数平滑

    2020-09-15 18:08:35
    指数平滑法实际上是一种特殊的加权移动平均法。其特点是: 第一,指数平滑法进一步加强了观察期近期观察值对预测值的作用,对不同时间的观察值所赋予的权数不等,从而加大了近期观察值的权数,使预测值能够迅速反映...
  • matlab移动平均算法

    2011-12-14 21:19:56
    详细介绍了利用matlab实现移动平均算法源代码。
  • 很多图像平滑技术,比如高斯平滑,中值平滑等,当噪声...NL-Means的全称是:Non-Local Means,直译过来是非局部平均,在2005年由Baudes提出,该算法使用自然图像中普遍存在的冗余信息来去噪声。与常用的双线性滤波、...
  • 平均值滤波算法是比较常用,也比较简单的滤波算法。在滤波时,将N个周期的采样值计算平均值,算法非常简单。当N取值较大时,滤波后的信号比较平滑,但是灵敏度差;相反N取值较小时,滤波平滑效果差,但灵敏度好。 ...
  • LintCode 1102. 图片平滑器 JavaScript算法

    千次阅读 2020-09-02 09:30:29
    你需要设计一个平滑器来让每一个单元的灰度成为平均灰度 (向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元格不足八个,则尽可能多的利用它们。 说明 给定矩阵中的整数范围为 [0, 255...
  • 算法学习笔记之滑动平均滤波算法

    千次阅读 2017-08-08 13:51:29
    滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区。每新采集一个数据便存入暂存区中,同时去掉一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,204
精华内容 13,281
关键字:

平滑平均算法