精华内容
下载资源
问答
  • 62.5%</code> 导致在chrome上使用了rem单位的容器计算出来的正常的尺寸会有偏差(实际上在移动端设备上显示的又没有问题)。 这个问题的主要原因就是在pc上默认浏览器的字体最小只能显示 <code>12px大小...
  • 使用这个方法遇到了两个个问题,使用反正切计算后得到的预测结果偏差很大(模型训练时损失在0.02以下),另一个问题是,由于模型有误差,当真实值接近1(标准化以后)时,模型预测可能超过1,这样计算反正切结果为负...
  • 怎么用matlab剔除数据的异常值(3σ准则)

    万次阅读 热门讨论 2020-06-25 10:15:05
    3σ准则又称为拉依达准则,它是先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间, 认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以...

    参考:https://blog.csdn.net/weixin_30633405/article/details/95177009

    3σ准则又称为拉依达准则,它是先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,

    认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。且3σ适用于有较多组数据的时候。

    这种判别处理原理及方法仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数充分大为前提的,

    当测量次数较少的情形用准则剔除粗大误差是不够可靠的。因此,在测量次数较少的情况下,最好不要选用准则,而用其他准则。

    在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴

    3σ原则为

    数值分布在(μ-σ,μ+σ)中的概率为0.6826

    数值分布在(μ-2σ,μ+2σ)中的概率为0.9544

    数值分布在(μ-3σ,μ+3σ)中的概率为0.9974

    可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%.

     

    我的数据是244*119,即有244组样品,第一列是位置信息,随后的各个列为变量信息,即每一列为一个变量,剔除每一列中的异常值。

    下面的代码实现的功能是找出剔除的异常值的位置信息,

    for ii = 3:119
        P=data_jd(:,ii);
        ave = mean(P);%mean 求解平均值
        u = std(P);%求解标准差
        for i = 1:244
            if(abs(P(i)-ave)>3*u)
                P(i) = 0;
                P_ans = P(P==0);
                len=length(P_ans);
                if len == []
                    continue
                else
                    location=find(P==0)
                    if len == 1
                        loc(1,ii)=location
                    else
                        for iii=1:len
                            loc(iii,ii)=location(iii)
                        end
                    end
                end
            else
                continue;
            end
        end
    
    end
    
    ans=loc(loc~=0);
    ans=unique(ans);#删除重复的值
    
    %% 根据索引去除异常值
    data_jd(ans,:)=[]

     

     

    展开全文
  • 例如:采用的是2003年07月24日10时10分喀什地震台日常监测中记录中的一个关于地震信号的记录图,获取点与震中距喀什地震台偏差121km。(书上的,想试试,但是这个无法获取) 部分程序: ``` load grbx3.txt %...
  • matlab ssim怎么运行?

    2018-10-27 11:08:43
    % 参数一个标准偏差1.5,11*11的高斯低通滤波。 K(1) = 0.01; % default settings K(2) = 0.03; L = 255; end if (nargin == 3) if ((M ) | (N )) ssim_index = -Inf; ssim_map = -Inf; return ...
  • 高斯滤波(高斯平滑)是数字图像处理和计算机视觉里面最常见的操作。平时,我们都是用Matlab或者OpenCV的函数调用:imfilter或者...2、给定窗口大小,怎么计算高斯核的sigma,即标准偏差? 3、怎么实现可分离滤波器?
  • matlab std函数 用法及实例

    万次阅读 2017-06-14 10:34:55
    MATLAB常常用到std函数来进行标准差计算,...std函数是用来计算标准偏差的一个函数,由于其有不同的参数,我们就用下面的例子进行介绍: A =  1 2 3  1 1 1 标准差的两种计算公式如下: 步骤阅读 2
    MATLAB常常用到std函数来进行标准差计算,下面我就通过实例介绍一下 matlab std函数怎么用。
    

    方法/步骤

    1. std函数是用来计算标准偏差的一个函数,由于其有不同的参数,我们就用下面的例子进行介绍:

      A =

           1     2     3

           1     1     1

      标准差的两种计算公式如下:

    2. std(A):

      std(A)函数求解的是最常见的标准差,此时除以的是N-1。

      注意:此函数命令不能对矩阵求整体的标准差,只能按照行或者列进行逐个求解标准差,默认情况下是按照列。

      在MATLAB主窗口中输入std(A) 回车,结果如下:

      输出的是每一列的标准差。

    3. std(A,flag):

      这里flag代表的是用哪一个标准差函数,如果取0,则代表除以N-1,如果是1代表的是除以N,

      我们在MATLAB主窗口中输入std(A,1)  回车,std(A,0)  回车,可以看到如下结果

    4. std(A,flag,dim):

      第三个参数代表的是按照列求标准差还是按照行求标准差,std(A,1,1)代表的是按照列求标准差,std(A,1,2)代表的是按照行求标准差。

      在MATLAB主窗口中输入如下命令:std(A,1,1) 敲回车 std(A,1,2) 敲回车

      可以看到如下结果:

      END
    展开全文
  • 高斯滤波(高斯平滑)是图像处理,计算机视觉里面最常见的操作。...给定sigma,即标准偏差,怎么确定离散化后滤波器的窗口大小?给定窗口大小,怎么计算高斯核的sigma,即标准方差?怎么实现可分离滤波器?

    原文 http://blog.csdn.net/hachirou/article/details/6280200

    高斯滤波(高斯平滑)是图像处理,计算机视觉里面最常见的操作。平时,我们都是用matlab或者opencv的函数调用:imfilter或者cvSmooth,并不关心底层的实现。然而当开发者要实做高斯滤波的时候,往往就会很迷惘,往往会被以下几个问题困扰:

    1. 给定sigma,即标准偏差,怎么确定离散化后滤波器的窗口大小?
    2. 给定窗口大小,怎么计算高斯核的sigma,即标准方差?
    3. 怎么实现可分离滤波器?

    我在google上搜了一下,还真没几个人把实现的细节讲清楚了。这里,我尝试结合三份源码,做个小小的总结。

    三份源码分别是:

    1. opencv 中的cvfilter.cpp
    2. autopano-sift-c 中的GaussianConvolution.c
    3. GIMP 中的blur-gauss.c和unsharp-mask.c

    在图像处理中,高斯滤波一般有两种实现方式,一是用离散化窗口滑窗卷积,另一种通过傅里叶变换。最常见的就是第一种滑窗实现,只有当离散化的窗口非 常大,用滑窗计算量非常大(即使用可分离滤波器的实现)的情况下,可能会考虑基于傅里叶变化的实现方法。这里我们只讨论第一种方法。

    二维高斯函数的形式是这样的:

    f(x,y) = A e^{- /left(/frac{(x-x_o)^2}{2/sigma_x^2} + /frac{(y-y_o)^2}{2/sigma_y^2} /right)}.

    有着如下的形状,形状很激凸,怎么会叫高斯平滑呢,分明是高斯激凸嘛:

    基本上,离散化的主旨就是保留高斯函数中心能量最集中的中间部分,忽略四周能量很小的平坦区域。这只是个很感性的描述,具体实现起来,就会出现千奇百怪的版本。下面结合三份源码,看看现实世界里的高斯平滑到底长的什么样子。

    首先是第一个问题:给定sigma,怎么计算窗口大小?

    直接上opencv的源码,在cvFilter函数中:

    param1 = cvRound(sigma1*(depth == CV_8U ? 3 : 4)*2 + 1)|1;

    opencv认为半径为3*sigma的窗口就是高斯函数能量最集中的区域。(为什么在图像深度不是8U的时候,使用4*sigma半径的窗口就不得而知了,有高人指点一下?)

    autopan0-sift-c是图像拼接软件hugin里面的sift实现,在实现DoG的时候需要做不同尺度的高斯平滑,实现如下,在GaussianConvolution_new1函数中:

    dim = 1 + 2 * ((int) (3.0 * sigma));

    可见autopano也是实现的3*sigma半径的窗口。

    在GIMP里,实现比较奇特,在blur_gauss.c的make_rle_curve函数里面,

    const gdouble sigma2 = 2 * sigma * sigma;
    const gdouble l = sqrt (-sigma2 * log (1.0 / 255.0));
    int n = ceil (l) * 2;
    if ((n % 2) == 0)
    n += 1;

    我是没看懂那个 log (1.0 / 255.0)是干嘛的。。。惭愧。效果来看,这个实现的窗口半径是约等于2.2*sigma。

    然后是第二个问题:给定窗口大小,怎么计算sigma?

    opencv的实现,在cvFilter.cpp的init_gaussian_kernel函数中:

    sigmaX = sigma > 0 ? sigma : (n/2 – 1)*0.3 + 0.8;

    再次不可解。。。乘以0.3还可以接受,加上0.8是为嘛啊?

    autopano没有实现这个特性。

    GIMP的实现:

    /* we want to generate a matrix that goes out a certain radius
    * from the center, so we have to go out ceil(rad-0.5) pixels,
    * inlcuding the center pixel. Of course, that’s only in one direction,
    * so we have to go the same amount in the other direction, but not count
    * the center pixel again. So we double the previous result and subtract
    * one.
    * The radius parameter that is passed to this function is used as
    * the standard deviation, and the radius of effect is the
    * standard deviation * 2. It’s a little confusing.
    */
    radius = fabs (radius) + 1.0;

    std_dev = radius;
    radius = std_dev * 2;
    /* go out ‘radius’ in each direction */
    matrix_length = 2 * ceil (radius – 0.5) + 1;

    注释讲的很清楚了,基本上就是认为sigma应该等于窗口半径的一半。

    看完这三分源码,结论就是,关于sigma和半径,你爱怎么算就怎么算吧,差不多就行。。。(额。。费了半天劲,就得到这么一句废话啊)。

    第三个问题是可分离滤波器:

    由于高斯函数可以写成可分离的形式,因此可以采用可分离滤波器实现来加速。所谓的可分离滤波器,就是可以把多维的卷积化成多个一维卷积。具体到二维 的高斯滤波,就是指先对行做一维卷积,再对列做一维卷积。这样就可以将计算复杂度从O(M*M*N*N)降到O(2*M*M*N),M,N分别是图像和滤 波器的窗口大小。问题是实现时候怎么计算一维的卷积核呢?

    其实很简单,按照前面计算出来的窗口大小,计算所有离散点上一维高斯函数的权值,最后别忘了将权值之和归一化到1.
    有码有真相,来自opencv:

    for( i = 0; i <= n/2; i++ )
    {
    double t = fixed_kernel ? (double)fixed_kernel[i] : exp(scale2X*i*i);
    if( type == CV_32FC1 )
    {
    cf[(n/2+i)*step] = (float)t;
    sum += cf[(n/2+i)*step]*2;
    }
    else
    {
    cd[(n/2+i)*step] = t;
    sum += cd[(n/2+i)*step]*2;
    }
    }

    sum = 1./sum;
    for( i = 0; i <= n/2; i++ )
    {
    if( type == CV_32FC1 )
    cf[(n/2+i)*step] = cf[(n/2-i)*step] = (float)(cf[(n/2+i)*step]*sum);
    else
    cd[(n/2+i)*step] = cd[(n/2-i)*step] = cd[(n/2+i)*step]*sum;
    }

    终于写完了,希望对各位有所帮助。不对之处请指正哈。

    展开全文
  • gauss 函数

    千次阅读 2011-03-26 17:16:00
    然而当开发者要实做高斯滤波的时候,往往就会很迷惘,往往会被以下几个问题困扰:给定sigma,即标准偏差,怎么确定离散化后滤波器的窗口大小?给定窗口大小,怎么计算高斯核的sigma,即标准方差?怎么实现可分离...

    高斯滤波(高斯平滑)是图像处理,计算机视觉里面最常见的操作。平时,我们都是用matlab或者opencv的函数调用:imfilter或者cvSmooth,并不关心底层的实现。然而当开发者要实做高斯滤波的时候,往往就会很迷惘,往往会被以下几个问题困扰:

    1. 给定sigma,即标准偏差,怎么确定离散化后滤波器的窗口大小?
    2. 给定窗口大小,怎么计算高斯核的sigma,即标准方差?
    3. 怎么实现可分离滤波器?

    我在google上搜了一下,还真没几个人把实现的细节讲清楚了。这里,我尝试结合三份源码,做个小小的总结。

    三份源码分别是:

    1. opencv 中的cvfilter.cpp
    2. autopano-sift-c 中的GaussianConvolution.c
    3. GIMP 中的blur-gauss.c和unsharp-mask.c

    在图像处理中,高斯滤波一般有两种实现方式,一是用离散化窗口滑窗卷积,另一种通过傅里叶变换。最常见的就是第一种滑窗实现,只有当离散化的窗口非 常大,用滑窗计算量非常大(即使用可分离滤波器的实现)的情况下,可能会考虑基于傅里叶变化的实现方法。这里我们只讨论第一种方法。

    二维高斯函数的形式是这样的:

    f(x,y) = A e^{- /left(/frac{(x-x_o)^2}{2/sigma_x^2} + /frac{(y-y_o)^2}{2/sigma_y^2} /right)}.

    有着如下的形状,形状很激凸,怎么会叫高斯平滑呢,分明是高斯激凸嘛:

    基本上,离散化的主旨就是保留高斯函数中心能量最集中的中间部分,忽略四周能量很小的平坦区域。这只是个很感性的描述,具体实现起来,就会出现千奇百怪的版本。下面结合三份源码,看看现实世界里的高斯平滑到底长的什么样子。

    首先是第一个问题:给定sigma,怎么计算窗口大小?

    直接上opencv的源码,在cvFilter函数中:

    param1 = cvRound(sigma1*(depth == CV_8U ? 3 : 4)*2 + 1)|1;

    opencv认为半径为3*sigma的窗口就是高斯函数能量最集中的区域。(为什么在图像深度不是8U的时候,使用4*sigma半径的窗口就不得而知了,有高人指点一下?)

    autopan0-sift-c是图像拼接软件hugin里面的sift实现,在实现DoG的时候需要做不同尺度的高斯平滑,实现如下,在GaussianConvolution_new1函数中:

    dim = 1 + 2 * ((int) (3.0 * sigma));

    可见autopano也是实现的3*sigma半径的窗口。

    在GIMP里,实现比较奇特,在blur_gauss.c的make_rle_curve函数里面,

    const gdouble sigma2 = 2 * sigma * sigma;
    const gdouble l = sqrt (-sigma2 * log (1.0 / 255.0));
    int n = ceil (l) * 2;
    if ((n % 2) == 0)
    n += 1;

    我是没看懂那个 log (1.0 / 255.0)是干嘛的。。。惭愧。效果来看,这个实现的窗口半径是约等于2.2*sigma。

    然后是第二个问题:给定窗口大小,怎么计算sigma?

    opencv的实现,在cvFilter.cpp的init_gaussian_kernel函数中:

    sigmaX = sigma > 0 ? sigma : (n/2 – 1)*0.3 + 0.8;

    再次不可解。。。乘以0.3还可以接受,加上0.8是为嘛啊?

    autopano没有实现这个特性。

    GIMP的实现:

    /* we want to generate a matrix that goes out a certain radius
    * from the center, so we have to go out ceil(rad-0.5) pixels,
    * inlcuding the center pixel. Of course, that’s only in one direction,
    * so we have to go the same amount in the other direction, but not count
    * the center pixel again. So we double the previous result and subtract
    * one.
    * The radius parameter that is passed to this function is used as
    * the standard deviation, and the radius of effect is the
    * standard deviation * 2. It’s a little confusing.
    */
    radius = fabs (radius) + 1.0;

    std_dev = radius;
    radius = std_dev * 2;
    /* go out ‘radius’ in each direction */
    matrix_length = 2 * ceil (radius – 0.5) + 1;

    注释讲的很清楚了,基本上就是认为sigma应该等于窗口半径的一半。

    看完这三分源码,结论就是,关于sigma和半径,你爱怎么算就怎么算吧,差不多就行。。。(额。。费了半天劲,就得到这么一句废话啊)。

    第三个问题是可分离滤波器:

    由于高斯函数可以写成可分离的形式,因此可以采用可分离滤波器实现来加速。所谓的可分离滤波器,就是可以把多维的卷积化成多个一维卷积。具体到二维 的高斯滤波,就是指先对行做一维卷积,再对列做一维卷积。这样就可以将计算复杂度从O(M*M*N*N)降到O(2*M*M*N),M,N分别是图像和滤 波器的窗口大小。问题是实现时候怎么计算一维的卷积核呢?

    其实很简单,按照前面计算出来的窗口大小,计算所有离散点上一维高斯函数的权值,最后别忘了将权值之和归一化到1.
    有码有真相,来自opencv:

    for( i = 0; i <= n/2; i++ )
    {
    double t = fixed_kernel ? (double)fixed_kernel[i] : exp(scale2X*i*i);
    if( type == CV_32FC1 )
    {
    cf[(n/2+i)*step] = (float)t;
    sum += cf[(n/2+i)*step]*2;
    }
    else
    {
    cd[(n/2+i)*step] = t;
    sum += cd[(n/2+i)*step]*2;
    }
    }

    sum = 1./sum;
    for( i = 0; i <= n/2; i++ )
    {
    if( type == CV_32FC1 )
    cf[(n/2+i)*step] = cf[(n/2-i)*step] = (float)(cf[(n/2+i)*step]*sum);
    else
    cd[(n/2+i)*step] = cd[(n/2-i)*step] = cd[(n/2+i)*step]*sum;
    }

    终于写完了,希望对各位有所帮助。不对之处请指正哈。

    展开全文
  • 1588标准的内容其实很多、很细,但终究是做网络时钟同步,所有方法和机制最终都是为计算出slave clock和master clock的时间偏差。所以想最快,最直观的了解1588是怎么同步网络中的时钟,那就应该看标准中最基本的E2E...
  • 所得数据集包含每个受试者和活动的每次测量的平均值和标准偏差的平均值。 原始数据集: : 有关原始数据集的更多信息,请访问: : 这个怎么运作 run_analysis.R执行的分析首先检查当前文件夹中是否存在原始数据...
  • 实现了数据加密标准( Data Encryption Standard,DES)和三重数据加密算法( TripleData Encryption Algorithm, TDEA) dsa 实现了FIPS 186-3所定义的数据签名算法( Digital Signature Algorithm) ecdsa ...
  • 工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档...
  • <div><p>学习 React 的过程中实现了一个个人...或者是我的想法有偏差的,欢迎大家交流指正 欢迎参观:<a href="http://axuebin.com/react-blog">http://axuebin.com/react-blog</a></p> <p>Github:...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

标准偏差怎么计算