【问题标题】:Scaling of Gaussian Equation高斯方程的标度
【发布时间】:2013-04-30 06:22:42
【问题描述】:

我在 iOS 应用程序中对特定照片效果使用高斯方程。

我使用:

   double sigmaX = ...; //some value here

   for(int i=0;i<height;i++) 
    {
       double F = 0;
       double step = -(pos)*width/20;

    /*height,width,pos - all predefined, no problem there*/

     for(int j=0;j<4*width;j+=4)
     {

      F = (double) ((1/1)*exp(-sigmaX*(pow((step++)/1, 2.0)))) ;
      //do some operation here...

      }
    }

并且F的值用于确定在其他地方用完的特定强度。

到目前为止一切都很好.... F 是预期的典型钟形曲线。

但是,问题是,我想根据用户输入来缩放这条曲线的标准差。

例如,在下图中,我想将曲线从绿线移到红线(蓝色可能是中间线),希望以线性步骤:

现在,给定标准符号:

并将它与我在代码中实现它的方式进行比较,我得到了改变 1/sqrt(sigmaX) 以改变比例/SD 的想法。我尝试以线性步长增加 1/sqrt(sigmaX)(以获得线性增量)或通过 x^n 来获得 SD 中 n 增量的幂,但这些都不起作用。

我有点坚持这个概念。

您能否告诉我如何按预定义的比率缩放标准偏差,即我可能希望它是原始 SD 的 1.34 或 3.78 倍,它会相应地将 +3sigma 扩展到 -3sigma 跨度。

【问题讨论】:

    标签: ios algorithm image-processing gaussian


    【解决方案1】:

    你的计算:

    F = (double) ((1/1)*exp(-sigmaX*(pow((step++)/1, 2.0)))) ;
    

    没有反映您显示的高斯公式。应该是这样的:

    double dSigma = 1.0;
    static const double dRootTwoPi = sqrt(2.0 * M_PI);
    
    F = (1.0 / (dSigma * dRootTwoPi)) * exp(-0.5 * pow(step++ / dSigma, 2.0));
    

    然后您可以将 dSigma 从 1.0 更改为 3.0(或其他)以获得您想要的效果。

    【讨论】:

    • 我并不是要在我的代码中完全遵循标准格式......这就是为什么我将 1.0 / (dSigma * dRootTwoPi) 部分更改为 1/1(只是一个常数)。所以我试图改变 1/sqrt(sigmaX) 而不是单独的 sigmaX。你在这里提到的是高斯方程的标准接受实现......但问题是 exp(-sigmaX*(pow((step++)/1, 2.0))) 在这里我的情况很好:),所以我很懒并在很多地方实现了这一点,一切都很好,除了“放大和缩小”位出错了。我们可以按原样修正这个方程吗?理论上,这不可能!
    • 这并不容易,因为假设 sigma 为 1.0,您应该更改为 (1/2.5) 而不是 (1/1),因为 pow 中的除数也是 sigma (1.0 ) - 所以你的方程已经使用了两个不同的 sigma。你不能通过改变exp 上的标量来解决这个问题——当然你会得到一个类似高斯的曲线,但它不会是高斯的。我认为这是您最初问题的根源。
    • 是的,罗杰,你是对的。我正在做的不是高斯的,它看起来很像高斯。现在正在修改代码。一旦我让它工作,就会发布结果。感谢您的帮助。
    【解决方案2】:

    感谢 Roger Rowland 的帮助...我终于完成了这项工作:

    将高斯函数改为:

       sigmaX*=scaling;
       F = (double) ((scaling / (sigmaX))*exp(-0.0005*(powf((step++/sigmaX), 2.0)))) ;
    

    确实,我之前所做的并不完全是高斯的。根据 scaling 参数,这可以正常工作并且可以很好地缩放。

    再次感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2013-12-14
      • 2020-09-09
      • 2014-01-17
      • 2016-09-20
      相关资源
      最近更新 更多