python绘制灰度图片直方图-数字图像处理灰度变换之灰度直方图及python实现

图像灰度直方图

灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。直方图显示图像数据时会以左暗右亮的分布曲线形式呈现出来。横坐标是灰度级,纵坐标是该灰度级出现的频率。图像的对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,灰度级范围越大代表对比度越高;反之对比度越低,低对比度的图像在视觉上给人的感觉是看起来不够清晰,所以通过算法调整图像的灰度值,从而调整图像的对比度是有必要的。

获得图像的灰度直方图def calGrayHist(img):

h,w = img.shape[:2]

gray_hist = np.zeros([256], np.uint64)

for i in range(h):

for j in range(w):

gray_hist[img[i][j]] += 1

return gray_hist

不过通常会将纵坐标归一化到[0,1][0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数,得到归一化灰度直方图,计算公式如下:

其中,

是像素的灰度级,

是具有灰度

的像素的个数,MN是图像中总的像素个数。

直方图均衡化 Histogram Equalization

假如图像的灰度分布不均匀,其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。通常采用直方图均衡化及直方图规定化两种变换,使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的。

直方图均衡化,对图像进行非线性拉伸,重新分配图像的灰度值,使一定范围内图像的灰度值大致相等。这样,原来直方图中间的峰值部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较为平坦的直方图。

直方图的均衡化实际也是一种灰度的变换过程,通常均衡化选择的变换函数是灰度的累积概率

全局直方图均衡化def equalizeHist_map(img_gray):#输入必须是灰度图像

h, w = img_gray.shape

#计算灰度直方图

gray_hist = calGrayHist(img_gray)

#计算累加灰度直方图

cumulative_hist = np.zeros([256], np.uint64)

for p in range(256):

if p == 0:

cumulative_hist[p] = gray_hist[p]

else:

cumulative_hist[p] = cumulative_hist[p-1] + gray_hist[p]

#根据累加灰度直方图得到输入灰度级和输出灰度级之间的映射关系

relative_map = np.zeros([256], np.uint8)

coff = 256.0/(h*w)

for p in range(256):

q = coff * float(cumulative_hist[p]) -1

if q < 0:

relative_map[p] = 0

else:

relative_map[p] = math.floor(q)

return relative_map

img = cv2.imread('test.png')

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

relative_map = equalizeHist_map(img_gray)

img_result = np.zeros(img.shape, np.uint8)

h,w = img.shape[:2]

for i in range(h):

for j in range(w):

img_result[i][j] = relative_map[img[i][j]]

虽然全局直方图均衡化方法对提高对比度很有效,但是均衡化处理以后暗区域的噪声可能会被放大,变得清晰可见,而亮区域可能会损失信息。为了解决该问题,提出了自适应直方图均衡化(Aptive Histogram Equalization)方法,自适应直方图均衡化首先将图像划分为不重叠的区域块,然后对每一个块分别进行直方图均衡化。

线性变换图像增强的缺点:需要根据不同的应用及图像自身的信息进行合理的选择,可能需要进行多次测试,所以选择合适的参数是相当麻烦的。有时候,需要图像具有某一特定的直方图形状(也就是灰度分布),而不是均匀分布的直方图。直方图正规化也叫做直方图匹配,用于将图像变换为某一特定的灰度分布,也就是其目的的灰度直方图是已知的。这其实和均衡化很类似,均衡化后的灰度直方图也是已知的,是一个均匀分布的直方图;而规定化后的直方图可以随意的指定,直方图正规化就是基于当前图像情况自动选取a和b的值的方法。

————————————————

部分参考自:https://blog.csdn.net/victory_tc/article/details/97361911和https://www.cnblogs.com/wangguchangqing/p/7098213.html

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值