直方图均衡化方法属于图像增强的范畴,是一种对图像进行灰度级修正的方法。简而言之,就是对一个灰度图像进行处理,使他的特征更加明显。通常情况下,在对图像进行进一步的处理之前,直方图均衡化是一种对灰度进行归一化处理的好方法,而且也可以增强图像的对比度。
这个方法的思路非常简单,就是我们把一个灰度图像以0-255个灰度值为横坐标,灰度对应的像素点的个数为纵坐标,构成一个灰度直方图。对于那些灰度分布非常不均衡的图像来说,我们要做的就是通过对灰度值进行一个映射,将他灰度直方图尽可能的拉伸。通常情况下我们可以对他的累计分布函数(CDF)进行线性插值即可,实现起来也很简单。
当然我们并不需要每次都自己写,调用matplotlib的函数可以很轻松的画出直方图,调用OpenCV的函数可以很轻松的进行均衡化:
# coding: utf-8
import Image,cv2
import numpy as np
from pylab import *
raw=Image.open('test.png')
im=np.array(raw.convert('L'))
gray()
figure()
hist(im.ravel(),256,[0,256])#matplotlib的函数,hist用来绘直方图,ravel是将二维图像数组转换成一维数组
xlim([0,256])
equ=cv2.equalizeHist(im) #OpenCV直方图均衡化的接口
figure()
hist(equ.ravel(),256,[0,256])
xlim([0,256])
figure()
imshow(raw)
res=np.hstack((im,equ)) #将两个图像水平合并方便查看
figure()
imshow(res)
show()