1

getImageChannelStatistics我正在尝试使用 Imagemagick 的函数计算图像的平均亮度。modulateImage如果达到给定的阈值,我将使用它来降低亮度。

array Imagick::getImageChannelStatistics ( void )

第一个问题: 虽然颜色深度为8,但每个通道的返回平均值大于255。如何解释这些值?

数组([平均值] => 27510.293108724 [最小值] => 0 [最大值] => 65535 [标准偏差] => 23761.909802897 [深度] => 8)

数组([平均值] => 22654.046931424 [最小值] => 0 [最大值] => 65535 [标准偏差] => 21085.309916751 [深度] => 8)

数组([平均值] => 21137.418988715 [最小值] => 0 [最大值] => 65535 [标准偏差] => 20369.810455127 [深度] => 8)

第二个问题: 图像的平均值和亮度之间有什么关系?

bool Imagick::modulateImage ( float $brightness , float $saturation , float $hue )
4

1 回答 1

1

第一个问题:平均值是通道中所有像素的算术平均值(平均值)。它与 8 位或 16 位的量子深度有关,具体取决于编译时设置。您可以调用getQuantumRange以获取最小和最大量子值。范围应该是0 - 2550 - 65535。如果将该mean值除以量程范围最大值,则会得到一个归一化为范围的值0.0 - 1.0

第二个问题modulateImage将图像转换为操作控制指定的色彩空间modulate:colorspace,默认为HSL(色相/饱和度/亮度),可以用setOption. 然后每个像素的亮度值乘以亮度参数,饱和度值乘以饱和度参数,色调参数加上色调值。亮度参数b将近似地产生平均像素值乘以 的图像b。它取决于精确的色彩空间转换和像素值的潜在裁剪。可以在ImageMagick 颜色修改示例页面上找到更多详细信息。

如果您只想更改亮度和对比度,levelImage或者contrastStretchImage可能更有效。

于 2013-10-27T16:06:57.440 回答