蔡旭航, 朱留存,, 張 震, 張恒艷, 鄭曉東
(1. 揚(yáng)州大學(xué) 信息工程學(xué)院, 江蘇 揚(yáng)州 225000; 2. 北部灣大學(xué) 先端科學(xué)技術(shù)研究院, 廣西 欽州 535001)
圖像陰影常會對目標(biāo)識別和跟蹤[1]、 特征匹配[2]和三維重建[3-4]等視覺任務(wù)產(chǎn)生影響. 因此, 在視覺任務(wù)前先對圖像進(jìn)行陰影相關(guān)的預(yù)處理十分必要. 目前的陰影檢測算法主要分為交互式檢測算法和自動檢測算法. 文獻(xiàn)[5-6]提出了交互式陰影檢測算法, 需要用戶先標(biāo)記圖像中的陰影和非陰影區(qū)域, 再根據(jù)標(biāo)記并結(jié)合其他一些圖像特征得到檢測結(jié)果. 基于交互式方法檢測結(jié)果通常受用戶主觀因素的影響, 并在檢測較復(fù)雜陰影場景時(shí), 交互過程繁瑣且易出錯(cuò).
自動陰影檢測算法則不需要人工干預(yù), 通過圖像內(nèi)在的特征區(qū)分陰影和非陰影. 文獻(xiàn)[7]提出了一種陰影檢測算法, 首先利用視網(wǎng)膜理論將原圖像分解到反射層, 再計(jì)算原圖像和反射層圖像的誤差確定最終的陰影區(qū)域, 但該算法通過生物視覺模型進(jìn)行檢測, 模型的參數(shù)無法與實(shí)際物理光照相聯(lián)系, 需依靠經(jīng)驗(yàn)設(shè)定模型, 因此檢測結(jié)果受經(jīng)驗(yàn)值的影響較大, 同時(shí)檢測結(jié)果也受反射層分解方法的影響. 文獻(xiàn)[8]提出了一種基于區(qū)域匹配的陰影檢測算法, 該算法利用均值漂移算法將圖像分割成小區(qū)域, 并提出一種假設(shè): 兩個(gè)區(qū)域在紋理和色度相同的情況下, 亮度較小的為陰影, 亮度較大的為非陰影, 如果兩個(gè)區(qū)域亮度相同, 則應(yīng)賦予相同的陰影標(biāo)簽. 基于該假設(shè)首先將陰影區(qū)域和非陰影區(qū)域按對分類, 獲取初始的陰影標(biāo)簽, 然后再通過訓(xùn)練出的分類器劃分陰影區(qū)域和非陰影區(qū)域, 該方法可識別出邊界明顯且梯度較大的硬陰影, 對于邊界不明顯的軟陰影檢測效果較差, 易誤檢, 甚至?xí)霈F(xiàn)檢測失敗的情況. 文獻(xiàn)[9]提出了一種基于HSI顏色空間和OTSU閾值劃分的陰影檢測算法, 該方法使用K-means分割使算法可檢測復(fù)雜背景的陰影圖像, 同時(shí)利用HIS顏色空間的性質(zhì), 并與OTSU算法相結(jié)合, 使檢測結(jié)果避免深色區(qū)域的誤判, 該方法可避免暗色明亮區(qū)域?qū)﹃幱皺z測產(chǎn)生的影響, 同時(shí)在圖像存在不均勻顏色紋理的情況下仍可準(zhǔn)確針對不同紋理進(jìn)行陰影檢測, 但該方法通常會受環(huán)境影響在邊緣處檢測不完整. 近年來, 許多研究者將深度學(xué)習(xí)技術(shù)引用到陰影檢測中. 文獻(xiàn)[10]將卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks, CNN)引入到陰影檢測中, 其利用7層CNN網(wǎng)絡(luò)從超像素中提取特征, 然后將特征反饋到條件隨機(jī)場(CRF)模型中以平滑檢測結(jié)果. 文獻(xiàn)[11]提出了堆疊式條件生成對抗網(wǎng)絡(luò)(stacked conditional generative adversarial network, ST-CGAN)聯(lián)合學(xué)習(xí)進(jìn)行陰影檢測. 文獻(xiàn)[12]提出了一種注意力遞歸生成對抗網(wǎng)絡(luò)(attentive recurrent generative adversarial network, ARGAN)解決陰影檢測問題. 使用深度學(xué)習(xí)方法的陰影檢測算法都需要預(yù)先對給定的數(shù)據(jù)集進(jìn)行學(xué)習(xí), 當(dāng)算法檢測到與數(shù)據(jù)集中情況接近的陰影目標(biāo)時(shí)檢測結(jié)果較好, 反之檢測結(jié)果較差.
對于陰影檢測任務(wù), 一般都只考慮了圖像的色度、 紋理、 亮度等信息, 而忽略了圖像的深度信息. 深度信息可獲取圖像的光照方向、 場景結(jié)構(gòu)、 空間坐標(biāo)等信息. 文獻(xiàn)[13]提出了一種結(jié)合深度信息進(jìn)行陰影檢測的相似陰影置信度算法, 首先利用深度相機(jī)獲取RGB圖像及其對應(yīng)的深度圖, 再通過深度圖估計(jì)目標(biāo)的法線和空間坐標(biāo), 利用色度信息、 深度信息、 空間坐標(biāo)信息計(jì)算每個(gè)像素點(diǎn)與其局部鄰域的相似度, 進(jìn)而計(jì)算出每個(gè)像素點(diǎn)的陰影置信度. 該方法結(jié)合了圖像的深度信息, 可檢測出復(fù)雜環(huán)境中的陰影, 并且使用陰影置信度可很好地檢測出邊緣不明顯的軟陰影. 但該算法的效果受檢測窗口尺寸影響, 若窗口較小, 則會導(dǎo)致陰影檢測結(jié)果不完整; 若窗口過大, 則會導(dǎo)致運(yùn)算量急劇增大, 因此難以準(zhǔn)確給出合適的窗口尺寸.
針對文獻(xiàn)[13]算法存在運(yùn)算速度較慢、 檢測效果受窗口尺寸限制的缺點(diǎn), 本文提出一種基于多尺度超像素融合的陰影檢測算法. 首先對RGB圖像進(jìn)行多尺度的超像素分割, 同時(shí)利用深度圖計(jì)算目標(biāo)的法線和三維空間信息; 然后在不同尺度的超像素分割圖上進(jìn)行全局域的陰影置信度計(jì)算; 最后通過Adaboost訓(xùn)練得到的分類器將不同尺度的陰影置信度融合得到最終的陰影檢測結(jié)果. 算法流程如圖1所示.
圖1 本文算法流程Fig.1 Flow chart of proposed algorithm
(4)
局部窗口內(nèi)基于相似性的加權(quán)平均強(qiáng)度為
(5)
其中Iq為像素點(diǎn)q的灰度值.陰影置信度為
(6)
其中: 參數(shù)σ為可調(diào)參數(shù), 通常將其設(shè)置為0.1, 該值為經(jīng)驗(yàn)值, 可以將陰影置信度結(jié)果限定在合適的范圍內(nèi);Ip為像素點(diǎn)p的灰度值.通過平均相似性調(diào)節(jié)陰影置信度得到最終的陰影置信度為
(7)
其中|Np|表示局部鄰域內(nèi)像素點(diǎn)的個(gè)數(shù).
由式(6)可以推測: 當(dāng)局部鄰域Np內(nèi)同時(shí)存在陰影像素點(diǎn)和非陰影像素點(diǎn)時(shí), 若p為非陰影像素點(diǎn), 如圖2(A)所示, 則Ip將大于局部鄰域內(nèi)像素的平均強(qiáng)度mp, 使陰影置信度Dp=0; 若p為陰影像素點(diǎn), 如圖2(B)所示, 則Ip將小于局部鄰域內(nèi)像素的平均強(qiáng)度mp, 最終使Dp∈[0,1], 該像素被判斷可能為陰影; 當(dāng)局部鄰域內(nèi)的像素全部是非陰影像素或陰影像素時(shí), 如圖2(C),(D)所示, 則mp將接近Ip, 會使陰影置信度接近0, 最終導(dǎo)致誤檢測.
圖2 陰影圖像的局部鄰域Fig.2 Local neighborhood of shadow image
利用上述公式計(jì)算每個(gè)像素點(diǎn)的陰影置信度可得如圖3所示的陰影檢測結(jié)果, 其中(A)~(D)為原始圖像, (E)~(H)為文獻(xiàn)[11]方法檢測結(jié)果. 本文選用尺寸為140×140的局部鄰域窗口計(jì)算得到. 但該方法存在下列不足:
1) 當(dāng)檢測窗口能覆蓋圖像中陰影時(shí), 可檢測出完整的圖像陰影, 如圖3(E),(F)所示, 但當(dāng)圖像中出現(xiàn)面積較大陰影時(shí), 會出現(xiàn)陰影檢測不完整的情況, 如圖3(G),(H)所示.
2) 雖然可通過人為調(diào)節(jié)窗口使窗口大于陰影面積從而獲得完整的檢測結(jié)果, 但合適的窗口尺寸很難給出準(zhǔn)確估計(jì), 并且人為干預(yù)使算法脫離了自動檢測的目的.
圖3 陰影檢測結(jié)果Fig.3 Detection results of shadows
為解決上述兩個(gè)問題, 可使用全局域窗口代替局部鄰域窗口, 從而解決陰影檢測結(jié)果不完整以及需要根據(jù)圖像陰影人為調(diào)節(jié)窗口的問題. 本文的全局窗口是將窗口大小擴(kuò)大至整幅圖像. 表1列出了文獻(xiàn)[13]算法運(yùn)行時(shí)間與窗口大小的關(guān)系. 由表1可見, 陰影置信度算法的運(yùn)行時(shí)間隨著窗口的增大而急劇增加, 導(dǎo)致無法使用全局窗口計(jì)算陰影置信度. 為解決該問題, 本文利用SLIC(simple linear iterative-clustering)算法先對RGB圖像進(jìn)行超像素分割, 將分割得到的每個(gè)像素塊視為一個(gè)像素點(diǎn), 再在全局窗口上進(jìn)行陰影置信度計(jì)算.
表1 文獻(xiàn)[13]算法運(yùn)行時(shí)間與窗口大小的關(guān)系
超像素是指具有相似紋理、 顏色、 亮度等特征的相鄰像素構(gòu)成的有一定視覺意義的不規(guī)則像素塊, 其利用像素之間特征的相似性將像素分組, 用少量的超像素塊代替大量的像素表達(dá)圖片特征, 極大降低了圖像的計(jì)算量. 本文采用文獻(xiàn)[17]提出的SLIC超像素分割方法對圖像進(jìn)行分割. SLIC超像素分割方法生成的超像素較緊湊, 并且運(yùn)行速度和輪廓保持的效果都較理想. 圖4為由SLIC算法分割得到尺度為79×79,25×25,8×8圖片的結(jié)果, 其中8×8,25×25,79×79是超像素的分割尺度, 是指平均每個(gè)超像素中約有8×8,25×25,79×79個(gè)像素點(diǎn). 超像素中像素點(diǎn)數(shù)量較多為大尺度, 像素點(diǎn)數(shù)量較少為小尺度, 本文以該規(guī)則定義超像素的尺度.
圖4 SLIC算法分割結(jié)果Fig.4 Segmentation results of SLIC algorithm
不同分割尺度的檢測結(jié)果如圖5所示. 對RGB圖像進(jìn)行超像素分割后再進(jìn)行陰影置信度的計(jì)算, 降低了圖像的維度, 減少了陰影置信度計(jì)算的數(shù)據(jù)量. 在超像素上利用色度、 法線、 空間坐標(biāo)及亮度信息估計(jì)圖像的陰影置信度, 同時(shí)結(jié)合全局窗口不僅提高了運(yùn)行速度, 也解決了圖像陰影檢測結(jié)果不完整的問題. 但如果RGB圖像的超像素分割尺度較大, 則會有一些相鄰的陰影和非陰影被分割到同一個(gè)超像素中, 從而導(dǎo)致陰影檢測的誤判, 這種情況一般會出現(xiàn)在陰影邊緣附近, 并且在陰影邊界不明顯的軟陰影中更明顯, 如圖5(B)所示; 如果對圖像的超像素分割尺度較小, 則一些非陰影區(qū)域較暗的超像素點(diǎn)會被誤判為陰影, 從而在檢測結(jié)果中留下更多噪聲, 如圖5(C)所示.
圖5 不同分割尺度的檢測結(jié)果Fig.5 Detection results of different segmentation scales
為解決上述問題, 本文考慮將多尺度的超像素分割結(jié)果進(jìn)行融合, 綜合大尺度和小尺度的超像素陰影置信度給出最終檢測結(jié)果.
超像素分割的尺度大小及尺度個(gè)數(shù)的可選擇性很多, 不同的選擇直接影響檢測結(jié)果. 因此本文提出如下超像素尺度選取策略. 超像素的最小分割尺度確定為7×7. 同時(shí)測試了3×3,5×5,7×7,9×9四種尺度, 9×9尺度的最終檢測結(jié)果精確度較低, 3×3,5×5,7×7三種尺度的檢測精確度接近, 但3×3和5×5兩種尺度所消耗時(shí)間遠(yuǎn)大于7×7. 因此, 最終選定7×7為最小分割尺度. 尺度間呈倍數(shù)關(guān)系, 如7×7,14×14,28×28. 尺度個(gè)數(shù)確定為5個(gè). 綜合考慮檢測精度和運(yùn)算速度約束, 經(jīng)大量實(shí)驗(yàn)驗(yàn)證, 最終發(fā)現(xiàn)5個(gè)分割尺度(7×7,14×14,28×28,56×56,112×112)檢測效果最好.
在融合階段, 本文考慮使用
(8)
融合獲得超像素陰影置信度, 其中Hj(x)表示各尺度的陰影判決結(jié)果,bj為每個(gè)尺度所對應(yīng)的權(quán)重. 式(8)通過加權(quán)和的方式融合各尺度的陰影置信度.
陰影檢測問題可視為分類問題, 本文采用Adaboost算法[18]確定權(quán)重, Adaboost是一種重要的集成學(xué)習(xí)技術(shù), 能將分類精度較差的弱分類器增強(qiáng)為分類精度較優(yōu)的強(qiáng)分類器. 每個(gè)尺度超像素陰影判決結(jié)果都可視為弱分類器Hj(x), 最終融合得到的陰影檢測結(jié)果可視為強(qiáng)分類器. Adaboost的核心部分是數(shù)據(jù)權(quán)值的更新和弱分類器權(quán)值的計(jì)算. 弱分類器的分類效果影響數(shù)據(jù)權(quán)值, 而數(shù)據(jù)權(quán)值又決定弱分類器的權(quán)值, 經(jīng)過迭代計(jì)算使分類精度較大的弱分類器具有較高的權(quán)值, 而分類精度較小的分類器具有較小的權(quán)值.
在訓(xùn)練階段, 使用Adaboost算法在陰影數(shù)據(jù)集上選取100組數(shù)據(jù)進(jìn)行訓(xùn)練, 每組數(shù)據(jù)包括一張陰影圖像及該圖像對應(yīng)的陰影模板, 將每個(gè)樣本表示為(xi,yi)(i=1,2,…,N), 其中:xi表示圖像的一個(gè)像素點(diǎn);yi表示該像素點(diǎn)的陰影標(biāo)簽(由陰影模板得到),yi∈{0,1}, 1表示陰影, 0表示非陰影;N表示樣本的數(shù)量, 假設(shè)每張圖像有460×680個(gè)像素點(diǎn), 則N=460×680×100.對每張訓(xùn)練的陰影圖像利用上述方法計(jì)算陰影置信度, 并通過二值化得到弱分類器為{H1(xi),H2(xi),H3(xi),H4(xi),H5(xi)}(i=1,2,…,N).本文Adaboost算法框架如下.
1) 輸入訓(xùn)練數(shù)據(jù)(xi,yi)(i=1,2,…,N), 弱分類器為{H1(xi),H2(xi),H3(xi),H4(xi),H5(xi)}(i=1,2,…,N).
2) 初始階段每個(gè)樣本賦予相同的權(quán)值1/N, 得到初始樣本權(quán)重分布w1(i)=1/N(i=1,2,…,N).
3) 進(jìn)行迭代, fort=1∶5:
② 選擇誤差率最小的弱分類器Hmin, 將其誤差率記為emin;
③ 將emin代入a=0.5×ln[(1-emin)/emin], 計(jì)算當(dāng)前弱分類器權(quán)值amin, 并輸出該分類器與其對應(yīng)的權(quán)值(amin,Hmin(x));
4) 得到每個(gè)弱分類器對應(yīng)的權(quán)重{(a1,H1(x)),(a2,H2(x)),(a3,H3(x)),(a4,H4(x)),(a5,H5(x))}.
為驗(yàn)證本文算法的有效性, 選取不同場景的6張圖像作為實(shí)驗(yàn)對象, 將本文算法與其他算法結(jié)果進(jìn)行視覺對比.圖6為本文陰影檢測算法與文獻(xiàn)[8]、 文獻(xiàn)[11]、 文獻(xiàn)[13]陰影檢測算法估計(jì)的結(jié)果比較.
圖6 不同算法陰影檢測結(jié)果對比Fig.6 Comparison of shadow detection results of different algorithms
由圖6可見: 對于大面積陰影檢測(圖6中第二行、 第四行、 第五行、 第六行), 文獻(xiàn)[13]算法效果較差, 本文算法略好于文獻(xiàn)[8]和文獻(xiàn)[11]算法; 對于紋理較豐富的場景(圖6中第六行), 文獻(xiàn)[13]算法效果較差, 文獻(xiàn)[11]算法表現(xiàn)一般, 本文算法略好于文獻(xiàn)[8]算法, 本文算法較好地抑制了噪聲干擾, 這是因?yàn)閰⑴c融合的尺度較大的超像素陰影置信度具有紋理濾波的效果; 對于邊緣不很清晰的軟陰影(圖6中第三行), 文獻(xiàn)[8]算法檢測失敗, 文獻(xiàn)[11]和文獻(xiàn)[13]算法檢測結(jié)果并不完整, 本文算法優(yōu)勢明顯; 對于復(fù)雜場景陰影(圖6中第五行), 文獻(xiàn)[8]算法未檢測到車輛陰影, 文獻(xiàn)[11]算法將車輛誤檢測為陰影, 文獻(xiàn)[13]算法陰影中間出現(xiàn)大面積漏檢區(qū)域, 本文算法結(jié)果與實(shí)際陰影分布基本吻合; 對于小塊陰影(圖6中第七行), 文獻(xiàn)[8]和文獻(xiàn)[11]算法對于圖像中小塊樹影的檢測都有或多或少的缺失, 本文算法與文獻(xiàn)[13]算法效果相當(dāng).
為考察本文算法的性能, 客觀評價(jià)陰影檢測算法的效果, 本文在SBU數(shù)據(jù)集[19]和ISTD數(shù)據(jù)集[11]上對檢測精確度和運(yùn)行速度進(jìn)行量化對比.
檢測精確度定義了準(zhǔn)確率(Accuracy)和平衡出錯(cuò)率(balance error rate, BER)[20]兩項(xiàng)評價(jià)指標(biāo), 分別表示為
(9)
(10)
其中TP為估計(jì)正確陰影像素點(diǎn)的個(gè)數(shù), TN為估計(jì)正確非陰影像素點(diǎn)的個(gè)數(shù), NP和NN分別為實(shí)際陰影像素點(diǎn)個(gè)數(shù)和實(shí)際非陰影像素點(diǎn)個(gè)數(shù). Accuracy用于衡量陰影檢測準(zhǔn)確率, 其越大說明陰影檢測的結(jié)果越準(zhǔn)確. BER用于衡量陰影檢測出錯(cuò)率, 其越小表示陰影檢測算法的出錯(cuò)率越低.
將本文算法與文獻(xiàn)[8]、 文獻(xiàn)[11]、 文獻(xiàn)[13]算法進(jìn)行比較, 結(jié)果列于表2. 由表2可見, 在兩個(gè)數(shù)據(jù)集中本文算法的精確度和錯(cuò)誤率略優(yōu)于文獻(xiàn)[8]和文獻(xiàn)[11]算法, 明顯優(yōu)于文獻(xiàn)[13]算法.
表2 不同算法檢測準(zhǔn)確率和錯(cuò)誤率的對比
在運(yùn)行時(shí)間對比實(shí)驗(yàn)中, 從數(shù)據(jù)集中隨機(jī)抽取6種尺寸的圖像各10張, 計(jì)算平均運(yùn)行時(shí)間. 實(shí)驗(yàn)環(huán)境為: CPU主頻2.40 Hz, 內(nèi)存8 GB, 操作系統(tǒng)Win10 64位. 4種算法的運(yùn)行時(shí)間對比結(jié)果列于表3. 由表3可見, 文獻(xiàn)[11]算法在檢測時(shí)間上優(yōu)勢明顯, 但檢測精度不理想. 本文算法是基于文獻(xiàn)[13]算法的改進(jìn)融合算法, 采用超像素方法使檢測時(shí)間大幅度減少, 約為原算法的10%, 與文獻(xiàn)[8]算法檢測時(shí)間基本相同.
表3 不同算法的運(yùn)行時(shí)間對比
綜上所述, 本文基于文獻(xiàn)[13]的算法提出了一種多尺度超像素融合陰影檢測算法, 采用全局窗口計(jì)算陰影置信度, 解決了文獻(xiàn)[13]算法檢測窗口尺寸難以給出準(zhǔn)確估計(jì)的問題, 陰影檢測精度和運(yùn)算速度均得到大幅度提升. 本文算法對于邊緣不清晰的軟陰影、 復(fù)雜場景陰影、 大面積陰影及小塊陰影的檢測均表現(xiàn)出較好的性能, 與其他算法的對比實(shí)驗(yàn)結(jié)果表明, 本文算法具有綜合優(yōu)勢, 適合在實(shí)時(shí)性要求較低的場景下對光線復(fù)雜環(huán)境圖像進(jìn)行前期預(yù)處理.