自适应直方图均衡化(CLAHE)

  当图像中存在广泛的对比度差异时,传统的直方图均衡化可能无法产生理想的结果。为了解决这个问题,引入了限制对比度自适应直方图均衡化(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 参数定义了图像分块的大小。您可以根据需要调整这些参数以达到最佳效果。

你可能感兴趣的:(opencv_python,计算机视觉,图像处理,opencv,python)