python数字图像处理实现直方图与均衡化


Posted in Python onMay 04, 2018

在图像处理中,直方图是非常重要,也是非常有用的一个处理要素。

在skimage库中对直方图的处理,是放在exposure这个模块中。

1、计算直方图

函数:skimage.exposure.histogram(image,nbins=256)

在numpy包中,也提供了一个计算直方图的函数histogram(),两者大同小义。

返回一个tuple(hist, bins_center), 前一个数组是直方图的统计量,后一个数组是每个bin的中间值

import numpy as np
from skimage import exposure,data
image =data.camera()*1.0
hist1=np.histogram(image, bins=2)  #用numpy包计算直方图
hist2=exposure.histogram(image, nbins=2) #用skimage计算直方图
print(hist1)
print(hist2)

输出:

(array([107432, 154712], dtype=int64), array([ 0. , 127.5, 255. ]))
(array([107432, 154712], dtype=int64), array([ 63.75, 191.25]))

分成两个bin,每个bin的统计量是一样的,但numpy返回的是每个bin的两端的范围值,而skimage返回的是每个bin的中间值

2、绘制直方图

绘图都可以调用matplotlib.pyplot库来进行,其中的hist函数可以直接绘制直方图。

调用方式:

n, bins, patches = plt.hist(arr, bins=10, normed=0, facecolor='black', edgecolor='black',alpha=1,histtype='bar')

hist的参数非常多,但常用的就这六个,只有第一个是必须的,后面四个可选

arr: 需要计算直方图的一维数组

bins: 直方图的柱数,可选项,默认为10

normed: 是否将得到的直方图向量归一化。默认为0

facecolor: 直方图颜色

edgecolor: 直方图边框颜色

alpha: 透明度

histtype: 直方图类型,‘bar', ‘barstacked', ‘step', ‘stepfilled'

返回值 :

n: 直方图向量,是否归一化由参数normed设定

bins: 返回各个bin的区间范围

patches: 返回每个bin里面包含的数据,是一个list

from skimage import data
import matplotlib.pyplot as plt
img=data.camera()
plt.figure("hist")
arr=img.flatten()
n, bins, patches = plt.hist(arr, bins=256, normed=1,edgecolor='None',facecolor='red') 
plt.show()

python数字图像处理实现直方图与均衡化

其中的flatten()函数是numpy包里面的,用于将二维数组序列化成一维数组。

是按行序列,如

mat=[[1 2 3

  4 5 6]]

经过 mat.flatten()后,就变成了

mat=[1 2 3 4 5 6]

3、彩色图片三通道直方图

一般来说直方图都是征对灰度图的,如果要画rgb图像的三通道直方图,实际上就是三个直方图的叠加。

from skimage import data
import matplotlib.pyplot as plt
img=data.lena()
ar=img[:,:,0].flatten()
plt.hist(ar, bins=256, normed=1,facecolor='r',edgecolor='r',hold=1)
ag=img[:,:,1].flatten()
plt.hist(ag, bins=256, normed=1, facecolor='g',edgecolor='g',hold=1)
ab=img[:,:,2].flatten()
plt.hist(ab, bins=256, normed=1, facecolor='b',edgecolor='b')
plt.show()

其中,加一个参数hold=1,表示可以叠加

python数字图像处理实现直方图与均衡化

4、直方图均衡化

如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。

from skimage import data,exposure
import matplotlib.pyplot as plt
img=data.moon()
plt.figure("hist",figsize=(8,8))

arr=img.flatten()
plt.subplot(221)
plt.imshow(img,plt.cm.gray) #原始图像
plt.subplot(222)
plt.hist(arr, bins=256, normed=1,edgecolor='None',facecolor='red') #原始图像直方图

img1=exposure.equalize_hist(img)
arr1=img1.flatten()
plt.subplot(223)
plt.imshow(img1,plt.cm.gray) #均衡化图像
plt.subplot(224)
plt.hist(arr1, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方图

plt.show()

python数字图像处理实现直方图与均衡化

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
浅谈Django REST Framework限速
Dec 12 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
python使用正则来处理各种匹配问题
Dec 22 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
Opencv中cv2.floodFill算法的使用
Jun 18 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 Python
opencv深入浅出了解机器学习和深度学习
Mar 17 Python
python 镜像环境搭建总结
Sep 23 Python
用python处理图片实现图像中的像素访问
May 04 #Python
用python处理图片之打开\显示\保存图像的方法
May 04 #Python
Python 创建空的list,以及append用法讲解
May 04 #Python
浅谈python中字典append 到list 后值的改变问题
May 04 #Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 #Python
对python中的pop函数和append函数详解
May 04 #Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 #Python
You might like
php实现ping
2006/10/09 PHP
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
php根据年月获取季度的方法
2014/03/31 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
使用python编写监听端
2018/04/12 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python连接Redis的基本配置方法
2018/09/13 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
Django如何使用redis作为缓存
2020/05/21 Python
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
采购主管工作职责
2013/12/12 职场文书
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
中学教师自我鉴定
2014/02/07 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
部门2014年度工作总结
2014/11/12 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis