Dutch PHP Conference 2025 - Call For Papers

Imagick::sigmoidalContrastImage

(PECL imagick 2, PECL imagick 3)

Imagick::sigmoidalContrastImageAjusta o contraste de uma imagem

Descrição

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

Ajusta o contraste de uma imagem com um algoritmo de contraste sigmoide não linear. Aumenta o contraste da imagem usando uma função de transferência sigmoide sem saturar realces ou sombras. O parâmetro 'alpha' indica quanto aumentar o contraste (0 é nada; 3 é típico; 20 é muito); o parâmetro 'beta' indica onde os tons médios caem na imagem resultante (0 é branco; 50 é cinza médio; 100 é preto). Defina 'sharpen' true para aumentar o contraste da imagem, caso contrário o contraste será reduzido.

Consulte também » Exemplos do ImageMagick v6 - Transformações de Imagem - Constraste Não-linear Sigmoide

Parâmetros

sharpen

Se definido para true, aumenta o contraste, se definido para false, diminui o contraste.

alpha

A quantidade de contraste a ser aplicada. 1 é muito pouco, 5 é uma quantia significativa, 20 é extremo.

beta

Define onde estará o ponto médio do gradiente. Este valor deve estar no intervalo de 0 a 1 - multiplicado pelo valor Quantum do ImageMagick.

channel

Em quais canais de cores o contraste será aplicado.

Valor Retornado

Retorna true em caso de sucesso.

Erros/Exceções

Lança uma exceção ImagickException em caso de erro.

Exemplos

Exemplo #1 Cria uma imagem gradiente usando Imagick::sigmoidalContrastImage() adequado para mesclar duas imagens suavemente, com a mesclagem definida por $contrast e $midpoint

<?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;
}

?>

add a note

User Contributed Notes 2 notes

up
2
acameron at theatomgroup dot com
10 years ago
The documentation for this function really isn't useful or helpful at all. "Sharpen", "Contrast" and "Midpoint" aren't the names of the params, which are referred to as "alpha" and "beta".

The Imagemagick manual entry:

For those interested, the corrected formula for the 'sigmoidal non-linearity contrast control' is...
( 1/(1+exp(β*(α-u))) - 1/(1+exp(β)) ) / ( 1/(1+exp(β*(α-1))) - 1/(1+exp(β*α)) )
Where α is the threshold level, and β the contrast factor to be applied.
The formula is actually very simple exponential curve, with the bulk of the above formula is designed to ensure that 0 remains zero and 1 remains one. That is, the graph always goes though the points 0,0 and 1,1. And the highest gradient of change is at the given threshold.

Src: http://www.imagemagick.org/Usage/color_mods/#sigmoidal

In the Imagick extension source, the function call is:

status = MagickSigmoidalContrastImageChannel(intern->magick_wand, channel, sharpen, alpha, beta);

Src: https://github.com/mkoppanen/imagick/

Referring back to the binary API call gives:

foreign import ccall "MagickSigmoidalContrastImageChannel" magickSigmoidalContrastImageChannel
:: Ptr MagickWand
-> ChannelType -- ^ identify which channel to level: `redChannel`, `greenChannel`
-> MagickBooleanType -- ^ increase or decrease image contrast
-> CDouble -- ^ strength of the contrast, the larger the number the more 'threshold-like' it becomes
-> CDouble -- ^ midpoint of the function as a color value 0 to `quantumRange`
-> IO MagickBooleanType

Src: http://hackage.haskell.org/package/imagemagick-0.0.2/docs/src/Graphics-ImageMagick-MagickWand-FFI-WandImage.html

So the parameters should apparently be interpreted:

Sharpen: 0/1 (increase/decrease contrast)
Alpha: Strength of the contrast (typically 3-20)
Beta: Midpoint of the contrast (typically 50)
up
0
SkepticaLee
8 years ago
The formula for sigmoidal contrast given by Thyssen is missing a term. It should be:

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

where there was an α missing from the second term.

Note that a sigmoidal contrast with α = 6 and β = 0.46 is approximately equivalent to combining a "screen" overlay of the image on itself, followed by a "multiply" overlay.
To Top