Imagick::sigmoidalContrastImage

(PECL imagick 2, PECL imagick 3)

Imagick::sigmoidalContrastImage调整图像对比度

描述

public Imagick::sigmoidalContrastImage(
    bool $sharpen,
    float $alpha,
    float $beta,
    int $channel = Imagick::CHANNEL_DEFAULT
): bool

使用非线性 S 形对比度算法调整图像的对比度。使用 S 形传递函数来增加图像的对比度,而不会饱和高光或阴影。对比度表示要增加对比度的程度(0 表示无;3 表示典型;20 表示过高);中点表示结果图像中中间色调的位置(0 表示白色;50 表示中间灰色;100 表示黑色)。将 sharpen 设置为 true 以增加图像对比度,否则对比度会降低。

另见 » ImageMagick v6 示例 - 图像变换 - S 形非线性对比度

参数

sharpen

如果为真,则增加对比度;如果为假,则降低对比度。

alpha

要应用的对比度量。1 表示非常小,5 表示显著量,20 表示极端。

beta

渐变的中点在哪里。此值应在 0 到 1 之间 - 乘以 ImageMagick 的量子值。

channel

将应用对比度的颜色通道。

返回值

如果成功,则返回 true

错误/异常

在错误情况下抛出 ImagickException。

示例

示例 #1 使用 Imagick::sigmoidalContrastImage() 创建适合将两个图像平滑地混合在一起的渐变图像,混合由 $contrast 和 $the 中点定义

<?php

function generateBlendImage($width, $height, $contrast = 10, $midpoint = 0.5) {
$imagick = new Imagick();
$imagick->newPseudoImage($width, $height, 'gradient:black-white');
$quanta = $imagick->getQuantumRange();
$imagick->sigmoidalContrastImage(true, $contrast, $midpoint * $quanta["quantumRangeLong"]);

return
$imagick;
}

?>

添加备注

用户贡献的备注 2 则备注

3
acameron at theatomgroup dot com
10 年前
此函数的文档实在没有用,也不方便。 "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)
0
SkepticaLee
8 年前
Thyssen 给出的 S 形对比度公式缺少一个项。它应该是

( 1/(1+exp(β*(α-u))) - 1/(1+exp(β*α)) ) / ( 1/(1+exp(β*(α-1))) - 1/(1+exp(β*α)) )

其中第二项缺少一个 α。

请注意,α = 6、β = 0.46 的 S 形对比度近似等于将图像本身的“屏幕”叠加,然后进行“乘法”叠加。
To Top