關於 CLAHE 的理解及實現

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

CLAHE

CLAHE 是一種非常有效的直方圖均衡演算法, 目前網上已經有很多文章進行了說明, 這裡說一下自己的理解.

CLAHE是怎麼來的

直方圖均衡是一種簡單快速的影像增強方法, 其原理和實現過程以及改進可以檢視這裡: 一文搞懂直方圖均衡_yfor1008-CSDN部落格

目前存在一些問題:

  1. 直方圖均衡是全域性的, 對影像區域性區域存在過亮或者過暗時, 效果不是很好;
  2. 直方圖均衡會增強背景噪聲, 如下圖所示為 CLAHE 中的示例:

為了解決上述2個問題, 就有2方面的解決方法: 一是解決全域性性問題, 二是解決背景噪聲增強問題.

  • 針對全域性性問題: 有人提出了對影像分塊的方法, 每塊區域單獨進行直方圖均衡, 這樣就可以利用區域性資訊來增強影像, 這樣就可以解決全域性性問題;
  • 針對背景噪聲增強問題: 主要背景增強太過了, 因而有人提出了對對比度進行限制的方法, 這樣就可以解決背景噪聲增強問題;

將上述二者相結合就是 CLAHE 方法, 其全稱為: Contrast Limited Adaptive Histogram Equalization.

CLAHE 演算法流程

CLAHE 演算法流程主要有以下幾個步驟:

  1. 預處理, 如影像分塊填充等;
  2. 對每個分塊處理, 計算對映關係, 計算對映關係時使用了對比度限制;
  3. 使用插值方法得到最後的增強影像;

其處理流程可以用如下示意圖表示:

實現及效果

這裡使用matlab實現了該演算法, 實現過程參考了: Contrast Limited Adaptive Histogram Equalization (CLAHE) - File Exchange - MATLAB Central (mathworks.com) 及matlab原始碼 adapthisteq.

以下為幾組測試結果:

20180727214122483_HE_CLAHE

從左往右以此為: 原圖, HE, CLAHE, 從圖中可以看到, CLAHE不僅實現了影像細節的增強, 還抑制了背景噪聲.

test_HE_CLAHE

從左往右以此為: 原圖, HE, CLAHE, 從圖中可以看到, CLAHE實現了對細節的增強且沒有使得影像過度增強.

關於關鍵步驟的說明

關於雙線性插值

  1. 對於每個分塊都是將其分成 4 個子塊, 然後每個子塊與其相鄰塊的子塊重新構成一個分塊;
  2. 對於新構成的塊使用雙線性插值得到增強後的影像;
  3. 對於第1行的上面一行子塊僅需考慮相鄰行的上面一行子塊, 最後行, 第1列及最後列同理;
  4. 對於4個角上的子塊, 直接使用本身所在塊的對映關係, 不需要進行插值;

如下圖所示:

關於限制對比度

CLAHE 中使用的方法是不斷地迴圈, 直到將所有截斷後多餘的畫素都新增到直方圖中. 這種方法實現過程比較複雜, 個人認為可以簡化, 如:

  1. 截斷後直接丟棄;
  2. 截斷後直接均勻新增到直方圖所有的bin上;

上述2種方法對對比度影響不大, 但對影像亮度有一點點影響, 如下圖所示為上述方法1與原始CLAHE方法的對比結果, 第1行為原始CLAHE, 第2行為截斷後直接丟棄方法, 第1列到第3列使用的截斷引數依次為: 0.01, 0.03, 0.05.

從圖中可看到, 對影像結果影響較大的引數是截斷閾值, 而不是是否將截斷後的資料新增到直方圖的每個bin上. 如下圖所示為另外一組測試結果, 從左到右依次為: 原始影像, 閾值0.01, 閾值0.03, 閾值0.05.

關於預處理

需對影像進行填充, 為方便進行插值, 填充後影像的每個分塊都必須為2的整數倍, 要不然不方便對每個塊劃分為4個子塊.

關於直方圖分佈型別

在檢視 matlab 原始碼時, 裡面使用了3種分佈型別:

  • uniform: CLAHE 使用的方法
  • rayleigh: 程式碼中說是適用於水下(underwater)影像
  • exponential: 沒有相關說明

這裡測試對比了 uniformrayleigh , 如下所示為水下影像測試結果(正常影像測試幾乎沒有差別, 這裡不進行展示了):

從左到右依次為: 原圖, uniformrayleigh , 目前沒有看出二者的本質區別.

不過這張影像來源: Computer vision algorithm removes the water from underwater images » Behind the Headlines - MATLAB & Simulink (mathworks.com), 作者提出了一種 Sea-thru 方法, 效果不錯, 這裡下mark一下, 後面有時間在研究研究, 效果如下所示:

參考

  1. Contrast Limited Adaptive Histogram Equalization (CLAHE) - File Exchange - MATLAB Central (mathworks.com)
  2. Image Enhancement - CLAHE - 知乎 (zhihu.com)
  3. CLAHE (Contrast Limited Adaptive Histogram Equalization) (amroamroamro.github.io)
  4. wangyanckxx/Single-Underwater-Image-Enhancement-and-Color-Restoration: Single Underwater Image Enhancement and Color Restoration, which is Python implementation for a comprehensive review paper "An Experimental-based Review of Image Enhancement and Image Restoration Methods for Underwater Imaging" (github.com)

相關文章