zoukankan      html  css  js  c++  java
  • Histogram Equalization

    转载请注明出处。

    Histogram Equalization 也就是直方图均衡化, 是一种常用的通过直方图处理来增强图像的方法。

    对于一副灰度图像,其像素范围一般在0~255之间,我们记nk(0<=k<=255)为灰度级为k的像素出现的频率,M,N分别为图像的行与列,则P(rk)=nk/MN我们得到归一化的灰度直方图。对于归一化的概率直方图ΣP(rk) =1

    下面左边几幅图像分别为暗图像,亮图像,低对比图像已经高度比图像 右边为其所对应的归一化灰度分布直方图

    可以看出对于强对比的图像,其灰度直方图分布比较均匀,因此我们想通过一种传递函数实现其他三种情况下直方图的均匀分布。

    所以给出一个任意分布的直方图如下左,我们怎样才能得到它的均衡分布如下右图呢

    这里我们就需要找到一种从左到右的transform表达式把一副图像中的每个像素通过表达式得到其均衡化的值

    为了实现这种映射,我们这里规定T(r) 必须为增函数,所以说映射后的像素值一定不小于原值。采用增函数映射的原因是为了防止灰度反变换是出现人为缺陷。如下为单调递增函数,左图为非严格增函数,所以会出现多个值映射到一个值的现象,右图为严格单增函数,其映射为一一对应关系。

    下面推导如何通过单增函数映射实现均衡分布

    一副灰度图像的灰度级可以看成是0~255区间内的随机变量,用Pr(r)和Ps(s)分别表示其映射前后的概率密度函数,T(r)为映射函数,那么在P(r),T(r)已知的条件下,且T(r)连续可微,那么其对应关系可以用下式表示:

     

    所以输出灰度的PDF就又输入灰度的PDF以及传递函数决定,我们又有

    其中T(r) 我们用下式表示也就是输入灰度的CDF(累积分布函数)

    根据CDF性质我们知道其一定为单增函数并且积分上限为L-1时积分为1,所以符合变换函数的要求。对其求导得到如下

    据此dr/ds我们也可以轻易得到,然后带人前式我们有

    到此我们可以证明输出灰度的PDF是均匀分布!

     下面是MATLAB实现

    function [I2,H] = histeq(I,bin)
    I2 = zeros(size(I));
    [row,col] = size(I);
    cdf = zeros(bin,1);
    h = zeros(bin,1);
    hist = imhist(I,bin);
    % calculate cdf
    for g = 1:bin
        cdf(g) = 0;
        for i=1:1:g
               cdf(g) = cdf(g) + hist(i);
        end
    end
    %nomorlize 
    for k = 1:bin
        h(k) = (cdf(k)-1)/((row*col)-1) * 255;
    end
    for k = 1:bin
        h(k) = round(h(k)) + 1;
    end
    % remap to the new image
    for r = 1:row
        for c = 1:col
            idx = (I(r,c)/(256/bin)) + 1;
            I2(r,c) = h(idx);
        end
    end
    
    I2 = uint8(I2);
    H = imhist(I2);
    

    效果如下图

  • 相关阅读:
    启动一个线程是用run()还是start()? .
    多线程有几种实现方法?同步有几种实现方法?
    同步和异步有何异同,在什么情况下分别使用他们?举例说明。
    abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
    写clone()方法时,通常都有一行代码,是什么?
    解释Spring支持的几种bean的作用域。
    Spring结构?
    说说hibernate的三种状态之间如何转换?
    测试用例设计的原则是什么?目前主要的测试用例设计方法有哪些?
    一套完整的测试应该由哪些阶段组成?
  • 原文地址:https://www.cnblogs.com/klitech/p/5772914.html
Copyright © 2011-2022 走看看