一文搞懂直方圖均衡

耳王東令發表於2021-09-12

直方圖均衡

定義

根據維基百科上的定義, 直方圖均衡(Histogram Equalization)是影像處理領域中利用直方圖對對比度進行調整的方法.

顧名思義, 直方圖均衡是將直方圖的分佈(概率密度)調整為均勻分佈.

為什麼要做直方圖均衡

根據資訊理論, 資訊的熵越大, 包含的資訊也就越多, 熵的計算公式如下:

\[H=-\sum_{i=0}^{n}p(x_i)log_2(p(x_i)) \tag{1} \]

只有當 \(p(x_i)\)​ 均勻分佈時, 熵的值最大. 對應到影像上, 當影像直方圖均勻分佈時, 影像對比度最大. 如下圖所示:

藍色為原始影像直方圖, 綠色為均衡後直方圖, 對應的處理後的影像為:

可以看到, 直方圖均衡處理後, 影像變得更加清晰了.

怎麼做直方圖均衡

知道了為什麼, 就要知道怎麼做. 一般直方圖均值有以下幾個步驟:

  1. 統計影像的直方圖, 歸一化到[0,1]

\[p_r(r_k)=\frac{n_k}{H*W}, k=0,1,2,\cdot,L-1 \tag{2} \]

  1. 計算對映函式

\[s_k=T(r_k)=(L-1)\sum_{j=0}^{k}p_r(r_j) \tag{3} \]

式中, \(H\), \(W\) 分別為影像的高和寬, \(n_k\) 表示灰度值為 \(r_k\) 的畫素的個數, \(s_k\) 為變換後的灰度值, \(T(r_k)\) 為對映函式, 計算過程使用了累計直方圖.

  1. 利用得到的對映函式, 對影像進行處理
  2. 對於RGB影像, 可以轉到HSV空間, 對V通道進行均衡後, 轉回RGB空間, 如下圖所示結果:

為什麼可以這麼做

知道怎麼做了, 就要知道為什麼可以這麼做. 這裡解釋下為啥可以這麼做, 即公式(3)是怎麼得到的.

設原始直方圖分為為

\[p_r(r_k) \]

均衡化後的直方圖分佈為

\[p_s(s_k)=\frac{1}{L-1} \tag{4} \]

對映函式為

\[s_k=T(r_k) \]

這裡對映函式必須為單調遞增函式, 滿足:

\[\int_0^{s_k}p_s(s)ds=\int_0^{r_k}p_r(r)dr \tag{5} \]

即對應區域間內畫素點的總數是一樣的, 如下圖紅色區域所示:

將公式(4)代入公式(5), 則有:

\[\frac{s_k}{L-1}=\int_0^{r_k}p_r(r)dr \]

因而, 可以得到:

\[s_k=(L-1)\int_0^{r_k}p_r(r)dr \tag{6} \]

對應的離散形式為公式(3).

存在問題

  1. 如果對映函式為公式(6), 為連續形式, 這種對映是可逆的, 但更改為離散形式, 公式(3)後, 變成了不可逆的.
  2. 對映變換會丟失資訊, 對出現比例很少的灰度進行合併, 從而會丟失部分細節.
  3. 對於佔比例較多的灰度, 則會將其拉伸, 而導致其佔據了更多的灰度, 壓縮了其他灰度.

改進

直方圖均衡過度的強調了灰度個數的重要性, 對數量多的灰度過度的進行了增強, 而影像中, 比例比不是很多的灰度往往更重要, 因而改進的方向就是減少數量多的灰度的影響, 我這裡想到的有 3 種方法:

  1. 對直方圖開根號, 減少數量多灰度的影響;
  2. 對直方圖進行截斷, 超過部分數量直接去除, 從而減小數量多灰度的影響;
  3. 在第2種方法的基礎上, 將超出部分均勻的加到直方圖的每個bin上(該想法來源於CLAHE);

這3種方法的對映關係曲線如下所示:

從圖中可以看到, 原始的直方圖均衡後影像最亮, 如下所示為幾種方法的結果對比, 依次為原圖, 原始直方圖, 改進0, 改進1, 改進2:

可以看到, 直方圖可以改善影像整體的質量, 但對於某些區域性影像, 則由於直方圖的性質導致過亮或者過暗.

小結

這裡總結下直方圖均衡化的優缺點:

  1. 直方圖均衡化演算法簡單, 速度快;
  2. 可以改善影像整體質量;
  3. 但對於影像區域性質量改善效果不是很好;

參考

  1. https://zhuanlan.zhihu.com/p/44918476
  2. https://zhuanlan.zhihu.com/p/78017679
  3. https://zhuanlan.zhihu.com/p/37168516
  4. https://zh.wikipedia.org/wiki/直方圖均衡化
  5. https://blog.csdn.net/yanhe156/article/details/83083659

相關文章