📜  CLAHE 直方图均衡 - OpenCV(1)

📅  最后修改于: 2023-12-03 14:40:06.029000             🧑  作者: Mango

CLAHE 直方图均衡 - OpenCV

简介

CLAHE(Contrast Limited Adaptive Histogram Equalization)是一种图像增强算法,可以增强图像的对比度,使得图像更加清晰。对比于传统的直方图均衡(Histogram Equalization),CLAHE可以避免过度增强图像的局部对比度,从而提高图像的品质。

OpenCV是一个基于开源的计算机视觉库,提供了CLAHE算法的实现。

背景知识

在介绍CLAHE之前,先来了解一下直方图均衡(Histogram Equalization)。

直方图均衡是一种常用的图像增强算法,它的原理是将原图像的灰度级分布转换为一个均匀分布的灰度级分布。该算法可以提高图像的对比度,使得图像更加清晰。但是,当原图像的灰度级分布不均衡时,直方图均衡会过度增强图像的局部对比度,导致图像的细节信息丢失。

CLAHE(Contrast Limited Adaptive Histogram Equalization)可以解决直方图均衡的局限性。它将原图像分成若干个小块(tile),对每个小块进行直方图均衡,然后在对每个小块进行均衡化之前对其进行限制,以防止过度增强局部对比度。这种方法提高了均衡化的效果,并且能够保留原有的细节信息。

CLAHE的使用

OpenCV提供了CLAHE的实现,主要包括以下几个函数:

  • cv2.createCLAHE():创建CLAHE对象
  • cv2.CLAHE.apply():对图像进行CLAHE处理

下面是CLAHE的使用代码示例:

import cv2

# 读取图像
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)

# 创建CLAHE对象
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))

# 对图像进行CLAHE处理
res = clahe.apply(img)

# 显示结果
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码中,cv2.imread()函数用于读取图像,cv2.imshow()函数用于显示图像,cv2.waitKey()函数用于等待用户按下按键,cv2.destroyAllWindows()函数用于关闭所有打开的窗口。

cv2.createCLAHE()函数用于创建CLAHE对象,该函数有两个参数:

  • clipLimit:控制对比度的最大值
  • tileGridSize:图像分成小块的大小

cv2.CLAHE.apply()函数用于对图像进行CLAHE处理,该函数有一个参数:

  • src:原图像

CLAHE处理后的图像存储在res中,可以使用cv2.imshow()函数显示CLAHE处理后的图像。

注意事项

在使用CLAHE进行图像增强时,需要注意以下几点:

  • clipLimit参数决定了对比度的最大值,需要根据图像的特点调整。
  • tileGridSize的大小会影响CLAHE的效果,需要根据图像的尺寸和特征调整。如果tileGridSize过大,则CLAHE的效果将受到影响;如果tileGridSize过小,则CLAHE的效果将不明显。
  • 进行CLAHE处理前,最好先进行图像的预处理,如去噪、平滑等操作,以提高CLAHE的效果。
参考资料