Imagick::sigmoidalContrastImage

(PECL imagick 2, PECL imagick 3)

Imagick::sigmoidalContrastImageAjusta el contraste de la imagen

Descripción

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

Ajusta el contraste de la imagen con un algoritmo de contraste sigmoide no lineal. Aumenta el contraste de la imagen utilizando una función de transferencia sigmoide sin saturar las luces altas y las sombras. El contraste indica cuánto debe aumentarse (0 para no hacer nada, 3 es un valor típico, 20 es un valor alto); el punto medio indica dónde estarán los tonos medios en la imagen resultante (0 corresponde a blanco, 50 a gris y 100 a negro). Establezca el parámetro sharpen en true para aumentar el contraste de la imagen; de lo contrario, el contraste se reducirá.

Consulte también los » ejemplos de ImageMagick V6 - Transformaciones de imágenes - Contraste no lineal

Parámetros

sharpen

Si es true, el contraste aumentará; de lo contrario, el contraste disminuirá.

alpha

La cantidad de contraste a aplicar. -1 representa una cantidad muy pequeña, 5 una cantidad significativa y 20 el máximo.

beta

Dónde debe situarse el punto medio del gradiente. Este valor debe estar en el intervalo 0-1, multiplicado por el valor del quantum para ImageMagick.

channel

Canales de color sobre los cuales debe aplicarse el contraste.

Valores devueltos

Devuelve true en caso de éxito.

Errores/Excepciones

Lanza ImagickException en caso de error.

Ejemplos

Ejemplo #1 Crea un degradado de imagen utilizando el método Imagick::sigmoidalContrastImage() para mezclar dos imágenes suavemente, donde la mezcla está definida por las variables $contrast y $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
11 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
9 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