【什么是直方图均衡化】 直方图均衡化是一种简单而有效的图像处理技术,它旨在改善图像的视觉效果,使图像变得更加清晰和对比度更高。 其核心原理是将原始图像的灰度直方图从可能较为集中的某个灰度区间转变为在全部灰度范围内的均匀分布。 直方图均衡化有两种主要类型:全局均衡化和局部均衡化。全局均衡化是一种广泛使用的技术,它通过改变整个图像的亮度分布来实现均衡化效果。 总的来说,直方图均衡化是一种强大而灵活的图像处理工具,通过调整图像的亮度分布来优化视觉效果,为图像分析和理解提供了有力的支持。 【效果展示】 获取直方图: 全局直方图: 局部直方图: 自适应直方图: 直方图均衡化: 【测试环境】 vs2019,netframework4.7.2,opencvsharp4.8.0 【演示代码下载】
今天跟大家分享直方图的制作技巧! ▼ 直方图是统计描述常用的图表工具,虽然跟柱形图外表有点类似,但是制作方法却要比柱形图复杂得多,今天要跟大家分享两种直方图的制作技巧! ——利用数据分析库直方图工具 (需要加载数据分析库,还不会的同学回复001查看详细信息) ——直接使用内置直方图(office2016预览版) 首先看下原数据: 通过简单的加工整理,可以将本组数据的最大值 最后的分数段通过依次相加,可以得到直方图的每一个组间距点。 ? 选择数据——数据分析——直方图 ? ●●●●● 第二种方法:内置直方图(需使用office2016预览版) 使用2016版的excel来制作直方图非常方便,不用附加任何辅助操作: 只需要选中源数据区域,然后插入直方图就可以了: ? 这就是我们需改过后的图表样式,再稍微修改一下图表的字体、颜色等,直方图就正式完成了。 ?
一、函数简介 1、calcHist—计算图像直方图 函数原型:calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate =None) images:图像矩阵,例如:[image] channels:通道数,例如:0 mask:掩膜,一般为:None histSize:直方图大小,一般等于灰度级数 ranges:横轴范围 2、equalizeHist—直方图均衡化 函数原型: equalizeHist(src, dst=None) src:图像矩阵 dst:默认即可 二、实例演练 1、灰度图像直方图 代码如下: < 2、灰度图像直方图 ? 2、彩色图像直方图 ?
图像直方图(英语:Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。可以借助观察该直方图了解需要如何调整亮度分布。 很多数码相机提供图像直方图功能,拍摄者可以通过观察图像直方图了解到当前图像是否过分曝光或者曝光不足。 计算机视觉领域常借助图像直方图来实现图像的二值化. 图像直方图 1. 直方图演示 图像的直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。 直方图均衡化 直方图均衡化(histogram equalization)是一种借助直方图变换实现灰度映射从而达到图像增强目的的方法。 图像是由像素构成的,然而直方图能够反映像素的分布情况,可以作为是图像一个很重要的特征。在实际开发中,图像直方图在特征提取、图像匹配等方面都有很好的应用。除此之外,直方图还能做图像的相似度匹配。
本文主要介绍了灰度直方图相关的处理,包括以下几个方面的内容: 利用OpenCV计算图像的灰度直方图,并绘制直方图曲线 直方图均衡化的原理及实现 直方图规定化(匹配)的原理及实现 图像的灰度直方图 一幅图像由不同灰度值的像素组成 以\(k = 2\)为例,其原始直方图的累积概率是:0.65,在规定化后的直方图的累积概率中和0.65最接近(相等)的是灰度值为5的累积概率密度,则可以得到原始图像中的灰度级2,在规定化后的图像中的灰度级是 5。 直方图规定化的实现 直方图规定化的实现可以分为一下三步: 计算原图像的累积直方图 计算规定直方图的累积直方图 计算两累积直方图的差值的绝对值 根据累积直方图差值建立灰度级的映射 具体代码实现如下: void 直方图规定化,也称为直方图匹配,经过规定化处理将原图像的直方图变换为特定形状的直方图(上面中的示例,就是将图像的直方图变换为另一幅图像的直方图)。
import pyplot as plt 我们先简单了解一下matplotlib 的使用方法,查看以下示例: from matplotlib import pyplot as plt x = [0, 5, x列表和y列表相互对应,x[0]与y[0]构成一个坐标点,如x[0]与y[0]则表示(0,2),依次下去则是(5,1)、(8,1);随后使用plt.title设置折线图标题,plt.xlabel设置x标签 2.2 绘制图像直方图 图像直方图表示了一张图像像素的分布,对像素进行了统计,方便与直观的以图的形式对图片进行分析。 绘制图像直方图需要使用一个直方图方法hist方法,我们一般使用前两个参数;第一个参数为一维数组,第二个参数为需要多少个间隔。 enumerate将会给予出两个值,一个是下标一个是值,那么这个时候就需要有两个变量接收,for循环可以写成: for i, v in enumerate(color): 随后使用calcHist方法,并且传入5个值
示例代码 (私有 cost 定义) hist1 = np.array([0,0,1,2,3,4,5,6,0,0], dtype='float32') hist2 = np.array([1,2,3,4,5,6,0,0,0,0 , 0., 0., 0., 0., 0., 0.], [0., 0., 0., 4., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 5. 0., 0., 0., 0., 0., 0., 0., 0., 0.]], dtype=float32) 示例代码 (官方距离定义) hist1 = np.array([0,0,1,2,3,4,5,6,0,0 ], dtype='float32') hist2 = np.array([1,2,3,4,5,6,0,0,0,0], dtype='float32') signature_1 = np.concatenate , 0., 4., 0., 0., 0., 0.], [0., 0., 0., 3., 0., 2., 0., 0., 0., 0.], [0., 0., 0., 1., 5.
(4) J = histeq( I , n) (5) J = histeq( I , ma p , n) (6) [ J , counts ] = histeq( I , ?) 说明:对于格式(1) ,显示图像I 的直方图,n 为灰度级 数目,灰度图像的缺省值为256 ,黑白图像缺省值为2 ;对于 格式(2) ,J 返回调色板为map 的图像I 的直方图;对格式(3) ,返回图像 I 的每个灰度上的像素点数目;格式(4) 对图 像I 均衡化处理,n 表示灰度级数目,缺省值为64 ;格式(5) 对调色板为map 的灰度图像均衡化处理,返回有n 级灰度 的图像;格式(6) 对图像I ( I ,256) ; %显示原始图像直方图, 灰度级为256 tit le(′原始图像直方图′) ; %直方图均衡化处理 J = histeq( I ,32) ; %均衡化处理为灰度级为32 的直方图 tit le(′均衡化图像直方图1′) ; %直方图规定化处理 K = imread(′pout . t i f′) ; figure , imshow( K) ; tit le(′要规定化图像′)
文章目录 一、颜色直方图 1.1 使用opencv展示直方图 1.2 使用matplotlib绘制 二、直方图均衡化 2.1 全局直方图均衡化与自适应均衡化 2.2 使用查找表来拉伸直方图 2.3 直方图均衡化—RGB2YCrCb 2.4 直方图均衡化—RGB2YUV 一、颜色直方图 1.1 使用opencv展示直方图 函数 cv2.calcHist(image 为什么要进行直方图均衡化呢? 如下图:依次是原图;全局直方图均衡化;自适应直方图均衡化 2.2 使用查找表来拉伸直方图 在图像处理中,直方图均衡化一般用来均衡图像的强度,或增加图像的对比度。 代码详细:https://docs.opencv2.org/4.1.0/d5/daf/tutorial_py_histogram_equalization.html import numpy as np
image.shape, np.uint8) mask[200:400,200:400]=255 histImage=cv2.calcHist([image],[0],None,[256],[0,255])#绘制灰度直方图 histMI=cv2.calcHist([image],[0],mask,[256],[0,255])#绘制掩模直方图 plt.plot(histImage) plt.plot(histMI) cv2
Histogram / 图像直方图 / 灰度直方图 # 一般解释 直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 这个特性也可以应用到全局直方图均衡化中,即构成所谓的限制对比度直方图均衡(CLHE),但这在实际中很少使用。在CLAHE中,对于每个小区域都必须使用对比度限幅。 这个斜度和领域的累积直方图的斜度成比例。CLAHE通过在计算CDF前用预先定义的阈值来裁剪直方图以达到限制放大幅度的目的。这限制了CDF的斜度因此,也限制了变换函数的斜度。 直方图被裁剪的值,也就是所谓的裁剪限幅,取决于直方图的分布因此也取决于领域大小的取值。 通常,直接忽略掉那些超出直方图裁剪限幅的部分是不好的,而应该将这些裁剪掉的部分均匀的分布到直方图的其他部分。 也有通过插值加快计算速度,如上所述的直接的自适应直方图,不管是否带有对比度限制,都需要对图像中的每个像素计算器领域直方图以及对应的变换函数,这使得算法及其耗时。
本篇介绍 matplotlib 中直方图的用法。直方图用来表示变量的分布特征。matplotlib 中用 hist() 函数用来绘制直方图。 我们先绘制一个简单的直方图: import matplotlib.pyplot as plt import numpy as np X = np.random.randint(0,101,1000) plt.hist 可设置数据中每个数的权重,默认权重都为1 #density=True#归一化 #cumulative=True #累积 plt.xticks(bins)#可设置X轴的刻度线 plt.title("归一化的累积直方图示例
counted = count_elements(seq) for k in sorted(counted): print('{0:5d} {1}'.format(k, '+' >>> import random >>> random.seed(1) >>> vals = [1, 3, 4, 6, 8, 9, 10] >>> # `vals` 里面的数字将会出现5到15次 > >> freq = (random.randint(5, 15) for _ in vals) >>> data = [] >>> for f, v in zip(freq, vals): ... +++++ 8 ++++++ 9 ++++++++++++ 10 ++++++++++++ 这个代码中,vals内的数值是不重复的,并且每个数值出现的频数是由我们自己定义的,在5和 ) >>> np.set_printoptions(precision=3) >>> d = np.random.laplace(loc=15, scale=3, size=500) >>> d[:5]
文章目录 一、图像直方图 画直方图要用到matplotlib库 图像直方图是反映一个图像像素分布的统计表,其横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。 图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。直方图的显示方式是左暗又亮,左边用于描述图像的暗度,右边用于描述图像的亮度。 直方图均衡化 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法,是图像增强的一个手段。 直方图均衡化:如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。 首先,我们创建一个包含我们感兴趣对象的图像的直方图,对象应尽可能填充图像以获得更好的结果,颜色直方图比灰度直方图更受青睐,因为对象的颜色比灰度强度更能定义对象,然后我们将这个直方图反投影到我们需要找到对象的测试图像上
cv2.waitKey() cv2.destroyAllWindows() 算法:直方图是图像内灰度值的统计特性与图像灰度值之间的函数,直方图统计图像内各个灰度级出现的次数,达到增强图像显示效果的目的 一幅图像对应唯一的灰度直方图,但是不同的图像可对应相同的直方图,一幅图像分成多个区域,多个区域的直方图之和即为原图像的直方图。 例子: 二维数组降维成一维数组:1 1 3 2 3 5 5 1 4 1出现的次数:3 2出现的次数:1 3出现的次数:2 4出现的次数:1 5出现的次数:2 归一化: 灰度级出现的频率=灰度级出现的次数 /总像素数 1出现的频率:3/9 2出现的频率:1/9 3出现的频率:2/9 4出现的频率:1/9 5出现的频率:2/9 图中圆点表示这些像素点被统计到对应的灰度级上: matplotlib.pyplot.hist 对于彩色图像,提取各个通道的图像,每个通道独立绘制灰度直方图。
文章目录 灰度直方图及直方图均衡化 目的 内容 1.直方图的显示 2.计算并绘制图像直方图 3.直方图均衡化 灰度直方图及直方图均衡化 目的 1.直方图的显示 2.计算并绘制图像直方图 3.直方图的均衡化 内容 灰度直方图用于显示图像的灰度值分布情况,是数字图像处理中最简单和最实用的工具。 MATLAB中提供了专门绘制直方图的函数 imhist() 。 \DIP3E_CH02\Fig0221(a)(ctskull-256).tif ','tif'); figure; imhist(A); title('对应直方图') 2.计算并绘制图像直方图 A:用 histeq 函数(自动直方图均衡化) K=histeq(I); figure; imshow(K),title('经直方图均衡化后的图') figure; imhist(K),title('直方图均衡化后的直方图
counted = count_elements(seq) for k in sorted(counted): print('{0:5d} {1}'.format(k, '+' >>> import random >>> random.seed(1) >>> vals = [1, 3, 4, 6, 8, 9, 10] >>> # `vals` 里面的数字将会出现5到15次 > >> freq = (random.randint(5, 15) for _ in vals) >>> data = [] >>> for f, v in zip(freq, vals): ... ++++++ 8 ++++++ 9 ++++++++++++ 10 ++++++++++++ 这个代码中,vals内的数值是不重复的,并且每个数值出现的频数是由我们自己定义的,在5和 ) >>> np.set_printoptions(precision=3) >>> d = np.random.laplace(loc=15, scale=3, size=500) >>> d[:5]
学习计算并绘制直方图,直方图均衡化等。图片等可到文末引用处下载。 目标 计算并绘制直方图 (自适应)直方图均衡化 OpenCV函数:cv2.calcHist(), cv2.equalizeHist() 教程 啥叫直方图 简单来说,直方图就是图像中每个像素值的个数统计, ] 参数2:类似前面提到的dims,灰度图写[0]就行,彩色图B/G/R分别传入[0]/[1]/[2] 参数3:要计算的区域,计算整幅图的话,写None 参数4:前面提到的bins 参数5:前面提到的range 直方图均衡化 一副效果好的图像通常在直方图上的分布比较均匀,直方图均衡化就是用来改善图像的全局亮度和对比度。其实从观感上就可以发现,前面那幅图对比度不高,偏灰白。 小结 直方图是一种分析图像的手段。 cv2.calcHist()和numpy.bincount()均可用来计算直方图,使用Matplotlib绘制直方图。
Desktop/Lena.png')#原始图像 cv2.imshow("original",o) histb=cv2.calcHist([o],[0],None,[256],[0,255])#绘制B分量直方图 histg=cv2.calcHist([o],[1],None,[256],[0,255])#绘制G分量直方图 histr=cv2.calcHist([o],[2],None,[256],[0,255 cv2.waitKey() cv2.destroyAllWindows() 算法:颜色直方图是在许多图像检索系统中被广泛采用的颜色特征。 颜色直方图特别适于描述那些难以进行自动分割的图像。 如果设为True,则直方图在开始计算时不会被清零,计算的是多个直方图的累积结果,用于对一组图像计算直方图,可选参数
文章目录 一、图像直方图 二、直方图应用 1. 直方图均衡化 2. 直方图比较 三、直方图反向投影 1. HSV和RGB色彩空间 2. 反向投影 一、图像直方图 画直方图要用到 matplotlib 库 图像直方图是反映一个图像像素分布的统计表,其横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。 直方图均衡化 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法,是图像增强的一个手段。 直方图均衡化:如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。 首先,我们创建一个包含我们感兴趣对象的图像的直方图,对象应尽可能填充图像以获得更好的结果,颜色直方图比灰度直方图更受青睐,因为对象的颜色比灰度强度更能定义对象,然后我们将这个直方图反投影到我们需要找到对象的测试图像上