Imagick::sigmoidalContrastImage

(PECL imagick 2, PECL imagick 3)

Imagick::sigmoidalContrastImageAjuste le contraste de l'image

Description

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

Ajuste le contraste de l'image avec un algorithme de contraste sigmoïde non linéaire. Augmente le contraste de l'image en utilisant une fonction de transfert sigmoïde sans saturer les hautes lumières ni les ombres. alpha indique de combien augmenter le contraste : 0.00 pour ne rien faire ; 3.00 est une valeur typique ; 20.00 est une valeur poussée. beta indique où se situent les tons moyens dans l'image résultante, sous la forme d'une fraction de la plage de quantum : 0.0 correspond au blanc, 0.5 au gris moyen, 1.0 au noir (multiplier par getQuantumRange()['quantumRangeLong'] pour obtenir la valeur à passer).

Voir aussi les » exemples d'ImageMagick -- Modifications de couleurs — Le contraste non linéaire sigmoïde.

Liste de paramètres

sharpen

Si vaut true, le contraste augmentera, sinon, le contraste diminuera.

alpha

La quantité de contraste à appliquer. 1.00 représente une toute petite quantité, 5.00 représente une quantité significative, 20.00 est extrême.

beta

Où doit se situer le milieu du gradient. Cette valeur doit être dans l'intervalle 0.00 à 1.00, multipliée par la valeur du quantum pour ImageMagick.

channel

Canaux de couleurs sur lesquels le contraste doit s'appliquer.

Valeurs de retour

Retourne true en cas de succès.

Erreurs / Exceptions

Lance une exception ImagickException si une erreur survient.

Exemples

Exemple #1 Crée un gradient d'image en utilisant la méthode Imagick::sigmoidalContrastImage() pour mélanger deux images en douceur, où le mélange est défini par alpha et beta

<?php

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

    return $imagick;
}
add a note

User Contributed Notes 2 notes

up
4
acameron at theatomgroup dot com
12 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
10 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.