一種強化的基於區域性直方圖裁剪均衡化的對比度調節演算法。
在很久前實現對比度受限的自適應直方圖均衡化時,就曾經想過對該演算法進行一定程度的擴充套件,之後使用自動對比度和自動色階代替直方圖均衡化也提出了新的演算法,也達到了不錯的效果。本文進一步對該演算法進行一定程度的擴充套件和補充優化。
一、本文演算法的概述
根據選取的優化的水平和垂直網格數,將影像切分成一個一個的子塊,然後統計每個子塊的直方圖資訊,並和原圖整體的直方圖資訊進行某種混合,對於彩色影像,為了避免不同通道之間處理後變化過於不協調,還增加了各通道直方圖與亮度通道直方圖的資訊合成,然後對合成後的直方圖進行直方圖裁剪和均衡化的,獲取各子塊新的對映直方圖,為了避免新的對映表中的資料有較大的奇點或噪音,對對映表的資料進行多點取樣,然後使用樣條插值演算法對取樣點進行插值,或者對新的對映表進行一定程度的高斯模糊,得到一張較為平滑的對映表。最後使用類似CLAHE演算法中的雙線性插值對每個子塊之間的對映表進行插值得到新的畫素值。本方法計算量小,速度很快,對對映表進行平滑插值或高斯模糊能有效的抑制對比度調整時產生的噪聲,防止了資訊的過度放大造成圖片失真,是一種高效並且效果突出的對比度增強演算法。
二、演算法過程詳解
1、水平和垂直網格數的確定
類似於CALHE演算法,對網格的合理選取也會對本演算法的結果產生重要的影響,過多的網格數會使得計算量顯著加大,過少的網格數使得結果趨於接近整體的直方圖均衡化,一般情況下,可選擇8*8個網格,這裡可以通過以下原則來簡單的做個優化:影像的亮度的均方差越小,即整幅影像的明暗比較一致,使用較多的網格數,比如8*8,否則使用較少的網格,比如4*4。這是因為當影像明暗較為一致時,各小塊的直方圖資料差異不會很大,而如果明暗不一致,選擇較小的塊,各塊之間的直方圖資訊差異可能很大,會造成插值時出現明顯的瑕疵。
2、按規定的網格數劃分影像,並獲取每塊的直方圖資訊HistB,HistG,HistR。
3、獲取全圖的直方圖資料HistgramB,HistgramG,HistgramR以及亮度直方圖HistgramL。
其中亮度定義為: Lightness = (R*19595 + G*38469 + B*7472) >> 16
4、對子塊直方圖和全域性直方圖進行融合,如下程式碼所示:
HistB[Index] = (HistB[Index] * Adaptation + (100 - Adaptation) * HistgramB[Index]) / 100; HistG[Index] = (HistG[Index] * Adaptation + (100 - Adaptation) * HistgramG[Index]) / 100; HistR[Index] = (HistR[Index] * Adaptation + (100 - Adaptation) * HistgramR[Index]) / 100; HistL[Index] = (HistL[Index] * Adaptation + (100 - Adaptation) * HistgramL[Index]) / 100;
其中Adaptation為融合因子,其有效範圍為[0,100],當取值越小時,全域性直方圖其主導作用,效果越接近普通的直方圖均衡。
5、對上述融合後的結果再次和亮度直方圖進行融合,融合過程如下所示:
HistB[Index] = (HistB[Index] * Correction + (100 - Correction) * HistL[Index]) / 100; HistG[Index] = (HistG[Index] * Correction + (100 - Correction) * HistL[Index]) / 100; HistR[Index] = (HistR[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;
其中Correction為顏色校正因子,其有效範圍為[0,100],當取值越大時,各通道之間越獨立,效果越接近普通的直方圖均衡。
上述程式碼中Index表示直方圖色階的索引範圍,有效值[0,Bins – 1],Bins為直方圖的數量,8位時為256。
6、按照CALHE的方式對直方圖進行裁剪,之後對裁剪的直方圖進行均衡化得到每個小塊的對映表。
7、區域性均衡化後對映表的平滑。
1) 將對映表的 Bins取K等份,得到每等份資料對應的對映表值,構成K個二維座標點序列,亦可以根據直方圖的累計資料,把累計資料平均分為K等分,得到K個二維序列點。
2)根據K個二維座標點,使用樣條插值演算法擬合出一條過各個取樣點的平滑對映曲線。
3)在平滑曲線表中取0至於Bins中各色階對應的插值結果,作為新的對映表結果。
對於Bins =256的影像,K值建議可取32左右。
或者另外一種處理方式就是對對映表進行一維方向的均值或者高斯平滑,平滑視窗可選WindowSize = 7左右。
這種平滑可以帶來一定的好處,特別是對於影像變換比較平緩的區域,能夠在一定程度上減弱由於增強帶來的色塊感覺,而且這種方式推廣到所有基於直方圖增強技術的演算法中。
8、按照CLAHE演算法的過程對每個小塊進行雙線性插值得到最終的增強效果,當然對第一行、第一列、最後一行、最後一列的子塊靠近影像邊緣的那一半都只使用對映表單個方向的線性插值,而這些子塊的其他部分以及其他子塊均使用對映表雙線性插值獲得最終結果。
如果輸入影像是灰度圖,由於只有一個通道,則本演算法中的Correction在此場景中是可捨棄的。
整個過程的流程框圖如下所示:
三、測試結果
下圖為未經過處理的原始影像,可見原始圖中對比度很差,影像的細節資訊很少,影像飽和度也很差。右側是使用本演算法後處理的效果圖,處理後影像飽和度自然,色彩鮮豔,隱藏在原圖右側的一些不可易見的細節也能清楚的展示出。
原始影像 Adaptation = 50,Correction = 50, ClipLimit = 20時的效果
Adaptation = 0,Correction = 50, ClipLimit = 20時的效果 Adaptation = 100,Correction = 50, ClipLimit = 20時的效果
Adaptation = 50,Correction = 0, ClipLimit = 20時的效果 Adaptation = 50,Correction = 100, ClipLimit = 20時的效果
下面作圖是另外一副未經處理的影像,這副影像資訊較為完整,色彩也較為豐富,但是經過本演算法處理後,得到的結果圖(右圖)則顯得更為驚豔和奪目,因此對於正常的影像,本演算法也具有較強的實用性。
特別強調,該演算法不適宜處理人臉影像。
該演算法難以使用SSE優化,我在考慮是否還有其他方式優化。速度上1080P的彩圖大約30ms可以搞定。
測試工程的地址:http://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar
相關文章
- 【16位RAW影像處理三】直方圖均衡化及區域性直方圖均衡用於16點陣圖像的細節增強。直方圖
- 影像增強 | CLAHE 限制對比度自適應直方圖均衡化直方圖
- 【影像增強】CLAHE 限制對比度自適應直方圖均衡化直方圖
- 直方圖均衡化直方圖
- HC(Histogram-based Contrast) 基於直方圖對比度的顯著性HistogramAST直方圖
- 影像演算法之直方圖均衡化(灰度影像)演算法直方圖
- OpenCV之影象直方圖均衡化OpenCV直方圖
- 十三種基於直方圖的影象全域性二值化演算法原理、實現、程式碼及效果。直方圖演算法
- 灰度直方圖均衡化及其實現直方圖
- 直方圖均衡化原理與實現直方圖
- 關於高度均衡和頻率均衡的直方圖直方圖
- OpenCV計算機視覺學習(9)——影像直方圖 & 直方圖均衡化OpenCV計算機視覺直方圖
- 灰度影像直方圖均衡化公式及實現直方圖公式
- 【火爐煉AI】機器學習047-影像的直方圖均衡化操作AI機器學習直方圖
- 一文搞懂直方圖均衡直方圖
- 用 matlab 對圖片進行對比度和均衡度調整Matlab
- 【效能優化】直方圖優化直方圖
- halcon-直方圖均衡直方圖
- win10對比度在哪調 win10調節螢幕對比度Win10
- 【效能優化】Oracle直方圖解析優化Oracle直方圖圖解
- Talos網路卡負載最佳化:基於個性化一致性雜湊的負載均衡負載
- 直方圖、基數、選擇性、群集因子直方圖
- 強化學習(十七) 基於模型的強化學習與Dyna演算法框架強化學習模型演算法框架
- 區域性性原理——各類優化的基石優化
- 【數字影像處理】直方圖均衡化詳解及程式設計實現直方圖程式設計
- matlab實現調整圖片的對比度Matlab
- 基於C++程式放大區域性圖形(mfc)C++
- 基於動態規劃的強化學習演算法動態規劃強化學習演算法
- 強一致性的分散式事務幾種模式對比分散式模式
- TKE基於彈性網路卡直連Pod的網路負載均衡負載
- Dotnet的區域性函式和委託的對比函式
- ‘模組化‘ ’資訊隱藏和區域性化’
- 【影像處理】基於OpenCV實現影像直方圖的原理OpenCV直方圖
- 聊一聊MySQL的直方圖MySql直方圖
- 程式效能優化-區域性性原理優化
- 新的顏色對比度演算法-感知對比度演算法APCA演算法PCA
- 優化由直方圖資訊導致的sql效能問題優化直方圖SQL
- 蛋疼的CBO等高直方圖演算法直方圖演算法