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中replace方法实例分析
Aug 20 Python
Python中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
Python实现统计单词出现的个数
May 28 Python
python生成随机图形验证码详解
Nov 08 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
pytorch自定义二值化网络层方式
Jan 07 Python
TensorFlow tensor的拼接实例
Jan 19 Python
Python并发concurrent.futures和asyncio实例
May 04 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 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
DC动漫人物排行
2020/03/03 欧美动漫
php桌面中心(四) 数据显示
2007/03/11 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
jquery禁用右键示例
2014/04/28 Javascript
JS简单计算器实例
2015/01/20 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
web打印小结
2017/01/11 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
记录Django开发心得
2014/07/16 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
linux比较文件内容的命令是什么
2015/09/23 面试题
How TDD works
2012/09/30 面试题
JPA的特点
2014/10/25 面试题
求职信内容考虑哪几点
2013/10/05 职场文书
新教师培训方案
2014/06/08 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python