直方图均衡化的计算以及MATLAB实现

手算直方图均衡化;MATLAB的histeq()和imadjust()实现直方图调整;

直方图均衡,这里不写公式,只看怎么算

一.手算直方图均衡

例如一个矩阵

\[源矩阵= \left[ \begin{matrix} 4&4&4&4&4&4&4&0\\ 4&5&5&5&5&5&4&0\\ 4&5&6&6&6&5&4&0\\ 4&5&6&7&6&5&4&0\\ 4&5&6&6&6&5&4&0\\ 4&5&5&5&5&5&4&0\\ 4&4&4&4&4&4&4&0\\ 4&4&4&4&4&4&4&0\\ \end{matrix} \right] \]

由题意或矩阵分析,该矩阵的灰度值范围是[0,7]

现在,统计计算各灰度值数量、概率、累计概率

映射后的灰度值计算=最大灰度值差*当前累计概率

由于灰度值为正数,所以最后要取整

灰度值数量概率累计概率映射后的灰度值取整
P(h=0)80.1250.1257*0.125=0.8751
P(h=1)000.1257*0.125=0.8751
P(h=2)000.1257*0.125=0.8751
P(h=3)000.1257*0.125=0.8751
P(h=4)310.4843750.6093757*0.609375=0.4.2656254
P(h=5)160.250.8593757*0.859375=6.0156256
P(h=6)80.1250.9843757*0.125=6.8906257
P(h=7)10.01562517*1=77

\[直方图均衡化后= \left[ \begin{matrix} 4&4&4&4&4&4&4&1\\ 4&6&6&6&6&6&4&1\\ 4&6&7&7&7&6&4&1\\ 4&6&7&7&7&6&4&1\\ 4&6&7&7&7&6&4&1\\ 4&6&6&6&6&6&4&1\\ 4&4&4&4&4&4&4&1\\ 4&4&4&4&4&4&4&1\\ \end{matrix} \right] \]

二.matlab直方图均衡

方法一

  • histeq(mat):对矩阵进行直方图均衡化
  • hist(mat):对矩阵进行直方图显示
  • imhist(mat):对矩阵进行直方图显示

对于hist和imhist区别目前不知道,只是当自定义小矩阵用imhist显示直方图不成功,用hist能够显示成功

方法二

  • imadjust(img,[low_in,high_in],[low_out,high_out],gamma)
  • -[low_in,high_in]:需要扩展的范围,归一化值,即[0,1]
  • -[low_out,high_out]:扩展到这个范围,同上
  • -gamma:映射方式(系数)

<1变亮;

1:变暗;

=1:(默认值);