📅  最后修改于: 2023-12-03 15:09:29.118000             🧑  作者: Mango
对比度是用于描述图像中灰度值变化范围的量,用于表示图像的鲜明程度。对比度越大,图像颜色的变化越明显,人眼也更易于观察。在图像处理中,对图像的对比度进行调整是非常常见的操作,下面介绍调整对比度的公式。
线性对比度调整公式是对图像像素点的灰度值进行线性变换,使得亮度值在一定的比例内发生改变,具体公式如下:
$$I_{out} = \alpha \times I_{in} + \beta$$
其中,$I_{in}$为输入图像的像素值,$I_{out}$为输出图像的像素值,$\alpha$和$\beta$为调整系数,$\alpha$用于控制图像亮度的变化,$\beta$用于控制图像的偏移量。
线性对比度调整公式需要对图像像素点的灰度值进行缩放和偏移,其操作速度较快,适用于对比度调整幅度较小的情况。但是,该方法对于图像灰度值分布非常不均匀的情况下,表现效果不佳。
非线性对比度调整公式是对输入图像像素点的灰度值进行非线性变换,其操作方式是先将灰度值映射到一定范围内,再进行线性调整。具体公式如下:
$$I_{out} = k \times (I_{in} - a)^{n} + b $$
其中,$I_{in}$为输入图像的像素值,$I_{out}$为输出图像的像素值,$a$和$b$为控制灰度映射的参数,$k$和$n$为调整系数,$k$用于控制对比度的大小,$n$用于控制对比度的形状。
非线性对比度调整公式适用于对比度调整幅度较大的情况,也适用于图像灰度值分布不均匀的情况。但是,其操作速度较慢,需要对每个像素点进行非线性计算。
以下是Python中实现对比度调整的示例代码片段:
import numpy as np
import cv2
def linearContrastAdjustment(img, alpha, beta):
# 线性对比度调整公式
img_out = alpha * img + beta
img_out = np.clip(img_out, 0, 255).astype(np.uint8)
return img_out
def nonlinearContrastAdjustment(img, k, n, a, b):
# 非线性对比度调整公式
img_out = k * ((img - a) ** n) + b
img_out = np.clip(img_out, 0, 255).astype(np.uint8)
return img_out
其中,linearContrastAdjustment函数实现了线性对比度调整公式,nonlinearContrastAdjustment函数实现了非线性对比度调整公式。两个函数的输入参数都为一张灰度图像,而输出为调整后的灰度图像。numpy.clip函数是用于将输出图像的像素值限制在0到255之间,astype函数是用于转换数据类型的。