如何在PHP中选择具有更高对比度的图像?

时间:2009-05-31 20:21:54

标签: image contrast

对于缩略图引擎,我想开发一种算法,从图像中获取x随机缩略图(裁剪,不调整大小),分析它们的对比度并选择具有最高对比度的缩略图。我正在使用PHP和Imagick,但我很乐意提供一些关于如何计算图像对比度的一般提示。

似乎许多事情比计算对比度更容易,例如计算颜色,计算亮度等等。

您对图片资料的分析有哪些经验?

2 个答案:

答案 0 :(得分:2)

我这样做(伪代码):

L[256] = {0,0,0...}

loop over each pixel:
    luminance = avg(R,G,B)
    increment L[luminance] by 1

for i = 0 to 255:
    if L[i] < C: L[i] = 0       // C = threshold of your chose

find index of first and last non-zero value of L[]
contrast = last - first

答案 1 :(得分:1)

在寻找“具有最高对比度”的图像时,您需要非常小心地定义图像的对比度。最简单的方法是,对比度是图像中最低强度和最高强度之间的差异。在你的情况下,这不会非常有用。

我建议您使用直方图方法来描述给定图像的对比度,然后比较直方图的属性,以确定具有最高对比度的图像。您可以使用各种众所周知的容器来代表代码中的直方图,或构建一个类来满足您的特定需求。 (我并不是说您需要以图表的形式创建直方图 - 只是强度值的统计表示。)您可以直接使用每个直方图的方差作为对比度的度量,或者使用标准偏差,如果这更容易使用。

关键在于如何定义图像的对比度。一般来说,我会将高对比度图像定义为具有所有或几乎所有可能值的值的图像。我还要补充一点,在高对比度图像的定义中,图像的强度值将倾向于以统一的方式分布在可能值的范围内。

使用这种方法,低对比度图像倾向于具有相对较少的离散强度值,并且它们倾向于紧密地组合在一起而不是均匀分布。 (作为一般规则,它们也往往被分组到范围的中心。)