zoukankan      html  css  js  c++  java
  • 直方图均衡基本原理及Python实现

    1. 基本原理

    通过一个变换,将输入图像的灰度级转换为`均匀分布`,变换后的灰度级的概率密度函数为

    $$P_s(s) = frac{1}{L-1}$$

    直方图均衡的变换为

    $$s = T(r) = (L-1)int_0^r {P_r(c)} \,{ m d}c $$

    • $s$为变换后的灰度级,$r$为变换前的灰度级
    • $P_r(r)$为变换前的概率密度函数

    2. 测试结果

    图源自skimage

    3.代码

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

    4. 数学证明

    目标变换

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

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

    4.1 假定

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

    4.2 归一化后的直方图

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


    4.3 证明

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


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

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

  • 相关阅读:
    《javascript实战》Part1——2成功javascript开发者的7个习惯
    《javascript实战》Part1——1
    [转载]——技术人员如何去面试?
    [转载]javascript练习(二)JS实现淘宝幻灯片效果
    [转载]——To 注释 or not 注释, that is a question
    [转载]javascript练习(一)JS仿Flash图片切换效果
    [转载]——网站前端优化一些小经验
    w3c盒式模型/ie盒式模型
    jQuery-动画 animate() hide() show() toggle() fadeT0() slideToggle()
    24.OOP面向对象;
  • 原文地址:https://www.cnblogs.com/iwuqing/p/11318990.html
Copyright © 2011-2022 走看看