您的位置:首页 > 编程语言 > Python开发

python实现图像的直方图均衡

2015-07-25 00:00 946 查看
摘要: 用python图像库PIL实现直方图均衡

上学期学校开了两门和图像处理相关的选修课,结果我都没选,现在暑假没事做,就找来一本《数字图像处理》自学,直方图均衡是第三章的内容。

直方图均衡的目的在于让图像中的所有像素的灰度值服从均匀分布,在离散的情况下处理的结果是近似服从均匀分布,直方图均衡通常用于增强对比度。

直方图均衡的原理是对图像的灰度值进行变换,s=T(r),0<= r <= L-1,其中r是一个像素点原始的灰度值,s是该像素点变换后的灰度值,L是整幅图像的灰度值的范围,直方图均衡根据原始图像的直方图计算出变换函数T,T在离散的情况下是没有表达式,但可以是一系列<a,b>(元组)的集合,当输入为a时,T(a)=b。

T的计算公式为:



M,N是图像的分辨率,nj是灰度值为j的像素点的个数,具体代码如下:

from PIL import Image

def histogram_t(tb):
totalpixel=0    #用于统计像素总数,即MN
maptb=[]        #存储映射关系
count=len(tb)
for i in range(count):
totalpixel+=tb[i]
maptb.append(totalpixel)

for i in range(count):
maptb[i]=int(round((maptb[i]*(count-1))/totalpixel))

def histogram(light):
return maptb[light]
return histogram

im=Image.open('test.jpg')
im.show()
his=im.histogram()       #获得im的直方图

hisfunc=histogram_t(his) #实例化一个闭包
out=im.point(hisfunc)    #对im应用直方图均衡
out.show()               #显示图像

以下是一些结果截图:

这张是原始图片:



这张是处理的结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息