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的像素点的个数,具体代码如下:
以下是一些结果截图:
这张是原始图片:
这张是处理的结果:
上学期学校开了两门和图像处理相关的选修课,结果我都没选,现在暑假没事做,就找来一本《数字图像处理》自学,直方图均衡是第三章的内容。
直方图均衡的目的在于让图像中的所有像素的灰度值服从均匀分布,在离散的情况下处理的结果是近似服从均匀分布,直方图均衡通常用于增强对比度。
直方图均衡的原理是对图像的灰度值进行变换,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() #显示图像
以下是一些结果截图:
这张是原始图片:
这张是处理的结果:
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法
- Python实现的基于ADB的Android远程工具