哪个 sigmoid 函数用于增加图像的对比度?
Which sigmoid function to use for increasing contrast of an image?
是否有标准的 sigmoidal 函数用于增加灰度位图中的对比度?
目前我正在使用以下。这将应用于以 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;
}
这是 the logistic function 应用于 0 和 1 之间的值,输出标准化,因此输出也在 [0...1] 中。此函数有效,但它完全是任意的,这是我刚刚编造的,因此 k
参数在图像处理文献等方面没有正式名称或含义。
如果有一个标准的功能,我会更喜欢它,但还没有找到任何看起来确定的功能。这样的代码 as this link 对我来说似乎是临时的。
正如 Mark Setchell 的评论所述,ImageMagick uses the following function citing "Fundamentals of Image Processing", Hany Farid:
g(u) = 1 / [1 + exp(-α*u + β)]
缩放使得域 [0..1] 的范围为 [0..1]。
这本质上是上述问题代码中定义的函数的两个参数版本,即问题中的代码实现了相同的功能,但进行了替换 α = k
和 β = -k/2
从而产生一个单参数函数 f
其中 f(0.5) = 0.5
缩放后 f(0) = 0
和 f(1) = 1
.
是否有标准的 sigmoidal 函数用于增加灰度位图中的对比度?
目前我正在使用以下。这将应用于以 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;
}
这是 the logistic function 应用于 0 和 1 之间的值,输出标准化,因此输出也在 [0...1] 中。此函数有效,但它完全是任意的,这是我刚刚编造的,因此 k
参数在图像处理文献等方面没有正式名称或含义。
如果有一个标准的功能,我会更喜欢它,但还没有找到任何看起来确定的功能。这样的代码 as this link 对我来说似乎是临时的。
正如 Mark Setchell 的评论所述,ImageMagick uses the following function citing "Fundamentals of Image Processing", Hany Farid:
g(u) = 1 / [1 + exp(-α*u + β)]
缩放使得域 [0..1] 的范围为 [0..1]。
这本质上是上述问题代码中定义的函数的两个参数版本,即问题中的代码实现了相同的功能,但进行了替换 α = k
和 β = -k/2
从而产生一个单参数函数 f
其中 f(0.5) = 0.5
缩放后 f(0) = 0
和 f(1) = 1
.