当图像中存在广泛的对比度差异时,传统的直方图均衡化可能无法产生理想的结果。为了解决这个问题,引入了限制对比度自适应直方图均衡化(CLAHE)方法,它将图像分成小块,对每个小块进行直方图均衡化,并在均衡化过程中限制对比度增强的幅度。这可以避免过度增强噪声或细节,同时改善图像的视觉质量。
CLAHE的原理如下:
1. 将图像划分为不重叠的小块(称为tiles)。
2. 在每个小块中,计算直方图。
3. 对每个小块的直方图进行均衡化,以确保小块内的像素分布更加均匀。
4. 在进行直方图均衡化时,引入一个限制参数,它控制了对比度增强的程度。如果某个小块的直方图超过了这个限制,那么对比度增强会被限制,以避免过度增强。
CLAHE 的数学表示如下:
令 I ( x , y ) I(x, y) I(x,y) 表示原始图像上坐标 ( x , y ) (x, y) (x,y) 处的像素值, I clahe ( x , y ) I_{\text{clahe}}(x, y) Iclahe(x,y) 表示经过CLAHE处理后的图像上坐标 ( x , y ) (x, y) (x,y) 处的像素值。
1. 将图像划分为大小为 N × N N \times N N×N 的小块: I block ( x , y ) I_{\text{block}}(x, y) Iblock(x,y),其中 ( x , y ) (x, y) (x,y) 属于小块内的像素坐标。
2. 对每个小块 I block ( x , y ) I_{\text{block}}(x, y) Iblock(x,y),计算直方图 H block ( I block ) H_{\text{block}}(I_{\text{block}}) Hblock(Iblock)。
3. 计算累积分布函数(CDF): C D F block ( I block ) CDF_{\text{block}}(I_{\text{block}}) CDFblock(Iblock),并进行直方图均衡化。
4. 限制对比度增强的阈值为 C C C,在进行直方图均衡化时,对 C D F block ( I block ) CDF_{\text{block}}(I_{\text{block}}) CDFblock(Iblock) 进行剪切,以限制增强程度。
CLAHE 的意义在于它能够提高图像的视觉质量,同时避免了在局部区域过度增强对比度引起的噪声和伪影。它在医学图像、无人驾驶、图像增强等领域有广泛的应用。
以下是使用 OpenCV 中的 cv2.createCLAHE
函数进行CLAHE处理的示例代码:
import cv2
import matplotlib.pyplot as plt
def CLAHE(image):
# 读取图像
image = cv2.imread(image, cv2.IMREAD_GRAYSCALE)
if image is None:
print('Unable to load input_image!')
return
else:
# 创建CLAHE对象
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
# 应用CLAHE处理
clahe_image = clahe.apply(image)
plt.figure(figsize=(6, 4))
plt.subplot(121), plt.title('Original image'), plt.axis('off')
plt.imshow(image, cmap='gray', vmin=0, vmax=255)
plt.subplot(122), plt.title('Clahe image'), plt.axis('off')
plt.imshow(clahe_image, cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()
imgfile1='./Images/cat.jpg'
CLAHE(imgfile1)
在这个示例中,clipLimit
参数控制了对比度的限制程度,tileGridSize
参数定义了图像分块的大小。您可以根据需要调整这些参数以达到最佳效果。