optimization - "high contrast"曲线的快速公式

标签 optimization math formula

我的内部循环包含一个计算,分析显示有问题。

这个想法是采用灰度像素 x (0 <= x <= 1),并“增加其对比度”。我的要求相当宽松,只有以下几点:

  • 对于 x < .5, 0 <= f(x) < x
  • 对于 x > .5,x < f(x) <= 1
  • f(0) = 0
  • f(x) = 1 - f(1 - x),即它应该是“对称的”
  • 优选地,该函数应该是平滑的。

  • 所以图形必须是这样的:

    Graph .

    我有两个实现(它们的结果不同,但都一致):
    float cosContrastize(float i) {
        return .5 - cos(x * pi) / 2;
    }
    
    float mulContrastize(float i) {
        if (i < .5) return i * i * 2;
        i = 1 - i;
        return 1 - i * i * 2;
    }
    

    因此,我请求对这些实现之一进行微优化,或者您自己的原始、更快的公式。

    也许你们中的一个人甚至可以摆弄这些位 ;)

    最佳答案

    考虑以下 sigmoid -形函数(正确转换为所需范围):

  • error function
  • normal CDF
  • tanh
  • logit

  • screenshot

    我使用MATLAB生成了上图。如果有兴趣这里是代码:
    x = -3:.01:3;
    plot(   x, 2*(x>=0)-1, ...
            x, erf(x), ...
            x, tanh(x), ...
            x, 2*normcdf(x)-1, ...
            x, 2*(1 ./ (1 + exp(-x)))-1, ...
            x, 2*((x-min(x))./range(x))-1  )
    legend({'hard' 'erf' 'tanh' 'normcdf' 'logit' 'linear'})
    

    关于optimization - "high contrast"曲线的快速公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479980/

    相关文章:

    java - 将 Map<String,String> 转换为 Map<String,Object>

    c# - 在托管代码中,如何实现良好的引用位置?

    javascript - 在 JavaScript 中精确生成随机数

    vba - 在单元格中输入公式会生成应用程序定义或对象定义的错误

    c - 如何在位图中的位之间插入零?

    c++ - 大型缓冲区与大型静态缓冲区,有优势吗?

    math - float 学有问题吗?

    c# - 从 3D 到 2D 的平滑过渡

    java - 计算出圆形图案的坐标?

    string - Excel空字符串公式