在图像处理中,直方图是非常重要,也是非常有用的一个处理要素。

在skimage库中对直方图的处理,是放在exposure这个模块中。

1、计算直方图

函数:skimage.exposure.histogram(image, nbins=256)

在numpy包中,也提供了一个计算直方图的函数histogram(),两者大同小义。

返回一个tuple(hist, bins_center), 前一个数组是直方图的统计量,后一个数组是每个bin的中间值

importnumpy as npfrom skimage importexposure,data

image=data.camera()*1.0hist1=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 importdataimportmatplotlib.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()

其中的flatten()函数是numpy包里面的,用于将二维数组序列化成一维数组。

是按行序列,如

mat=[[1 2 3

4 5 6]]

经过 mat.flatten()后,就变成了

mat=[1 2 3 4 5 6]

3、彩色图片三通道直方图

一般来说直方图都是征对灰度图的,如果要画rgb图像的三通道直方图,实际上就是三个直方图的叠加。

from skimage importdataimportmatplotlib.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,表示可以叠加

4、直方图均衡化

如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。

from skimage importdata,exposureimportmatplotlib.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数字图像处理(9):直方图与均衡化相关推荐

  1. python绘制灰度图片直方图-python数字图像处理实现直方图与均衡化

    在图像处理中,直方图是非常重要,也是非常有用的一个处理要素. 在skimage库中对直方图的处理,是放在exposure这个模块中. 1.计算直方图 函数:skimage.exposure.histo ...

  2. python绘制灰度图片直方图-用python简单处理图片(5):图像直方图

    我们先来看两个函数reshape和flatten: 假设我们先生成一个一维数组: vec=np.arange(15)print vec 显示为: [ 0 1 2 3 4 5 6 7 8 9 10 11 ...

  3. python绘制灰度图片直方图-python+opencv 灰度直方图及其二值化

    图像直方图(histogram)是图像的统计学特征,常用于了解图像的基本特征以便分析.不过图像的直方图不具有空间特征. 图像的灰度直方图(histogram),就是将图像转化成灰度图像之后,统计各个像 ...

  4. python绘制灰度图片直方图-python – numpy图像中灰度值的直方图

    我将图像加载到numpy数组中,并希望在直方图中绘制其颜色值. import numpy as np from skimage import io from skimage import color ...

  5. python绘制灰度图片直方图-opencv+python 统计及绘制直方图

    灰度直方图概括了图像的灰度级信息,简单的来说就是每个灰度级图像中的像素个数以及占有率,创建直方图无外乎两个步骤,统计直方图数据,再用绘图库绘制直方图. 统计直方图数据 首先要稍微理解一些与函数相关的术 ...

  6. 【python图像处理】python绘制灰度直方图

    灰度直方图在数据统计分析.图像处理中有着比较广泛的应用,下面就介绍一下如何使用python来绘制灰度直方图. 下面直接看代码: import matplotlib.pyplot as plt impo ...

  7. 如何用python绘制灰度直方图_Python Opencv任意形状目标检测并绘制框图实例

    Python Opencv检测并绘制框图 opencv 进行任意形状目标识别,供大家参考,具体内容如下 工作中有一次需要在简单的图上进行目标识别,目标的形状不固定,并且存在一定程度上的噪声影响,但是噪 ...

  8. python图像直方图、获取每一个柱的个数_python数字图像处理实现直方图与均衡化...

    在图像处理中,直方图是非常重要,也是非常有用的一个处理要素. 在skimage库中对直方图的处理,是放在exposure这个模块中. 1.计算直方图 函数:skimage.exposure.histo ...

  9. 数字图像处理之直方图均衡化(python)

    1.概念        直方图均衡化 主要用于增强动态范围偏小的图像的反差. 直方图均衡化借助灰度统计直方图和灰度累积直方图来进行.灰度统计直方图反映了图像中不同灰度级的像素的个数:灰度累积直方图 反 ...

最新文章

  1. Linux之vim中翻页的命令
  2. Cascade R-CNN的一些记录
  3. pytorch | Softmax->Log->NLLLoss->CrossEntropyLoss
  4. vscode自动加前缀_详解VScode自动补全CSS3前缀插件以及配置无效的解决办法
  5. iscroll5实现一个下拉刷新上拉加载的效果
  6. oracle数据库关不掉,oracle进程关不掉的问题??新手问题
  7. macos big sur u盘安装_老款macbook机型欺骗补丁强制安装macOS11 Big Sur图文详解
  8. C++中对sprintf()
  9. 基于51单片机的呼吸灯程序编写
  10. shell转化bat工具_shell脚本与bat转换
  11. 响铃:创业三年即IPO,拼多多不应该被质疑
  12. Win11添加新的Microsoft Teams集成:共享屏幕变得更容易
  13. rup 裁剪_小型软件项目RUP裁剪模型的研究
  14. Ubuntu18.04安装ntl库
  15. 3D学到什么程度能月入过万?
  16. 服务器的全部作用,王者荣耀有哪些服务器_王者荣耀全部服务器功能详解_玩游戏网...
  17. hdu 1276 士兵队列训练问题 (详解)
  18. sql 拆分字符串, 表值函数f_split的使用
  19. 迪米特法则 (Law of Demeter, LoD)
  20. Android Studio clean 时产生 Error:Execution failed for task ':app:mockableAndroidJar' java.lang.NullP

热门文章

  1. git push everything up to date问题解决
  2. 开发日记-20190830 关键词 读书笔记《Unix环境高级编程(第二版)》DAY 6
  3. 关键词 onStart()和onResume()存在的原因(测验篇)两者的区别
  4. 交通违章行为,和记分、处罚条款——不仅要扣分,还要罚钱哪,没有不罚钱的扣分!!!...
  5. tensorfllow MNIST机器学习入门
  6. influxdb入门——和mongodb一样可以动态增加字段
  7. 脱壳学习之加壳的概念
  8. 【NOI2015】软件包管理器
  9. iOS MVC 介绍
  10. [转]关于安卓与ios的推送系统,我说说自己的看法。