直方图均衡化的计算以及MATLAB实现
直方图均衡,这里不写公式,只看怎么算
一.手算直方图均衡
例如一个矩阵
\[源矩阵=
\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) | 8 | 0.125 | 0.125 | 7*0.125=0.875 | 1 |
P(h=1) | 0 | 0 | 0.125 | 7*0.125=0.875 | 1 |
P(h=2) | 0 | 0 | 0.125 | 7*0.125=0.875 | 1 |
P(h=3) | 0 | 0 | 0.125 | 7*0.125=0.875 | 1 |
P(h=4) | 31 | 0.484375 | 0.609375 | 7*0.609375=0.4.265625 | 4 |
P(h=5) | 16 | 0.25 | 0.859375 | 7*0.859375=6.015625 | 6 |
P(h=6) | 8 | 0.125 | 0.984375 | 7*0.125=6.890625 | 7 |
P(h=7) | 1 | 0.015625 | 1 | 7*1=7 | 7 |
\[直方图均衡化后=
\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:(默认值);