📅  最后修改于: 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
亮度和对比度的调整是图像处理中非常基础的操作,也是必须要掌握的技能。不同的调整方法在精度和速度上都有所不同,具体的应用需要结合实际情况进行选择。