python直方图绘制代码(Python从零到壹丨图像增强及运算:图像掩膜直方图和HS直方图)
摘要:本章主要讲解图像直方图相关知识点 ,包括掩膜直方图和HS直方图 ,并通过直方图判断黑夜与白天 ,通过案例分享直方图的实际应用 。
本文分享自华为云社区《[Python从零到壹] 五十二.图像增强及运算篇之图像掩膜直方图和HS直方图》 ,作者: eastmount 。
一.图像掩膜直方图
如果要统计图像的某一部分直方图 ,就需要使用掩码(蒙板)来进行计算 。假设将要统计的部分设置为白色 ,其余部分设置为黑色 ,然后使用该掩膜进行直方图绘制 ,其完整代码如下所示 。
其运行结果如图1所示 ,它使用了一个200×200像素的掩膜进行实验 。其中图1(a)表示原始图像 ,图1(b)表示200×200像素的掩膜 ,图1©表示原始图像进行掩膜处理 ,图1(d)表示直方图曲线,蓝色曲线为原始图像的灰度值直方图分布情况 ,绿色波动更小的曲线为掩膜直方图曲线 。
二.图像HS直方图
为了刻画图像中颜色的直观特性 ,常常需要分析图像的HSV空间下的直方图特性 。HSV空间是由色调(Hue) 、饱和度(Saturation) 、以及亮度(Value)构成,因此在进行直方图计算时 ,需要先将源RGB图像转化为HSV颜色空间图像 ,然后将对应的H和S通道进行单元划分 ,再其二维空间上计算相对应直方图 ,再计算直方图空间上的最大值并归一化绘制相应的直方图信息 ,从而形成色调-饱和度直方图(或H-S直方图) 。该直方图通常应用在目标检测 、特征分析以及目标特征跟踪等场景[1-2] 。
由于H和S分量与人感受颜色的方式是紧密相连 ,V分量与图像的彩色信息无关 ,这些特点使得HSV模型非常适合于借助人的视觉系统来感知彩色特性的图像处理算法 。
下面的代码是具体的实现代码 ,使用matplotlib.pyplot库中的imshow()函数来绘制具有不同颜色映射的2D直方图 。
图2(a)表示原始输入图像 ,图2(b)是原图像对应的彩色直方图 ,其中X轴表示饱和度(S) ,Y轴表示色调(H) 。在直方图中 ,可以看到H=140和S=130附近的一些高值,它对应于艳丽的色调。
三.直方图判断白天黑夜
接着讲述一个应用直方图的案例 ,通过直方图来判断一幅图像是黑夜或白天 。常见的方法是通过计算图像的灰度平均值 、灰度中值或灰度标准差 ,再与自定义的阈值进行对比,从而判断是黑夜还是白天[3-4] 。
灰度平均值:该值等于图像中所有像素灰度值之和除以图像的像素个数。 灰度中值:对图像中所有像素灰度值进行排序 ,然后获取所有像素最中间的值 ,即为灰度中值 。 灰度标准差:又常称均方差 ,是离均差平方的算术平均数的平方根 。标准差能反映一个数据集的离散程度 ,是总体各单位标准值与其平均数离差平方的算术平均数的平方根 。如果一幅图看起来灰蒙蒙的 , 那灰度标准差就小;如果一幅图看起来很鲜艳 ,那对比度就很大 ,标准差也大 。下面的代码是计算灰度“Lena ”图的灰度平均值 、灰度中值和灰度标准差 。
其运行结果如图3所示 ,图3(a)为原始图像 ,图3(b)为处理结果 。其灰度平均值为123 ,灰度中值为129 ,灰度标准差为48.39 。
下面讲解另一种用来判断图像是白天还是黑夜的方法 ,其基本步骤如下:
(1)读取原始图像,转换为灰度图 ,并获取图像的所有像素值; (2)设置灰度阈值并计算该阈值以下的像素个数 。比如像素的阈值设置为50 ,统计低于50的像素值个数; (3)设置比例参数,对比该参数与低于该阈值的像素占比 ,如果低于参数则预测为白天 ,高于参数则预测为黑夜 。比如该参数设置为0.8 ,像素的灰度值低于阈值50的个数占整幅图像所有像素个数的90% ,则认为该图像偏暗 ,故预测为黑夜;否则预测为白天 。具体实现的代码如下所示 。
第一张测试图输出的结果如图4所示 ,其中图4(a)为原始图像 ,图4(b)为对应直方图曲线 。
最终输出结果为“(‘This picture is bright!’, 0.010082704388303882) ” ,该预测为白天。
第二张测试图输出的结果如图6所示 ,其中图6(a)为原始图像 ,图6(b)为对应直方图曲线 。
最终输出结果为“(‘This picture is dark!’, 0.8511824175824175) ” ,该预测为黑夜 。
四.总结
本章主要讲解图像直方图相关知识点 ,包括掩膜直方图和HS直方图,并通过直方图判断黑夜与白天 ,通过案例分享直方图的实际应用。希望对您有所帮助 ,后续将进入图像增强相关知识点 。
参考文献:
[1]冈萨雷斯. 数字图像处理(第3版)[M]. 北京:电子工业出版社, 2013. [2]张恒博, 欧宗瑛. 一种基于色彩和灰度直方图的图像检索方法[J]. 计算机工程, 2004. [3]Eastmount. [数字图像处理] 四.MFC对话框绘制灰度直方图[EB/OL]. (2015-05-31). https://blog.csdn.net/eastmount/article/details/46237463. [4]ZJE_ANDY. python3+opencv 利用灰度直方图来判断图片的亮暗情况[EB/OL]. (2018-06-20). https://blog.csdn.net/u014453898/article/details/80745987. [5]阮秋琦. 数字图像处理学(第3版)[M]. 北京:电子工业出版社, 2008. [6]Eastmount. [Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图[EB/OL]. (2018-11-06). https://blog.csdn.net/Eastmount/article/details/83758402.点击关注,第一时间了解华为云新鲜技术~
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!