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编程中的包结构
Oct 25 Python
python开发之函数定义实例分析
Nov 12 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
Python2.7.10以上pip更新及其他包的安装教程
Jun 12 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
Python中print函数简单使用总结
Aug 05 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
Python面向对象之内置函数相关知识总结
Jun 24 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与SQL注入攻击[一]
2007/04/17 PHP
php 模拟POST|GET操作实现代码
2010/07/20 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
微信支付开发交易通知实例
2016/07/12 PHP
php中请求url的五种方法总结
2017/07/13 PHP
PHP学习记录之数组函数
2018/06/01 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
python 接收处理外带的参数方法
2018/12/03 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
Foot Locker英国官网:美国知名运动产品零售商
2019/02/21 全球购物
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
2014年仓库管理工作总结
2014/12/17 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python