使用哪个 sigmoid 函数来增加图像的对比度?



是否有标准的 S 形函数用于增加灰度级位图中的对比度?

目前我正在使用以下内容。这将应用于以 0 到 1(含(之间的值表示的灰度级别。

static double ContrastCurve(double val, double k = 1)
{
Func<double,double> logistic_func = (double x) => 1.0 / (1.0 + Math.Exp(-k * (x - 0.5)));
var low = logistic_func(0);
var high = logistic_func(1);
var range = high - low;
var value = logistic_func(val);
return (value - low) / range;
}

这是应用于 0 到 1 之间的值的逻辑函数,输出归一化,因此输出也在 [0...1] 中。这个函数有效,但它完全是任意的,这是我刚刚编造的,所以k参数在图像处理文献中没有正式名称或含义等等。

如果有一个标准的函数,我更喜欢它,但没有找到任何似乎确定的东西。像这样的代码对我来说似乎是临时的。

正如Mark Setchell的评论所指出的,ImageMagick使用以下函数引用"图像处理基础"Hany Farid:

g(u) = 1 / [1 + exp(-α*u + β)]

缩放后,对于域 [0..1],其范围为 [0..1]。

这本质上是上面问题中的代码中定义的函数的两个参数版本,即问题中的代码实现相同的功能,但使替换α = kβ = -k/2,从而产生一个参数函数f当缩放时f(0.5) = 0.5,以便f(0) = 0f(1) = 1

最新更新