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实现冒泡,插入,选择排序简单实例
Aug 18 Python
Python解析网页源代码中的115网盘链接实例
Sep 30 Python
python编程之requests在网络请求中添加cookies参数方法详解
Oct 25 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
Django forms表单 select下拉框的传值实例
Jul 19 Python
使用Python的turtle模块画国旗
Sep 24 Python
python梯度下降算法的实现
Feb 24 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
Python collections.defaultdict模块用法详解
Jun 18 Python
Python爬虫实现HTTP网络请求多种实现方式
Jun 19 Python
Python Celery异步任务队列使用方法解析
Aug 10 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获得当前的脚本网址
2007/12/10 PHP
php str_pad 函数使用详解
2009/01/13 PHP
php 什么是PEAR?(第三篇)
2009/03/19 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
php取出数组单个值的方法
2018/03/12 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
jquery提升性能最佳实践小结
2010/12/06 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
python 对key为时间的dict排序方法
2018/10/17 Python
django表单的Widgets使用详解
2019/07/22 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
得到Class的三个过程是什么
2012/08/10 面试题
自荐书模板
2013/12/19 职场文书
高中班长自我鉴定
2013/12/20 职场文书
大学生村官工作感言
2014/01/10 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
分享7个 Python 实战项目练习
2022/03/03 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python