此函数的文档实在没有用,也不方便。 "Sharpen"、"Contrast" 和 "Midpoint" 不是参数的名称,参数名为 "alpha" 和 "beta"。
Imagemagick 手册条目
对于有兴趣的人,"S 形非线性对比度控制" 的修正公式是...
( 1/(1+exp(β*(α-u))) - 1/(1+exp(β)) ) / ( 1/(1+exp(β*(α-1))) - 1/(1+exp(β*α)) )
其中 α 是阈值,β 是要应用的对比度因子。
该公式实际上是一个非常简单的指数曲线,上述公式的大部分内容旨在确保 0 仍然为零,1 仍然为一。也就是说,该图始终经过点 0,0 和 1,1。变化的最大梯度是在给定的阈值处。
来源:https://imagemagick.org.cn/Usage/color_mods/#sigmoidal
在 Imagick 扩展源代码中,函数调用是
status = MagickSigmoidalContrastImageChannel(intern->magick_wand, channel, sharpen, alpha, beta);
来源:https://github.com/mkoppanen/imagick/
参考二进制 API 调用,结果是
foreign import ccall "MagickSigmoidalContrastImageChannel" magickSigmoidalContrastImageChannel
:: Ptr MagickWand
-> ChannelType -- ^ 确定要调整哪个通道:`redChannel`、`greenChannel`
-> MagickBooleanType -- ^ 增加或降低图像对比度
-> CDouble -- ^ 对比度的强度,数字越大,它就越像“阈值”
-> CDouble -- ^ 函数的中点,作为 0 到 `quantumRange` 的颜色值
-> IO MagickBooleanType
来源:http://hackage.haskell.org/package/imagemagick-0.0.2/docs/src/Graphics-ImageMagick-MagickWand-FFI-WandImage.html
因此,参数应按以下方式解释
Sharpen:0/1(增加/降低对比度)
Alpha:对比度的强度(通常为 3-20)
Beta:对比度中点(通常为 50)