直方图均衡基本原理--python的实现方法

1.基本原理

通过一个变换,将输入图像的灰度级转换为`均匀分布`,变换后的灰度级的概率密度函数为
 
Ps(s)=1L−1Ps(s)=1L−1




直方图均衡的变换为
 

s=T(r)=(L−1)∫r0Pr(c)dcs=T(r)=(L−1)∫0rPr(c)dc


 

  • ss为变换后的灰度级,rr为变换前的灰度级
  • Pr(r)Pr(r)为变换前的概率密度函数

2. 测试结果

直方图均衡基本原理--python的实现方法





上代码

[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
 
def hist_equalization(input_image):
    '''
    直方图均衡(适用于灰度图)
    :param input_image: 原图像
    :return: 均衡后的图像
    '''
    output_imgae = np.copy(input_image) # 输出图像,初始化为输入
 
    input_image_cp = np.copy(input_image) # 输入图像的副本
 
    m, n = input_image_cp.shape # 输入图像的尺寸(行、列)
 
    pixels_total_num = m * n # 输入图像的像素点总数
 
    input_image_grayscale_P = [] # 输入图像中各灰度级出现的概率,亦即输入图像直方图
 
    # 求输入图像中各灰度级出现的概率,亦即输入图像直方图
    for i in range(256):
        input_image_grayscale_P.append(np.sum(input_image_cp == i) / pixels_total_num)
 
    # 求解输出图像
    t = 0               # 输入图像的灰度级分布函数F
    for i in range(256):
 
        t = t + input_image_grayscale_P[i]
 
        output_imgae[np.where(input_image_cp == i)] = 255 * t
 
    return output_imgae