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()
请自行试验。