PHP Conference Japan 2024

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

使用非線性 Sigmoidal 對比度演算法調整影像的對比度。 使用 Sigmoidal 轉換函數增加影像的對比度,而不會使亮部或陰影飽和。對比度表示要增加多少對比度(0 表示無;3 表示典型;20 表示推到極限);中點表示中色調在產生的影像中的位置(0 表示白色;50 表示中灰色;100 表示黑色)。將 sharpen 設定為 true 以增加影像對比度,否則將降低對比度。

另請參閱 » ImageMagick v6 範例 - 影像轉換 — Sigmoidal 非線性對比度

參數

sharpen

如果為 true,則增加對比度;如果為 false,則降低對比度。

alpha

要套用的對比度量。 1 表示非常少,5 表示顯著量,20 表示極端。

beta

漸層的中點將在哪裡。 此值應在 0 到 1 的範圍內 - 乘以 ImageMagick 的量子值。

channel

將對比度套用至哪個顏色通道。

回傳值

成功時回傳 true

錯誤/例外

發生錯誤時擲回 ImagickException。

範例

範例 1 使用 Imagick::sigmoidalContrastImage() 建立漸層影像,適用於平滑地混合兩個影像,其中混合由 $contrast 和 $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;
}

?>

新增筆記

使用者貢獻的筆記 2 筆筆記

3
acameron at theatomgroup dot com
10 年前
此函數的文件完全無用或沒有幫助。「Sharpen」、「Contrast」和「Midpoint」不是參數的名稱,它們被稱為「alpha」和「beta」。

Imagemagick 手冊條目

對於那些感興趣的人,修正後的「Sigmoidal 非線性對比度控制」公式為...
(1/(1+exp(β*(α-u))) - 1/(1+exp(β))) / (1/(1+exp(β*(α-1))) - 1/(1+exp(β*α)))
其中 α 是閾值級別,β 是要套用的對比度因子。
該公式實際上是非常簡單的指數曲線,上述公式的大部分旨在確保 0 保持為零,1 保持為一。也就是說,圖形始終經過點 0,0 和 1,1。並且最大的變化梯度位於給定的閾值處。

來源:https://imagemagick.dev.org.tw/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
9 年前
Thyssen 給出的 Sigmoidal 對比度公式缺少一個項。它應該是

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

其中第二項缺少一個 α。

請注意,α = 6 和 β = 0.46 的 Sigmoidal 對比度大約相當於將影像的「螢幕」覆蓋層與自身組合,然後使用「乘法」覆蓋層。
To Top