美文网首页
直方图均衡数学证明及Python实现

直方图均衡数学证明及Python实现

作者: iwuqing | 来源:发表于2019-05-24 23:31 被阅读0次

    前言

    直方图均衡的核心思想是将图像中每个灰度级的概率均匀化。从直方图上,可以明显观察到均衡化后的图像直方图较处理器的更加平坦,亦即分布均匀。下面给出数学证明及Python实现。


    1 数学证明

    目标变换

    S = T(r) = (L-1)\int_0^rp_r(w)dw

    • T(r)为严格单调函数,可保证反映射时,消除二义性
    • p_r(w)为源图像归一化后的直方图

    1.1 假定

    • 图像灰度级为:[0, L-1]
    • 源图像中,k灰度级的像素个数:n_k
    • 源图像像素总数:n
    • 原图像直方图h(r_k) = n

    1.2 归一化后的直方图

    p(r_k) = n_k / n
    p(r_k)即为灰度级r_k在源图像中出现的概率估计

    1.3 证明

    概率密度函数的积分为分布函数,即对分布函数的导数为概率密度函数。

    因为p_r(r)T(r)已知,则由
    \frac{{\rm d}r}{{\rm d}S} = \frac{p_s(s)}{p_r(r)}
    又因为
    S = T(r)

    \frac{{\rm d}S}{{\rm d}r} = \frac{T(r)}{r}
    联立上三式及目标变换
    S = T(r) = (L-1)\int_0^rp_r(w)dw
    可得
    p_s(s) = \frac{1}{L-1}
    故,这意味着变换之后的图像的灰度级为均匀分布,证毕。


    2 Python实现

    import numpy as np
    
    
    def hist_equalization(intput_signal):
        '''
        直方图均衡(适用于灰度图)
        :param intput_signal:   输入图像
        :return:    直方图均衡化后的输出图像
        '''
    
        output_signal = np.copy(intput_signal)   # 输出图像,初始化为输入
    
        intput_signal_cp = np.copy(intput_signal) # 输入图像的副本
    
        m, n = intput_signal_cp.shape # 输入图像的尺寸(行、列)
    
        pixel_total_num = m * n  # 输入图像的像素点总数
    
        p_r = []   # 输入图像的概率密度
        p_s = []   # 输出图像的概率密度
    
        # 求输入图像的概率密度函数
        for i in range(256):
            p_r.append(np.sum(intput_signal_cp == i) / pixel_total_num)
    
        # 求输出图像的概率密度函数
        single_pixel_class_probobility_t = 0  # 临时存储某一灰度级的概率
        for i in range(256):
            single_pixel_class_probobility_t = single_pixel_class_probobility_t + p_r[i]
            p_s.append(single_pixel_class_probobility_t)
    
        # 求解变换后的输出图像
        for i in range(256):
            output_signal[np.where(intput_signal_cp == i)] = 255 * p_s[i]
    
        return output_signal
    

    3 对比

    我这里使用的是Python第三方库skimage中内置的图片

    • moon
    moon moon的直方图对比
    • camera
    camera camera的直方图对比

    4 GitHub

    click me

    相关文章

      网友评论

          本文标题:直方图均衡数学证明及Python实现

          本文链接:https://www.haomeiwen.com/subject/squozqtx.html