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实现多线程采集的2个代码例子
Jul 07 Python
python中实现定制类的特殊方法总结
Sep 28 Python
Python实现测试磁盘性能的方法
Mar 12 Python
在Python的Django框架中调用方法和处理无效变量
Jul 15 Python
python opencv 图像尺寸变换方法
Apr 02 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
python中使用print输出中文的方法
Jul 16 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 Python
Python3.8中使用f-strings调试
May 22 Python
python中设置超时跳过,超时退出的方式
Dec 13 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 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
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
php实现的二分查找算法示例
2017/06/20 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Python应用库大全总结
2018/05/30 Python
django2.0扩展用户字段示例
2019/02/13 Python
Python学习之time模块的基本使用
2021/01/17 Python
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
super关键字的用法
2012/04/10 面试题
消防先进事迹材料
2014/02/10 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
食品销售计划书
2014/04/26 职场文书
2014年信访工作总结
2014/11/17 职场文书
总经理司机岗位职责
2015/04/10 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
JavaScript异步操作中串行和并行
2021/11/20 Javascript
TS 类型兼容教程示例详解
2022/09/23 Javascript