zoukankan      html  css  js  c++  java
  • 【数字图像处理】直方图均衡化

    直方图

    像这样形状的数据统计图就叫做直方图。

    不严谨的来说,簇状柱状图也可以看成直方图,我们之后不进行区别。

    灰度直方图


    横轴为灰度值,纵轴为灰度值在图中的频数。
    e.g. 如下图

    设灰度级为2,最大灰度值为1
    n(0)=13
    n(1)=7

    归一化

    即令纵轴为频率,横轴上将最大灰度值映射到1.

    均衡化

    目的:让各个灰度值的频率大致相同(除了0),也就是所谓的分布均匀。


    这个过程,我们需要求出变换后各个灰度值所对应的新频数。
    方法:把灰度相近的值放到一起,让矮的“长条”变高。

    虽然有一些灰度值被我们丢弃了,但是留下的灰度值看起来更平坦了。需要注意的是,我们的转移不应该改变灰度的顺序,原来的灰度值为0的“长条”不可以越过灰度值为1的长条到灰度值为2的上面去。

    理想情况:我们能把直方图完全平坦化,也就是变换后的各灰度值频率完全一致。

    归一化后,根据(int^1_0p(r)=1)可得(p(r)=1)
    设变换前的灰度r转移到灰度为s的“长条”上了。

    我们设这个变换为(s=T(r)),显然,只要找到这个变换的具体表达式,我们就能实现均衡化了。
    (0≤r,s≤1)
    分布函数:(F_s(s)=∫_{-∞}^sp_s(s)ds)
    我们认为理想情况下,分布函数在改变前后不变:(F_r(r) =∫_{-∞}^rp_r (r)dr=∫_{-∞}^sp_s(s)ds)
    两边对s求导得:(p_s(s)=frac{d[int^r_{-infty}p_r(r)dr]}{dr}cdotfrac{dr}{ds}=p_rfrac{dr}{ds})
    假设:(r=T^{-1}(s) p_s(s)=p_rfrac{d}{ds}ig(T^{-1}(s)ig))
    (p_s(s)=1)代入得:(ds=p_rdr)
    两边积分:(s=int_0^rp_rdr=T(r)=sum_0^rp_i)
    这样我们就求出了(T(r))

    例子

    64*64的图片,灰度级为8。

    r0 r1 r2 r3 r4 r5 r6 r7
    n 790 1023 850 656 329 245 122 81
    p 0.19 0.25 0.21 0.16 0.08 0.06 0.03 0.02

    求出ri变换后对应的归一化灰度值(用上面求出的(s=int_0^rp_rdr=T(r)=sum_0^rp_i))。

    s 0.19 0.44 0.65 0.81 0.89 0.95 0.98 1.00
    归一化的逆过程,求出实际的灰度值。
    Ts 1.33 3.08 4.55 5.67 6.23 6.65 6.86 7.00
    四舍五入求整⌊7s+0.5⌋。
    si 1 3 5 6 6 7 7 7
    把灰度值相同的频数与频率各自相加。
    790 1023 850 985 448
    0.19 0.25 0.21 0.24 0.11
    si s0 s1 s2 s3 s4 s5 s6 s7
    n 0 790 0 1023 0 850 985 448
    p 0 0.19 0 0.25 0 0.21 0.24 0.11
    可以看出来,虽然不是完全理想,但是比变换前,直方图更平坦了。

  • 相关阅读:
    ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
    循环读取list 的几种方法?
    jQuery里$(this)和this的区别在哪?
    Hibernate多对多双向关联需要注意的问题(实例说话)
    window.open()用法说明
    struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
    页面中的删除确认(ajax)、输入框中确认信息是否可用(ajax)的jquery代码
    理解ValueStack的基本机制 OGNL表达式
    Struts2中的ModelDriven机制及其运用
    mySQl数据库中不能插入中文的处理办法
  • 原文地址:https://www.cnblogs.com/tiumo/p/12416319.html
Copyright © 2011-2022 走看看