ios - 高斯方程的缩放

标签 ios algorithm image-processing gaussian

我在 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 是预期的典型钟形曲线。

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

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

Variance of SD of Gaussian Curve

现在,给出标准符号:

gaussian curve equation

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

我对这个概念有点困惑。

您能否让我知道如何按预定义的比率缩放标准偏差,即我可能希望将其缩放为原始 SD 的 1.34 或 3.78 倍,并且它将相应地将 +3sigma 缩放到 -3sigma 跨度。

最佳答案

此处的计算:

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

没有反射(reflect)您展示的高斯公式。应该是这样的:

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(或其他值)以获得您想要的效果。

关于ios - 高斯方程的缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16293507/

相关文章:

ios - 在iOS中通过同步下载更新进度指示器,无法在主线程上更新UI?

java - 拼图问题中a*搜索算法的深度

c++ - C++ 中的不相交集实现

找到包围一个点的线的算法

java - OpenCV 中的 Canny 边缘检测器

python - 相机标定opencv python

ios - 如何清除从 SDWebImage 加载的所有缓存图像?

ios - 如何以编程方式创建多个选择器 View

android - 以位图作为覆盖流式传输视频

objective-c - 图像特定区域的平滑