APP下载

基于Python的直方图均衡探讨

2023-11-06惠为君

电脑知识与技术 2023年25期
关键词:灰度级数字图像数目

惠为君

(盐城工学院,江苏盐城 224051)

0 引言

图像增强是指对图像进行灰度变换,使图像与视觉响应相匹配,加强图像的视觉效果的一种图像处理方法。灰度变换的方法很多,其中的一种是点运算,指用一个单调递增的函数对原图像的灰度进行非线性运算,从而实现对比度增强[1-3]。

如图1 所示,x 表示变换源图像的灰度值,y 表示目标图像的灰度值。变换函数y=T(x)需要满足以下两个要求:

图1 变换函数

1) 0 ≤x ≤255,0 ≤y ≤255,x 和y 的取值范围相同。这一条保证变换以后,像素值不能超过范围。

2)T(x)在区间[0 255]上严格单调递增。这一条保证源像素值和目标像素值大小一一对应。不允许出现灰度倒置甚至于灰度翻转,否则影响视觉效果。

不是所有的单调递增函数都可用于灰度变换。常用的变换函数有两种形式,函数Ⅰ和函数Ⅱ。对于函数Ⅰ,源图像像素范围[0 128]变换到[0 N2],对于函数Ⅱ,则变换到[0 N1]。可以看出,N2>128,N1<128,函数Ⅰ拉伸了低灰度级,压缩了高灰度级,函数Ⅱ则相反。可知,曲线斜率大于1的时候,灰度拉伸,小于1的时候,灰度压缩。

1 直方图均衡原理

一幅数字图像中,不同灰度值的像素的数目是不同的。由于光照等的影响,像素值的分布不同,如果光照较强,高灰度级像素较多,如果光照弱,低灰度级像素较多[4]。

设置的变换函数需要把灰度值相对集中的灰度范围拉伸,灰度值分布较少的灰度范围压缩,使得总体上灰度的分布更均匀。

在需要拉伸的灰度区域,设置的变换函数斜率大于1,在需要压缩的灰度区域变换函数斜率小于1。因此,灰度值越集中,对应的变换函数的斜率越大,反之越小,灰度变换函数的斜率与灰度分布有关。

直方图均衡指的是利用图像的直方图,构建符合以上要求的变换函数,实现图像增强[5]。

为了方便讨论,假设图像的灰度值连续分布,其取值范围[0,L-1]。灰度值分布具有随机性,用概率密度为f(x)表示,其含义表示灰度值x 附近单位区间的像素数目占总数的百分比。

T(x)单调递增,x,y 的灰度值变化范围都取[0,L-1],符合变换函数的要求。灰度值y 对应的概率密度为g(y)。对于任意x,必然存在y,使得公式(2)成立。

式(2)两边对x求导:g(y)dy/dx=f(x)

式(1)对x求导:dy/dx=(L -1)f(x)

得到g(y)=1/(L -1)

变换以后,概率密度函数g(y)为常数,灰度值分布为均匀分布。变换之前,x 的分布局限在一个较小的范围,反映在视觉效果上,图像不清晰,变换以后灰度值分布是均匀的,图像对比度增强,在视觉效果上图像更清晰。

对于数字图像,j表示灰度级,xj表示灰度级j对应的灰度值,nxj表示灰度值为xj的像素数目。灰度值xj的范围为[0,L-1],N 表示像素的总数目。和模拟图像对应的数字图像变换函数定义如表1所示。最终得到变换函数:

表1 数字图像灰度变换函数

由于变换函数与直方图有关,变换结果为均匀分布,因此称这种图像增强方法为直方图均衡。yi为目标图像的灰度值,xi为源图像的灰度值,i为对应的灰度级。

2 Python实现

直方图均衡算法实现步骤如下:

1)获取图像灰度级分布i。

2)统计灰度级i对应的像素数目ni。

3)计算灰度直方图的归一化概率表达式:p(si)=ni/N,N为像素总的数目。

4)计算累积灰度直方图。

5)进行取整扩展,计算映射后输出图像各灰度级对应灰度值的归一化表达形式tk。

6)确定映射关系sk→tk。

7)统计映射后各灰度级的像素数目nk。

8)得到新的灰度统计直方图的归一化概率表达形式:pt(tk)=nk/N,N 为输出图像的像素数目,即原始图像的像素数目。

基于Python 和OpenCV 实现以上直方图均衡算法[6-7]。其步骤如下:

1) 调用cv2.imread()函数,读取JPEG 数字图像[2],通过参数设置,直接保存为n灰度图像数据。对各个灰度级进行累计计算,并归一化。

2)累积直方图函数pix_gray(img_gray),累积直方图函数乘以(L-1)得到转换函数。

3)利用转换函数实现源图像的直方图均衡,得到目标图像。

4)保存目标图像。

在读取图像之后,实现直方图灰度级统计的函数如下:

其中,N=h×w,表示总的像素数目,lut 存放变换的结果。

3 测试及分析

测试了三种256 色灰度图像,这三种图像的灰度值分布都比较集中,一种灰度值较小的像素较多,如图2 所示,一种灰度值居中的像素较多,如图3 所示,一种灰度值较大的像素较多,如图4所示。

图2 灰度值偏小图像及处理结果

图3 灰度值居中图像及处理结果

图4 灰度值偏大图像及处理结果

由图2 直方图可知,图像像素值主要分布在0~100 之间,源图像偏暗。转换函数分为两个部分,0~100之间部分斜率较大,对0~100级之间的灰度有很好的拉伸效果。由于拉伸以后,图像灰度均匀分布,目标图像清晰很多。

由图3 直方图可知,图像像素值主要分布在100~200 之间,源图像灰蒙蒙的。转换函数在100~200之间部分斜率较大,对100~200级之间的灰度有很好的拉伸效果。由于拉伸以后,汽车和地砖清晰很多。

由图4 直方图可知,图像像素值主要分布在100~255之间,源图像偏亮。转换函数在100~200之间部分斜率较大,对100~255级之间的灰度有很好的拉伸效果。由于拉伸以后,阳光下的植物清晰很多。

4 结束语

由于光照等环境的影响,图像的灰度值分布可能比较集中,这就导致图像对比度较小、不清晰。利用直方图累积函数作为变换函数可以对源图像进行点运算,对源图像的灰度范围进行拉伸或压缩,目标图像的灰度值将是均匀分布,这样图像的对比度将增强,清晰度将提高。直方图均衡将灰度值集中的灰度值拉伸,并不代表灰度值一定增多。

猜你喜欢

灰度级数字图像数目
人眼可感知最多相邻像素灰度差的全局图像优化方法*
ARGUS-100 艺术品鉴证数字图像比对系统
《哲对宁诺尔》方剂数目统计研究
牧场里的马
基于块效应测度的JPEG数字图像盲取证
基于实测校正因子的实时伽马校正算法
数字图像修复在图像压缩上的应用
基于DirectShow的便携式X射线数字图像采集的实现
探索法在数学趣题中的应用