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 相关文章推荐
github配置使用指南
Nov 18 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
Django在win10下的安装并创建工程
Nov 20 Python
Python线程创建和终止实例代码
Jan 20 Python
Python3中关于cookie的创建与保存
Oct 21 Python
深入了解Django中间件及其方法
Jul 26 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
Python常用模块os.path之文件及路径操作方法
Dec 03 Python
Python tkinter三种布局实例详解
Jan 06 Python
没编程基础可以学python吗
Jun 17 Python
OpenCV 之按位运算举例解析
Jun 19 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 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的实现代码
2010/06/20 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
js实现每日签到功能
2018/11/29 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
vue实现树状表格效果
2020/12/29 Vue.js
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
Python fileinput模块使用实例
2015/06/03 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
Python网页解析器使用实例详解
2020/05/30 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
高校自主招生自荐信
2013/12/09 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
实习单位鉴定评语
2014/04/26 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
师德师风事迹材料
2014/12/20 职场文书
MySQL 覆盖索引的优点
2021/05/19 MySQL
python调试工具Birdseye的使用教程
2021/05/25 Python