管鑠磊,孫國強
(上海理工大學 光電信息與計算機工程學院,上海 200093)
隨著計算機技術和人工智能的不斷發展,計算機視覺的相關技術已經深入到生活的各個方面。在圖像獲取的過程中,陰影往往是難以避免的,它的存在會導致圖像質量的下降,影響圖像信息提取的精度,還將導致邊緣提取、目標識別等算法的結果不穩定甚至失敗。如果能夠檢測陰影,可以更好地定位目標,判斷目標形狀和屬性。因此,研究陰影去除具有重要的實際意義和研究價值。
陰影去除算法包含兩個子任務:陰影檢測和陰影去除。陰影檢測分為自動檢測方法和用戶交互的檢測方法。基于自動檢測的方法,主要根據亮度、梯度和紋理等信息確定圖像中的陰影。Finlayson[1]提出基于光照無關圖的檢測方法。Guo[2]采用相似特征的圖像片段進行分類來檢測陰影,并使用消光算法去除陰影。Saritha[3]通過Shearlet變換選擇圖像的陰影區域,然后使用 inpainting后處理技術去除陰影。Sabri等人[4]提出了一種基于BEMD的陰影檢測與去除方法。用戶輔助方法是以用戶輸入為代價實現更好的陰影檢測和去除。Gong[6]需要兩種類型的筆畫來標記光照和陰影像素,通過學習實現陰影檢測。Arbel[8]要求用戶指定多個紋理錨點以檢測陰影,但陰影分布在多個區域時,輸入開銷會增加。近年來,深度學習被應用于陰影去除。文獻[9]提出了堆疊條件生成對抗網絡(ST-CGAN),可以實現陰影檢測和陰影去除的聯合學習。Le[10]使用了 SP-Net和M-Net兩種深度網絡來預測陰影參數和陰影去除。
以上算法中圖像只存在一種陰影強度,而在采取圖像時,會存在多個光源的情況或者物體的透光性不一致會造成各種物體產生的陰影強度不同。本文提出了一種可以去除單幅圖像中不同陰影強度的算法,采用局部樣本估計恢復陰影的光照。
現有的公開數據集 SBU[11],Guo[2],SRD[12]和ISTD[9]中圖像都只有一種陰影強度。而本文旨在研究具有不同陰影強度的圖像,圖1所示,我們對上述數據集采用Gong[5]文中的方法進行陰影編輯,又通過圖像裁剪、合成得到具有不同陰影強度的圖像。

圖1 經過陰影編輯過的圖像Fig.1 Is a shadow edited image
在檢測算法中,自動檢測算法對于和陰影的像素值極其接近的物體(例如井蓋,深色物體)可能錯分成陰影。本文采用交互式陰影檢測算法。所需要的只是用戶提供覆蓋相關陰影和非陰影像素的線條(圖4(a)),不需要明確區分陰影和非陰影像素,余下的像素自動分類和識別。線條經過的區域,我們采用模糊聚類FCM進行二分類。分類所需要的特征是歸一化的RGB強度、歸一化位置和局部熵值。
局部熵值定義為選擇圖像的鄰域灰度均值作為灰度分布的空間特征量,公式(1)是離散的圖像二維熵,反映了某像素位置上的灰度值與其周圍像素灰度分布的空間特征。

式中 (,)f i j為特征二元組出現的頻數,N為圖像的尺度,i表示像素的灰度值, j表示鄰域灰度均值。
將上述特征和得到的分類結果作為 SVM 的訓練集,預測其他像素的標簽。通過高斯濾波,形態學處理得到最終的陰影掩模,如圖3(b)。

圖2 Guo[2],Gong[6]和Gong[7]和本文算法陰影去除效果Fig.2 Guo[1], Gong[6] and Gong[7] and the shadow removal effect of our algorithm
為了處理復雜的陰影(例如不同陰影強度和不同表面材質的陰影),引入了局部陰影去除任務。針對原圖中每一塊連通的陰影都獨立的恢復光照。圖3顯示了提出的陰影去除方法的概述。(a)到(b)生成陰影掩模,(a)到(c)生成融合圖像,(a)到(d)超像素分割圖像,(g)是邊界點的采樣,(e)是區域塊圖和陰影掩模相乘的結果,(f)是2個尺度4個方向的紋理圖像,(h)對圖像邊界出的陰影點采樣,(i)是 RGB三個通道的陰影尺度場,(j)是由原圖和陰影尺度場得到恢復光照后的圖像。
圖 2展示了 Guo[2],Gong[6],Gong[7]和我們的算法的對比,實驗對象是具有不同陰影強度的圖像。從圖中可以看出 Guo[2]對于多陰影強度的圖像不敏感,算法采用全局思想,對全局陰影進行去除,會出現圖中的情況。Gong[6][7]對于某部分的陰影會出現過度去除或弱去除。本文的算法可以有效的去除不同陰影強度的陰影。

圖3 陰影去除Fig.3 Shadow removal
3.1.1 陰影模型
陰影通常被定義具有本影和半影區域,半影存在于陰影的邊界,本影到半影陰影強度逐漸的變化,陰影圖像可以被認為是陰影尺度層和陰影圖像的哈達瑪積,c是圖像中的通道。陰影恢復模型定義如下:

光照區域的尺度 Sc(x, y)為1,陰影區域的尺度Sc(x, y)范圍是0到1。
3.1.2 融合圖像
融合圖像提供光照不敏感層,它可以通過線性融合YCrCb色彩空間的通道來獲得。融合圖像 f被計算為3個歸一化通道iC的加權和,如下:

其中i是通道指數,iσ是iC陰影部分的標準差與iC標準差的比值。φ是確定每個通道權重指數函數。其中α是像素強度值。

為了抑制紋理噪聲,將具有大小為1h(默認為10)中值濾波器進一步應用于融合圖像 f。
3.1.3 區域分塊
我們將使用簡單線性迭代聚類 SLIC[13]算法對圖像粗略區域分塊,得到超像素分塊圖像,如圖3(d)。
3.1.4 紋理特征
選取2個尺度4個方向的Gabor濾波器提取圖像紋理特征,最終圖像每個像素都會得到一個8維的特征向量 [t1, t2, … ,t8],如圖3(f)所示。
為了得到穩健的陰影尺度估計,需要對陰影邊界進行采樣。首先,通過融合圖像配合陰影掩模得到像素。沿著垂直于陰影邊界的采樣線采用基于曲率的自適應強度采樣提取RGB強度分布。這里沒有在每個陰影邊界點測量采樣線,避免了因為采樣間隔的不一致,在不均勻的邊界采樣線上造成偽影。采樣標記計算如下。為陰影邊界點,圖像邊界處陰影點,如圖3(e)。
3.2.1 陰影邊界點采樣

其中n是邊界點的數量,m指定邊界點的索引,D是采樣標記數組。采樣情況主要有三種,第一種情況,計算曲率數組mC ,大于閾值t時,該點設為采樣點。第二種情況,首尾邊界點設為采樣點。第三種情況,若邊界是直的,將該段的采樣間隔固定為最大值2t。
為了適應半影區域的強度變化,我們計算融合圖像的梯度,建立光照梯度場,進行引導采樣線長度的選擇,同時找到采樣線的兩個端點。
3.2.2 剔除異常強度樣本
異常的采樣強度樣本會導致不自然的陰影去除,接下來從兩個方面剔除了異常值。
(1)采樣線的長度。采樣線過長或者太短不利于圖像恢復光照。采用閾值法剔除采樣線小于1或者大于的樣本。

有效樣本滿足上式,sl有效樣本集的長度,sil單個樣本長度,lμ是指所有采樣線的平均長度,lσ是指所有采樣線的標準差。
(2)光照變化引起的異常值。樣本的強度異常值通常是由表面紋理引起的震蕩,會影響光照變化的估計。使用離散余弦變換DCT將采樣點下采樣到3個像素來粗略估計RGB強度的分布,并且轉換到對數域,可以有效的抑制紋理噪聲。用采樣點RGB通道的一階導數表示光照變化的特征,這樣每個采樣線有一個6維特征向量。采用DBSCAN聚類方法對樣本進行分類。刪除最少數類別中樣本,去除光照變化引起的異常值。
3.2.3 圖像陰影邊界處理
本文算法基于局部陰影塊進行處理,每一塊陰影作為獨立的部分進行處理。采樣線處理后,需要對圖像陰影邊界處理。利用圖 3(e)結果,分別對每個連通陰影區域中的區域塊計算紋理特征向量均值和像素強度均值。采用模糊聚類FCM_S算法,對樣本進行分類[15]。該算法可以有效的抑制噪聲。通過最小化公式(7)的目標函數,將區域塊進行分類。

其中N代表落入 xk周圍窗口的鄰域集合, NR是其基數。參數α控制懲罰的效果。uik隸屬度矩陣,C是聚類中心個數, xk是樣本數據,vi是聚類中心。通過迭代更新 uik和 vi,最小化目標函數,得到最優的區域塊分類結果,達到合并區域塊的目的。
3.3.1 半影尺度估計
由于光源的照射角度不同,強度不同和可能存在多個光源,導致陰影區域通常分為本影區域和半影區域。陰影尺度的估計首先需要估計出半影部分的陰影尺度。對樣本的RGB強度陰影尺度進行建模如下:

其中x為采樣線的像素位置,x1和x2分別確定半影的起點和終點,K為本影區域內采樣點的正尺度常數 ( x<x1)。常數1是指落在光照區域。函數fc被 K , v1, v2參數化如下:

其中是三次函數,y是輸入,v1,v2是用于定義照明變化函數的兩個參數,并且與1x和2x線性相關。B是一條光滑的曲線,存在一階導數,可以粗略地擬合強度的變化。采樣線參數可以通過線性二次規劃算法求解。

圖4 傳播陰影尺度場Fig.4 Propagation shadow scale field
3.3.2 傳播陰影尺度場及恢復光照
若使陰影恢復光照,需要構建全圖陰影尺度場,本文算法是對不同陰影區域的尺度分別估計,最后得到陰影尺度場。上文得到了半影的恢復尺度,下面估計出的尺度。使用3.2.3的結果,使得不同強度樣本與類別對齊。不同陰影區域的的強度都不同,所以使用不同區域的強度樣本尺度來估計的尺度。圖 4(b)所示,估計出黃色點和藍色點的陰影尺度。光照區域恢復尺度為1。
圖像修復用于使用來自周圍的信息填充圖像的目標區域。本文的陰影尺度估計使用圖像修復來傳播陰影尺度。采用了Bertalmio[14]提出的修補技術對陰影區域的尺度進行估計和外推處理。圖4(c)(d)(f)展示了RGB三個通道的陰影尺度場,可以看出陰影強度不同的區域,陰影尺度也不一致。
在高度處理圖像時,色調和對比度等特征的差異,可能出現在陰影校正區域。在恢復光照過程中,應用了非線性操作,打破了像素之間的線性關系。所以,要對恢復光照的圖像進行色彩校正。
本文將恢復光照的圖像在CIELAB色彩空間進行調整。偽影是由于強度差異造成的,色彩校正的來源來自半影區附近的光照像素lP和陰影像素uP。用oI表示需要調整的像素,采用雙邊濾波器對aI濾波得到圖像 Ib。計算高頻變化圖像 Ie= Ia- Ib。通過公式(10)計算校正后的圖像。

其中 M ( x)是中值絕對偏差函數,計算半影兩側像素的中值絕對偏差的比值,得到校正后的圖像。最后,使用公式(11)消除色彩通道中的重疊。通過圖像的校正去除視覺上的偽影,使圖像更具可視性。
本文陰影檢測和陰影去除算法如圖5所示。
本文算法使用 MATLAB開發平臺進行編程實現,選擇配置為Inter四核CPU,主頻為2.4 GHz,內存為 8 GB的 PC機。算法對 Guo[2],SRD[12]和ISTD[9]陰影編輯過的數據集進行定量評估。

圖5 陰影去除流程圖Fig.5 Shadow removal flowchart
從圖6可以看出本文算法更易去除不同強度的陰影。對于地板、公路面、墻壁、巖石等部分的陰影,本文算法有很好的視覺效果,同時紋理得到很好的保留。Guo[2]算法能夠去除部分陰影,弱化陰影強度比較強的陰影,對于多種強度的陰影圖像適應性較弱。Gong[6]和Gong[7]算法會對不同陰影強度圖像的部分陰影過度去除或者弱去除。
(1)均方根錯誤率(RMSER)
均方根誤差(RMSE)衡量gtI和reI之間的像素差異。 我們使用 Gong[7]提出的錯誤率,以消除由于具有不同大小和密度陰影的圖像的RMSE而引起的偏差。RMSER計算如下:

(2)峰值信噪比(PNSR)
PNSR使用最大像素值計算gtI和reI之間的均方誤差之比。PNSR值越高表示圖像質量越好。PNSR計算如下:

(3)結構相似度指數(SSIM)

圖6 各種算法下陰影去除結果對比Fig.6 Comparison of shadow removal results under various algorithms
SSIM是亮度,對比度和結構這三個相似性度量的加權乘積。它評估圖像之間結構相似性。SSIM值越高結果越好。SSIM計算如下:

式中,xμ是x的平均值,yμ是y的平均值,xσ是x的方差,yσ是y的方差,xyσ是和y的協方差。和2c是常數。
將本文提出的陰影去除算法與其他算法進行對比,與 Guo[2],Gong[6]和 Gong[7]的算法進行對比。分別計算不同數據集的陰影去除的評估指標,即RMSER,PNSR和SSIM。在表 1中,RMSER1和RMSER2分別是對圖像全局和陰影區域像素進行評估的 RMSER值。經過對比發現,在多數情況下,本文的算法對具有不同陰影強度的圖像的陰影去除效果優于其他算法。通過本文的方法獲得的RMSER小于使用其他現有方法獲得的RMSER值。PNSR和SSIM 的指標也為本文算法陰影去除提供了良好的值。SSIM值接近最大值1表示通過這些方法得到的與對應的 Igt非常相似。

表1 本文算法與其他算法定量比較Tab.1 Quantitative comparison between the algorithm in this paper and other algorithms
本文提出了基于局部恢復陰影的算法,可以去除圖像中不同強度的陰影。首先通過人工交互得到訓練數據,進一步得到陰影掩模。然后,通過預處理得到融合圖像,紋理圖像和超像素分割圖像,用于邊界點陰影尺度估計,使用圖像修復算法得到全圖陰影尺度場。最后,恢復陰影部分的光照,對色彩進行校正。實驗表明,該算法有效的去除了圖像中不同陰影強度的陰影。與其他陰影去除算法進行定量比較,本文算法的結果取得了良好的結果。在未來的研究中,將繼續優化陰影檢測的準確度和去除復雜環境下的陰影。