前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数字图像处理灰度变换之灰度直方图及python实现

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

作者头像
Minerva
发布2020-05-25 16:45:59
2.6K0
发布2020-05-25 16:45:59
举报

图像灰度直方图

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

获得图像的灰度直方图

代码语言:javascript
复制
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

假如图像的灰度分布不均匀,其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。通常采用直方图均衡化及直方图规定化两种变换,使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的。 直方图均衡化,对图像进行非线性拉伸,重新分配图像的灰度值,使一定范围内图像的灰度值大致相等。这样,原来直方图中间的峰值部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较为平坦的直方图。 直方图的均衡化实际也是一种灰度的变换过程,通常均衡化选择的变换函数是灰度的累积概率

全局直方图均衡化

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python编程和深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 图像灰度直方图
  • 获得图像的灰度直方图
    • 直方图均衡化 Histogram Equalization
    • 全局直方图均衡化
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档