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编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
Python返回真假值(True or False)小技巧
Apr 10 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
浅谈Python 集合(set)类型的操作——并交差
Jun 30 Python
Python中运算符"=="和"is"的详解
Oct 08 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
python调用win32接口进行截图的示例
Nov 11 Python
python定义具名元组实例操作
Feb 28 Python
Python OpenCV之常用滤波器使用详解
Apr 07 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下安装配置fckeditor编辑器的方法
2011/03/02 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
Web开发之JavaScript
2012/03/29 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
python生成指定长度的随机数密码
2014/01/23 Python
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
Python按钮的响应事件详解
2019/03/04 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Python如何用filter函数筛选数据
2020/03/05 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
元旦文艺汇演主持词
2014/03/26 职场文书
公司离职证明标准格式
2014/11/18 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
拙作再改《我的收音机情缘》
2022/04/05 无线电