文章目录
直方图均衡化
图像的直方图是对图像对比度效果上的一种处理,旨在使得图像整体效果均匀,黑与白之间的各个像素级之间的点更均匀一点。
实质:对图像进行非线性拉伸,使得一定灰度范围像素点数量的值大致相等
cv2.equalizeHist(img) #直方图均衡化,参数为灰度图像
通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。
自适应直方图均衡(AHE)
由于整体亮度的提升,会使得局部图像的细节变得模糊,为了解决直方图均衡化这点的不足
AHE对图像进行局部均衡
- 移动模板在原始图片上按特定步长滑动;
- 每次移动后,模板区域内做直方图均衡,映射后的结果赋值给模板区域内所有点,
- 每个点会有多次赋值,最终的取值为这些赋值的均值。
限制对比度自适应直方图均衡(CLAHE)
AHE会过度放大图像中相对均匀区域的噪音,因此采用CLAHE
clahe = cv2.createCLAHE(clipLimit=2,tileGridSize=(10,10)) #实例化自适应直方图均衡化函数
cl1 = clahe.apply(img) #进行自适应直方图均衡化
CLAHE直方图修剪过程
CLAHE算法步骤
-
图像分块,以块为单位;
-
先计算直方图,然后修剪直方图,最后均衡;
-
遍历操作各个图像块,进行块间双线性插值;
-
与原图做图层滤色混合操作。(可选)
完整代码如下
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('timg.jpg',0) #直接读为灰度图像
res = cv2.equalizeHist(img)
clahe = cv2.createCLAHE(clipLimit=2,tileGridSize=(10,10))
cl1 = clahe.apply(img)
plt.subplot(131),plt.imshow(img,'gray')
plt.subplot(132),plt.imshow(res,'gray')
plt.subplot(133),plt.imshow(cl1,'gray')
plt.show()