關於 CLAHE 的理解及實現


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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM