普通直方图均衡化用于对图像全局进行调整,不能有效提高图像的局部对比度。为了提高图像的局部对比度,可将图像分成若干子块,对子块进行直方图均衡化,这就是自适应直方图均衡化。自适应直方图均衡化可能会造成图像的局部对比度过高,从而导致图像失真。为了解决此问题,可对局部对比度进行限制,这就是限制对比度自适应直方图均衡化(Contrast Limited Adaptive Histogram Equalization,CLAHE)。
OpenCV的cv2.createCLAHE()函数用于创建CLAHE对象,其基本格式如下。
retval=cv2.createCLAHE([clipLimit[,tileGridSize]])
参数说明如下。
retval为返回的CLAHE对象。
clipLimit为对比度受限的阈值,默认值为40.0。
tileGridSize为直方图均衡化的网格大小,默认值为(8,8)。
调用CLAHE对象的apply()方法,将其应用到图像中进行均衡化。
限制对比度自适应直方图均衡化
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('clahe.jpg',0) #打开图像(单通道灰度图像)
cv2.imshow('original',img) #显示原图像
img2=cv2.equalizeHist(img)
cv2.imshow('equalizeHist',img2) #显示直方图均衡化后的图像
clahe=cv2.createCLAHE(clipLimit=5) #创建CLAHE对象
img3 = clahe.apply(img) #应用CLAHE对象
cv2.imshow('CLAHE',img3) #显示应用CLAHE对象后的图像
cv2.waitKey(0)