3. 直方图自适应均衡化

但是,有时,直方图均衡化会分散图中某些部分的信息,如下图:

可以看到对原图进行直方图均衡化之后,效果反而不好了,尤其对于局部。

如果我们对局部进行均衡化,而不是全局均衡化的话,图像能保留局部纹理信息:

(左:原图 中:直方图均衡化 右:直方图自适应均衡化)

此时,我们需要使用自适应直方图均衡化,将整张图片分成几个部分来分别均衡化,然后再组合在一起。用于生成自适应均衡化图像的函数为:

cv2.createCLAHA(clipLimit, titleGridSize)

clipLimit:颜色对比度的阈值。

titleGridSize:进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作。

import cv2

import numpy as np

gray = cv2.imread('img_1.png', cv2.IMREAD_GRAYSCALE)

# 实例化自适应直方图均衡化函数

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))

# 进行自适应直方图均衡化

res_clahe = clahe.apply(gray)

# 进行图像的展示

res = np.hstack((gray, res_clahe))

cv2.imshow('res', res)

cv2.waitKey()

cv2.destroyAllWindows()

请自行试验。