CLAHE
CLAHE 是一種非常有效的直方圖均衡演算法, 目前網上已經有很多文章進行了說明, 這裡說一下自己的理解.
CLAHE是怎麼來的
直方圖均衡是一種簡單快速的影像增強方法, 其原理和實現過程以及改進可以檢視這裡: 一文搞懂直方圖均衡_yfor1008-CSDN部落格
目前存在一些問題:
- 直方圖均衡是全域性的, 對影像區域性區域存在過亮或者過暗時, 效果不是很好;
- 直方圖均衡會增強背景噪聲, 如下圖所示為 CLAHE 中的示例:
為了解決上述2個問題, 就有2方面的解決方法: 一是解決全域性性問題, 二是解決背景噪聲增強問題.
- 針對全域性性問題: 有人提出了對影像分塊的方法, 每塊區域單獨進行直方圖均衡, 這樣就可以利用區域性資訊來增強影像, 這樣就可以解決全域性性問題;
- 針對背景噪聲增強問題: 主要背景增強太過了, 因而有人提出了對對比度進行限制的方法, 這樣就可以解決背景噪聲增強問題;
將上述二者相結合就是 CLAHE 方法, 其全稱為: Contrast Limited Adaptive Histogram Equalization.
CLAHE 演算法流程
CLAHE 演算法流程主要有以下幾個步驟:
- 預處理, 如影像分塊填充等;
- 對每個分塊處理, 計算對映關係, 計算對映關係時使用了對比度限制;
- 使用插值方法得到最後的增強影像;
其處理流程可以用如下示意圖表示:
實現及效果
這裡使用matlab實現了該演算法, 實現過程參考了: Contrast Limited Adaptive Histogram Equalization (CLAHE) - File Exchange - MATLAB Central (mathworks.com) 及matlab原始碼 adapthisteq
.
以下為幾組測試結果:
從左往右以此為: 原圖, HE, CLAHE, 從圖中可以看到, CLAHE不僅實現了影像細節的增強, 還抑制了背景噪聲.
從左往右以此為: 原圖, HE, CLAHE, 從圖中可以看到, CLAHE實現了對細節的增強且沒有使得影像過度增強.
關於關鍵步驟的說明
關於雙線性插值
- 對於每個分塊都是將其分成 4 個子塊, 然後每個子塊與其相鄰塊的子塊重新構成一個分塊;
- 對於新構成的塊使用雙線性插值得到增強後的影像;
- 對於第1行的上面一行子塊僅需考慮相鄰行的上面一行子塊, 最後行, 第1列及最後列同理;
- 對於4個角上的子塊, 直接使用本身所在塊的對映關係, 不需要進行插值;
如下圖所示:
關於限制對比度
CLAHE 中使用的方法是不斷地迴圈, 直到將所有截斷後多餘的畫素都新增到直方圖中. 這種方法實現過程比較複雜, 個人認為可以簡化, 如:
- 截斷後直接丟棄;
- 截斷後直接均勻新增到直方圖所有的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: 沒有相關說明
這裡測試對比了 uniform
和 rayleigh
, 如下所示為水下影像測試結果(正常影像測試幾乎沒有差別, 這裡不進行展示了):
從左到右依次為: 原圖, uniform
和 rayleigh
, 目前沒有看出二者的本質區別.
不過這張影像來源: Computer vision algorithm removes the water from underwater images » Behind the Headlines - MATLAB & Simulink (mathworks.com), 作者提出了一種 Sea-thru
方法, 效果不錯, 這裡下mark一下, 後面有時間在研究研究, 效果如下所示:
參考
- Contrast Limited Adaptive Histogram Equalization (CLAHE) - File Exchange - MATLAB Central (mathworks.com)
- Image Enhancement - CLAHE - 知乎 (zhihu.com)
- CLAHE (Contrast Limited Adaptive Histogram Equalization) (amroamroamro.github.io)
- 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)