全局直方图均衡化
直方图均衡化通过调整图像的直方图来增强图像的对比度,经常使用在医学图像分析中。
例如一幅8*8图像像素值如下:
对各个像素值进行计数:
得到累计概率分布:
其中均衡化后的像素值计算公式为:
前面的标题全局直方图均衡化,代表着直方图在整个图像计算,这样会有一个缺点,图像的部分区域会显得过暗或者过亮。这个时候就需要使用自适应直方图均衡化(Adaptive histogram equalization)。自适应直方图均衡化,首先将图像分为几个部分,然后对每个部分分别计算直方图进行均衡化,同时对边缘像素进行插值处理。由图中可以看出自适应直方图均衡化对高亮区域的处理要比常规的直方图均衡化好的多。
1 import os 2 from PIL import Image 3 from skimage import exposure 4 import numpy as np 5 import matplotlib.pyplot as plt 6 7 8 img = Image.open('/home/vincent/Pictures/work/Unequalized_Hawkes_Bay_NZ.jpg') 9 img = np.array(img) 10 img_eq = exposure.equalize_hist(img) 11 img_adapteq = exposure.equalize_adapthist(img, clip_limit=0.04) 12 13 plt.figure(0) 14 plt.imshow(img) 15 plt.title('low contrast image') 16 plt.figure(1) 17 plt.imshow(img_eq) 18 plt.title('high constrast image using normal histogram equalization') 19 plt.figure(2) 20 plt.imshow(img_adapteq) 21 plt.title('high constract image using adaptive histogram euqalization') 22 plt.show()