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中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
python中reduce()函数的使用方法示例
Sep 29 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 Python
树莓派与PC端在局域网内运用python实现即时通讯
Jun 22 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
Django实现文件上传和下载功能
Oct 06 Python
关于python 跨域处理方式详解
Mar 28 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
python not运算符的实例用法
Jun 30 Python
python+pytest接口自动化之token关联登录的实现
Apr 06 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实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
php 伪静态之IIS篇
2014/06/02 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
angularJS开发注意事项
2018/05/26 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
如何实现vue的tree组件
2020/12/03 Vue.js
python中遍历文件的3个方法
2014/09/02 Python
python实现通过shelve修改对象实例
2014/09/26 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
python excel和yaml文件的读取封装
2021/01/12 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
小学教师自我鉴定
2013/11/07 职场文书
大学校庆策划书
2014/01/31 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
连锁酒店店长职责范本
2014/02/13 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
办理信用卡工作证明
2014/09/30 职场文书
政风行风评议心得体会
2014/10/21 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL