田文啟 李 震 段新濤 張潤澤
(1.河南師范大學計算機與信息工程學院 新鄉 453007)
(2.鄭州市財貿學校 鄭州 450000)
在日常生活中,照相機成為了我們不可缺少的一個重要工具,但大多數人并沒有學習過攝影所需要的基本的技巧,造成所拍攝的照片質量不佳,有的時候甚至造成所要拍攝的物體完全看不清楚,其中常見的有運動模糊、抖動、光照不均等造成的圖像質量不佳,所以通過相應的圖像處理算法解決此類問題很有必要。逆光恢復算法主要針對由于逆光拍攝所造成的照片質量不佳這一問題進行分析和解決。關于逆光問題已經有很多研究者對逆光圖像增強的方法進行了探究,常見的逆光圖像增強技術[1]可分為兩大類:全局處理算法、局部處理算法。基于全局的圖像增強技術主要包括:空間域里有直方圖均衡化[2]、直方圖匹配化[3]、對數變換[4~5]等,其中直方圖均衡化是利用圖像的直方圖分布,將其中較暗區域的灰度值拉伸到整個灰度空間,從而達到提升對比度的效果,但其僅適用于整體偏暗的逆光圖像,直方圖匹配化則是將直方圖均衡化作為中間結果,進而得到原始像素的規定化后的像素之間的映射關系,改變圖像的直方圖,達到圖像增強的目的,而對數變換頻域里主要方法有同態濾波[6];基于局部的圖像增強算法常見的有Retinex其包括單尺度Retinex 算法[7]和多尺度Retinex 算法[8]另外也有平衡保持雙直方圖均衡[9]這些全局的算法都有一個通病,要么對逆光區增強不夠要么對非逆光區的亮度提升的過高造成非逆光區細節的損失,雖然已經有能很好克服這個問題的算法但其算法復雜度又過高如文獻[10]。本文基于文獻[10~11]的思路和基礎,對分割后的逆光區和非逆光區分別采用不同的算法處理力求找到一種較為合適的算法組合,解決圖像非逆光區的虛化的問題,以及相比于其他類似算法具有較低算法復雜度的新的逆光恢復算法。
用現有的圖像逆光處理算法在具體的實施上又可以分為時域算法和頻域算法[12],以下我將分別列出:時域逆光算法線性亮度變換、非線性亮度變換,和頻域逆光算法中比較經典的Retinex 算法、同態濾波。
用圖像的頻域算法,首先對圖像的像素矩陣進行時域頻轉換,在頻域對圖像進行處理,其中變換域并不只頻域一種,相應的還有小波域[13]、離散余弦變換(DCT)[14]等,這里我們只探討傅里葉變換后所對應的頻域,在快速傅里葉變換(fft)被發現以前,由于運算量過大造成用計算機實現傅里葉變換很難實現,即使使用快速傅里葉變換,時頻轉換也會增加算法的運算量,但利用圖像像素矩陣在頻域的性質,可以得到很好的逆光恢復效果。
2.1.1 Retinex算法
Retinex 的原理基于所有的顏色都是物體反射不同波長的光的能力所決定的,該算法主要有單尺度(SSR)的Retinex 算法[15]、多尺度(MSR)Retinex算法以及彩色恢復多尺度Retinex 算法。這里主要介紹單尺度(SSR)算法,一幅圖像可以表示為由入射圖像R(x,y)和反射圖像L(x,y)共同構成,實現該算法的公式如下:

參數c 的選擇會直接影響圖像增強的效果,c越小,SSR 的動態壓縮能力越強,圖像陰暗部分的細節得到更好的增強,但是由于平均對比度范圍較小,結果會產生顏色失真;c 越大,SSR 的顏色保真度越高,但是動態壓縮能力會減弱。通常SSR是在動態范圍壓縮和色感一致性之間尋找平衡點,其恢復效果如下:

圖1 單尺度Retinex增強
2.1.2 同態濾波
同態濾波的思想和Rtinex的思想是一致的,但具體實施的方法有所不同,同態濾波通過濾波器來完成對圖像入射分量的去除,從而只保留圖像的反射分量,將圖像f(x,y)建模成,入射分量i(x,y)和反射分量r(x,y)的乘積,所以有:

對兩邊取對數,并做Fourier 變換,得到線性組合的頻率域:

對低頻能量進行壓制,這樣就降低了動態范圍,而要對高頻進行提高,這樣就增強了圖像的對比度,同態濾波的變換函數如下:

同態濾波結果如圖2。
圖像的時域算法又叫做空間域處理[12],即直接對圖像的像素值所構成的矩陣空間進行處理,現有的時域逆光恢復算法大多是對圖像進行亮度變換,通過設計一個可以滿足要求的變換函數,對像素矩陣直接進行變換得到相應的處理結果。

圖2 同態濾波效果
2.2.1 線性亮度變換
線性亮度變換的變換函數是線性的,即其函數圖像是由一條直線或者幾條直線構成,其中比較有代表性的兩段折線調節公式如下:

其中是提前選好的分割逆光區和非逆光區的閾值,其中k1、k2、b1、b2分別是兩條直線的斜率和截距,是可以根據需要調節的,其變換函數圖像如圖3。

圖3 分段函數變換函數示例圖
2.2.2 非線性亮度變換
非線性亮度變換函數的定義和原理與線性變換的類似,只不過是把線性函數變換成了非線性函數,其中把對數作為其變換函數比較常見,變換公式如下:

式子中的c 是用來控制圖像亮度提升的大小的,當c 越大的時候,圖像的整體亮度就被提升的更亮。
文獻[11]中作者提出了一種改進的非線性自適應逆光處理算法,有效地避免了對數變換法對圖像的非逆光區的過度增強的缺點,本文的逆光區的增強算法就是基于此算法,它使得用更少的非逆光區的亮度提升就能彌補圖像分割所帶來的邊界失真問題成為可能。

圖4 非線性亮度變換結果
根據逆光圖像的特點,其分割算法適合采用基于閾值的分割算法,相較于其他的圖像分割算法,具有計算簡單、運算效率較高的優點。這里我們選用了閾值分割算法里比較成熟且常用的Otsu 算法。這里用fn(x,y)≤T 表示逆光區,用fn(x,y)>T表示非逆光區,用pi=ni/MN 表示亮度為i的概率,閾值T 的選區就是為了將逆光區和亮光區分開,設圖像的大小為M×N,L 表示亮度級,ni表示亮度級為i的像素數目,那么圖像的像素值為MN=n0+n1+n2+…nL-1,閾值T取能使類間方差達到最大的值。

公式中的P1(T)是像素值分到逆光區的概率,m(T)是逆光區的均值,m1是亮光區的均值,以上就是Otsu 算法選區閾值T 的方法。我們采用在圖像的灰度空間上等間隔取閾值的方法來驗證Otsu 算法在圖像的逆光恢復上的適用性,閾值的選取示意圖如圖5。

圖5 閾值選取示a區間意圖
按照數軸中的整個a 區間的閾值進行分割的結果如圖6所示。
從圖可以看出,閾值取在a2L2 到a2R1 之間的效果最好,我們再次進行同樣的步驟對[a2L2,a]按照a 區間的方法及命名規則命名為區間b,等間隔取閾值,從效果看出從b2R1 到b2R2(b 區間的命名規則與a 區間類似)的效果較好且無明顯差別,故我們得到結論對于這張逆光圖片閾值應該取在[115,124]之間,歸一化后得到效果較好的閾值區間為[0.44,0.48]。同樣的我們將區間[a,a2R1]命名為c 區間操作,類似的我們得到從c2L1 到c2L2(c區間命名規則和b 區間一致)效果差不多,歸一化后得到閾值區間為[0.48,0.54],綜合兩個區間可得當閾值取在區間[0.44,0.54]中都能得到較好的分割效果。圖像的直方圖如圖7所示。

圖6 a區間分割效果圖

圖7 圖像的直方圖
我們所確定的最佳區間在兩峰值之間,是符合理論實際的,圖8 是采用Otsu 算法所確定的閾值進行圖像分割的效果。

圖8 Otsu分割效果圖
Otsu 算法得到的歸一化分割閾值為0.525,在我們所確定的最佳分割的閾值區間里,因此驗證了Otsu算法對于逆光圖像分割效果的有效性。
為了解決非逆光區的虛化以及算法復雜度過高的情況,本文提出了一種基于閾值分割的自適應逆光恢復算法,其算法流程圖如圖9所示。

圖9 本文算法流程圖
首先將圖像由RGB 空間轉化到HSV 空間,這么做的目的是,在不影響逆光恢復的效果的同時減少算法的復雜度和參與運算的數據量,因為圖像的逆光恢復只涉及到了圖像的亮度分量,所以我們只需要對圖像的亮度分量進行處理。其次我們對圖像的亮度分量進行分割,所采取的方法就是Otsu算法,對分割后的逆光區進行非線性逆光調節[11],使得用更少的非逆光區的亮度提升就能彌補圖像分割所帶來的邊界失真問題,其變換函數如下:

其中參數C 控制圖像變換后的亮度大小其選取遵循如下規則:

參數D的選取則采用如下公式:

其中參數A的選取采用下面的公式:

公式中的k 為常數,選取的為定值k=60,而對圖像進行分割后只對暗區進行操作雖然克服了非逆光區的過度增強問題,但帶來了比較棘手的問題,即分割邊緣的銜接不自然所帶來的不好的視覺體驗,文獻[10]采用了基于局部信息熵的自適應圖像增強融合,但算法復雜度過高,尤其是當圖像很大的時候,而本文針對這一問題采用了對非逆光區進行亮度提高和增強處理的方法,使得圖像銜接的更加自然,我們采用了非線性疊加算法[16]對非逆光區增加亮度,其算法公式如下:

其中img(x,y)是處理后較亮的圖像像素值,I(x,y)為要提升亮度的圖像像素值,k 為常數值在[0,1]之間的數,可以調節亮度的提升強度,當k 越大時,則亮度提升的越高,這里我們選的k 值為處理后逆光區歸一化后最亮的像素值。最后將處理好的逆光區和亮度調整后與處理過的非逆光區融合到一起,并轉換回RGB 色彩空間。其整個過程的各個步驟的運行結果,和最終的處理效果圖如圖10。

圖10 本文各個步驟效果圖
由圖可以看出,對非逆光區域進行亮度提升后,其分割邊緣不銜接的問題得到了有效的解決,消除因為圖像分割所帶來的不良的視覺體驗,算法復雜度也大大降低,解決了非逆光區的虛化問題。
本文所給出的運行結果和運行時間均是在內存為4GB(DDR3)、顯卡為GeForce GTX960M、CPU頻率為2.3GHz、操作系統為Windows10的筆記本電腦上進行的,所采用的軟件為Matlab2016b。
本文算法與其他列舉的算法在對不同大小和類型的逆光圖像的恢復效果對比如圖11所示。
通過對比可以看出本文算法在處理不同大小,不同亮度的圖像其效果具有魯棒性,圖像在非逆光區的虛化問題得到了解決。
算法的時間復雜度也比其他的自適應算法低,表1 是本文算法和文獻[10]的算法對不同各大小的圖像進行逆光恢復的運行時間對比表。

圖11 算法運行效果對比圖

表1 算法運行時間對比表
由算法運行時間對比表可以看出,本文所提出的算法在避免了非逆光區虛化的情況下,具有較低的算法時間復雜度。
對于逆光圖像的恢復質量的好壞我們采用了圖像的信息熵值來衡量,圖像的信息熵越高則表明圖像所包含的信息越多細節越多,可以作為逆光圖像恢復質量的一個評判標準,表2 是各種不同逆光恢復算法恢復出的圖像的信息熵。

表2 處理后圖像信息熵對比表
由信息熵值大小的對比結果可以看出算法對圖像細節損失的多少,可以看出本文所提出的方法在保證了圖像的細節的前提下,具有較高的信息熵,即獲得了較好逆光恢復效果。
為了解決逆光恢復算法對圖像非逆光區域的亮度過度提升所造成的虛化以及算法復雜度過高的問題,本文驗證了Otsu算法對逆光圖像分割的適用性,提出了一種基于閾值分割的圖像自適應逆光恢復算法。為了彌補逆光區和非逆光區的銜接問題所帶來的不佳視覺體驗,對非逆光區采用了非線性亮度疊加算法進行亮度提升,得到了較好效果的逆光恢復圖像,解決了非逆光區的虛化問題,對比其他現有的逆光恢復算法,該算法具有較低的時間復雜度,且能較好的恢復逆光區的細節。