📜  亮度和对比度(1)

📅  最后修改于: 2023-12-03 15:21:44.898000             🧑  作者: Mango

亮度和对比度

介绍

在图像处理中,亮度和对比度是两个非常基础的概念。亮度表示图像的明暗程度,而对比度则用来描述不同像素间明暗程度的差异。在人眼看来,亮度和对比度的调整可以使图像更加舒适和清晰。

实现方式

在编程语言中,亮度和对比度的调整可以通过很多不同的方式来实现。以下只是其中的几种代表性方法。

像素点处理

亮度和对比度的调整可以通过对每个像素点进行处理来实现。这个方法是最基础的方法,也是最容易理解的方法。

def adjust_brightness_contrast(img, brightness=0, contrast=0):
    alpha = 1 + contrast / 127.0
    beta = brightness / 255.0
    
    # adjust brightness
    img += beta
    
    # adjust contrast
    img = (img - 0.5) * alpha + 0.5
    
    return img
基于直方图的方法

直方图分析是图像处理中非常重要的一个步骤,直方图中包含了很多对图像全局特征的描述。基于直方图的方法可以对图像的亮度和对比度进行快速精确的调整。

def adjust_brightness_contrast_histogram(img, brightness=0, contrast=0):
    alpha = 1 + contrast / 127.0
    beta = brightness / 255.0

    # create histogram
    hist, bins = np.histogram(img.flatten(), 256, [0, 256])

    # cumulative distribution function
    cdf = hist.cumsum()
    cdf_normalized = cdf * hist.max() / cdf.max()

    # apply linear stretch
    img = (img - bins[0]) / (bins[-1] - bins[0])
    img = (alpha * img + beta) * (bins[-1] - bins[0]) + bins[0]

    # clip overflows
    img[img < 0] = 0
    img[img > 255] = 255

    return img
基于人眼视觉特性的方法

人眼对亮度和对比度的敏感程度在不同的亮度和对比度水平下是不同的。基于人眼视觉特性的方法可以更加精确的调整图像的亮度和对比度。

def adjust_brightness_contrast_human_vision(img, brightness=0, contrast=0):
    alpha = 1 + contrast / 127.0
    beta = brightness / 255.0

    # adjust brightness
    img = img + beta

    # adjust contrast
    img = (img - 127.5) * alpha + 127.5

    # adjust gamma
    gamma = 1 / alpha
    img = np.power(img / 255.0, gamma) * 255.0

    return img
总结

亮度和对比度的调整是图像处理中非常基础的操作,也是必须要掌握的技能。不同的调整方法在精度和速度上都有所不同,具体的应用需要结合实际情况进行选择。