The 5th Annual China PHP Conference


(PECL imagick 2.0.0)

Imagick::sigmoidalContrastImageAjusta el contraste de una imagen


bool Imagick::sigmoidalContrastImage ( bool $sharpen , float $alpha , float $beta [, int $channel = Imagick::CHANNEL_ALL ] )

Ajusta el contraste de una imagen con un algoritmo de contraste sigmoide no lineal. Aumenta el contraste de la imagen usando una función de transferencia sigmoide sin saturar los reflejos o las sombras. El contraste indica cuánto se incrementa el contraste (0 es nada; 3 es normal; 20 es enérgico); el punto medio indica dónde caen los medios tonos de la imagen resultante (0 es blanco; 50 es medio gris; 100 es negro). Establezca el parámtero sharpen a TRUE para incrementar el contraste de la imagen, si no, el contraste se reduce.

Véase también » ImageMagick v6 Examples - Image Transformations — Sigmoidal Non-linearity Contrast



Si es true, aumenta el contraste, si es false lo decrementa.


La cantidad de contraste a aplicar. 1 es muy poco, 5 es una cantidad significativa, 20 es extremo.


Donde estará el punto medio del degradado. Este valor debería estar entre 0 y 1, multiplicado por el valor de cuantía de ImageMagick.


A qué canales de color se aplicará el contraste.

Valores devueltos

Devuelve TRUE en caso de éxito.


Ejemplo #1 Crear una imagen degradada usando Imagick::sigmoidalContrastImage() apta para mezclar dos imágenes suavemente, con la mezcla definida por $contraste y el $punto_medio


function generateBlendImage($ancho$alto$contraste 10$punto_medio 0.5) {
$imagick = new Imagick();
$quanta $imagick->getQuantumRange();
$imagick->sigmoidalContrastImage(true$contraste$punto_medio $cuantías["quantumRangeLong"]);




Lanza ImagickException en caso de error.

add a note add a note

User Contributed Notes 2 notes

acameron at theatomgroup dot com
3 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.


In the Imagick extension source, the function call is:

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


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


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)
1 year 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