直方圖均衡化(HE)
直方圖均衡化是最簡單、最方便的低亮度圖片增強的算法。
HE通過拉伸圖片直方圖的分布,使得圖片的直方圖均勻的分布在[0,255] (8bit圖像),從而增強圖片的全局對比度。
適用范圍
對圖像前景和背景都非常暗(或非常亮)的圖片很有用。
缺點
- 容易增加背景噪聲的對比度,并且降低有用信號的對比度。
- 容易造成局部圖片過飽和。
保持亮度的動態直方圖均衡化(Brightness Preserving Dynamic Histogram Equalization:BPDHE)
在增強圖片對比度的時候,需要保持增強后的圖片與增強前的圖片在亮度上是相同的
適用高斯濾波器平滑直方圖
由于數字圖像的直方圖并不是平滑的,會出現比較大的波動,以及會在某些數字上有所缺失,所以在直方圖進行下一步處理前,需要先對直方圖進行一個預處理。
- 使用線性插值方法補齊直方圖上的缺損數值。
- 使用一維高斯濾波器對直方圖進行濾波。
其中是相對于kernel中心位置的坐標,
是標準差。
文章中使用的kernal大小為,
的大小為1.0762。
檢測平滑后直方圖局部最小值的位置
- 計算直方圖的一階導數。
- 由于直方圖的一階導數依然可能出現一些不平滑的現象,為此在尋找最小值之前,需要在進行一步預處理。
change +-+ to +++
change -+- to ---
- 尋找局部的最小值
the local maximums are detected as the points where four successive negative signs are followed by eight successive positive sign
將每局部最小值之間的每一部分映射到一個新的動態范圍內
假設對應于上述
個局部最大值的灰度值。
則這個局部最大值可以將圖像的直方圖分割為:
現在我們將這些子直方圖的范圍映射到新的動態范圍,映射的方法如下:
其中 是每個子直方圖
中最高的像素值,
是每個子直方圖中最低的像素值,M是該子直方圖中所有像素的數目。
對于映射后的子直方圖的范圍,可由下式計算得到:
均衡化每個子直方圖
對于每一個子直方圖,我們使用以下公式得到每個像素值對應的輸出
其中對應于像素值
為的像素數量,
為該子直方圖所包含的像素總量。
歸一化圖像的亮度
- 計算均衡化之前和之后圖像的平均亮度
和
。
- 用下的公式對均衡后的圖像進行歸一化:
其中是最終的輸出圖像,
是均衡化后的圖像。
這一步做的目的是保持增強前的輸入圖片與輸出圖片有著相同的亮度。
實現代碼
- he
Matlab中histeq函數。 - bpdhe
https://github.com/baidut/OpenCE/tree/master/others
效果比較
低亮度圖
增強低亮度圖_he
增強低亮度圖_bpdhe
從以上的效果圖可以看出,he非常容易使得圖片過飽和,對于彩色圖片來說,色彩也非常容易發生改變。
bpdhe由于保持了與原圖整體的亮度,雖然對比度相對原圖有所增強,但并不適合用于低亮度圖片的增強。
參考文獻
https://zh.wikipedia.org/wiki/直方圖均衡化
https://ieeexplore.ieee.org/document/4429280