張 然,蔡 弘,關(guān) 樂,萬振華,陳永臺,樊元義,褚金奎*
(1. 大連理工大學 機械工程學院,遼寧 大連 116023;2. 大連大學 機械工程學院,遼寧 大連 116622)
晴朗天空的偏振模式一般遵循瑞利散射模型。Ramón Hegedüs 發(fā)現(xiàn)在部分有云、多霧、煙塵的天氣下天空偏振方位角與晴朗天氣下也具有類似的分布規(guī)律[1]。天空光屬于部分偏振光,天空偏振光場的偏振度和偏振電矢量隨著太陽位置的變化發(fā)生穩(wěn)定的變化,昆蟲正是利用天空偏振光的穩(wěn)定分布,結(jié)合自身復(fù)眼的偏振敏感視覺實現(xiàn)了路徑導(dǎo)航和定位。
天空偏振導(dǎo)航系統(tǒng)可以分為點源式和圖像式。本課題組早期使用點源式導(dǎo)航系統(tǒng),基于天空任意兩點偏振方向矢量叉乘來獲取航向角,在晴朗天氣下獲取航向角可以達到±0.2°[2-5]。由于點源式導(dǎo)航系統(tǒng)局限于測量天空幾個點的電矢量,天空中的云層會干擾測量。通過圖像式導(dǎo)航系統(tǒng)采集天空圖像可以獲得更多的天空點的電矢量[6-7]。王玉杰等使用分通道式圖像導(dǎo)航系統(tǒng)基于上述方法在晴朗天氣下的最大定向誤差可以達到0.5°[8],但各相機采集的天空圖像不是同一區(qū)域,配準存在誤差。分焦面式導(dǎo)航系統(tǒng)解決了點源式導(dǎo)航系統(tǒng)和分通道式圖像導(dǎo)航系統(tǒng)存在的問題。在CMOS 圖像傳感器上集成4 個通道的焦平面,可以在同一時刻采集同一片區(qū)域的3 個或4 個角度的天空強度圖,從而獲取天空偏振場圖[9]。
利用天空偏振場圖獲取航向角的算法一般分為兩種:一種是基于瑞利散射理論的天空點的偏振方向矢量垂直于太陽方向矢量獲取太陽方向與載體體軸的夾角;另一種是識別太陽子午線,確定該線與載體體軸的夾角,然后通過查閱萬年歷獲取航向角。
根據(jù)第一種方法,張慧霞等設(shè)計了一款偏振光實時定位點源式導(dǎo)航系統(tǒng),利用多方向的E矢量叉乘求解載體坐標系下太陽方位角[4]。王玉杰等基于支持向量機的分類器檢測天空區(qū)域,并利用隨機一致性方法和天空觀測點的偏振方向矢量垂直于太陽方向矢量理論獲取太陽方向與載體體軸的夾角,在被建筑物以及大量樹木遮擋的晴天下能夠提供準確的航向角,均方根誤差為1.58°[10];隨后,胡小平等又提出了基于偏振度梯度消除圖像中的障礙物,設(shè)置閾值選取天空區(qū)域并基于E矢量叉乘求解載體坐標系下太陽的方位角[11]。
在晴朗天氣下偏振方位角圖中太陽子午線的對稱性非常顯著,人們開發(fā)了通過識別太陽子午線確定航向角的偏振導(dǎo)航方法。LU 等提出基于霍夫線變換的太陽子午線提取方法,精度達到0.313°[12]。ZHANG 等基于太陽子午線的對稱性使擬合的多條軸線兩側(cè)的偏振方位角分別相減,根據(jù)生成圖像中灰度的變化選取合適的對稱軸作為太陽子午線[13]。TANG 等提出了一種基于脈沖耦合神經(jīng)網(wǎng)絡(luò)對偏振度圖濾波的方法,只保留對應(yīng)的偏振方位角圖中的有效區(qū)域,并通過最小二乘法擬合太陽子午線。該方法在有少云、樹、建 筑 物 遮 擋 時 的 航 向 角 誤 差 小 于1°[14]。WANG 等提出了一種基于人工神經(jīng)網(wǎng)絡(luò)(POLANN)計算太陽方向的模型,效率較高,但由于大量數(shù)據(jù)集由仿真圖片組成,在實際應(yīng)用中不具有魯棒性[15];此外,LIU 等還根據(jù)偏振方位角圖中∞特征,提出了一種改進的和聲搜索算法確定太陽位置[16]。ZHAO 等基于太陽子午線的對稱性,提出了一種與國防科技大學相似的算法,在其基礎(chǔ)上細分提高了精度[17]。LIANG 等利用支持向量機算法將太陽子午線兩邊二分類并擬合太陽子午線[9]。本課題組提出一種基于極坐標變換的方法,利用偏振方位角圖中偏振信息計算出太陽子午線的相對旋轉(zhuǎn)角度[18],根據(jù)方位角梯度幅值和二項積分擬合太陽子午線,在視野中樹枝和建筑物遮擋超過80% 時該測量方法依然有效[19]。
上述方法多是在晴朗天氣下才有較高的精度,個別算法在多云天氣下可以識別出太陽子午線。當天空中有較厚的云層時,瑞利散射模型失效,需要用Mie 散射理論來描述[20]。云層中大量的水滴或冰晶粒子對太陽光的多次散射和吸收造成該區(qū)域的偏振度降低,且偏振方位角出現(xiàn)異常[21]。此時,若對較多云層遮擋的目標空域偏振方位角異常像素直接擬合來提取太陽子午線特征,得到的是錯誤的載體坐標系下太陽方位角的基準信息。為了更準確地獲得太陽方向,必須去除云層影響空域產(chǎn)生的異常偏振方位角,再結(jié)合瑞利散射理論進行太陽方向矢量的提取。
云主要分為積云、層云和卷云等類型,通過傳統(tǒng)的閾值分割圖像處理方法很難將白云與藍天精確地分割,而利用卷積神經(jīng)網(wǎng)絡(luò)模型進行地基云圖分割則具有很高的精度[22]。Soumyabrata等提出了CloudSegNet 輕量級神經(jīng)網(wǎng)絡(luò)模型,并在公共數(shù)據(jù)集上獲得了較好的結(jié)果[23]。
本文針對較多云層分布的天氣情況,提出了一種利用改進的U-Net 深度卷積神經(jīng)網(wǎng)絡(luò)并結(jié)合偏振度閾值進行云分割的方法。該方法可以在偏振方位角圖中去除有云區(qū)域?qū)?yīng)的異常像素點,并基于瑞利散射理論提取太陽方向矢量實現(xiàn)天空偏振定向。室外實驗結(jié)果表明,該方法的偏振定向精度較高,驗證了本方法的可行性。
在實際導(dǎo)航中難免會存在多云厚云天氣,云層會占據(jù)較大視場,同時云層區(qū)域的像素點可能會失效。為了獲取更大視場的天空偏振光,選用魚眼鏡頭,有助于提取非云區(qū)域進行定向。
如圖1 所示,實驗中使用FUJINON 魚眼鏡頭,型號為FE185C046HA-1,視場角為185°,焦距為1.4 mm,光圈為F1.4~F16,相機采用基于Sony IMX250MZR CMOS 的偏振相機PHX050 S-PC。該偏振相機主要由微透鏡陣列、偏振片陣列和像素陣列3 部分組成。其中,偏振片陣列包含0°,45°,90°和135°共4 個角度,偏振片上每一角度所在區(qū)域?qū)?yīng)一個像素點。
圖1 天空偏振光獲取實驗設(shè)備及原理Fig.1 Experimental equipment and principle for detection of polarization light of sky
用該偏振相機結(jié)合魚眼鏡頭采集4 個角度的天空光強圖,然后基于斯托克斯矢量公式獲取天空偏振場圖。I表示偏振光強度,Q表示水平直線方向的偏振光分量,U表示45°直線方向的偏振光分量。
其中:I'(φ)表示光強,即天空強度圖每一像素點的灰度值;φ表示入射光與參考軸(載體的體軸)的夾角,為0°,45°,90°和135°;AOP表示天空偏振角,為天空某點的偏振方向矢量與載體(相機)體軸的夾角;DOP表示天空偏振度;AOE表示天空偏振方位角,為天空某點的偏振方向矢量與當?shù)刈游缇€的切線方向的夾角;i,j分別為圖像中的行坐標和列坐標,h,w分別表示圖像的高和寬。
根據(jù)瑞利散射理論構(gòu)建天空偏振模型如圖2上半部分所示。aE為P點在觀測點坐標系XaYaZa的偏振方向矢量,?為P點的天空偏振方位角,Xc為載體體軸,α,γ分別為天空觀測點的方位角和天頂角,方位角的取值為(-180°,+180°),天頂角的取值為(0°,90°),α's表示載體坐標系下太陽的方位角(即太陽方向與體軸的夾角),取值 為(0°,360°),γs表 示 太 陽 天 頂 角,取 值為(0°,90°)。圖2 下半部分中,Pi表示在針孔相機模型中天空觀測點P對應(yīng)在CMOS 成像平面上的像素點,而實際上使用魚眼鏡頭的相機模型表現(xiàn)為其成像存在較大徑向畸變,Pd為P點實際對應(yīng)的像素點。
圖2 天空偏振模型和魚眼鏡頭相機模型Fig.2 Sky polarization model and fisheye lens camera model
在相機坐標系OXcYcZc中,天空觀測點的電矢量cE表示為:
式中:cRa表示天空觀測點坐標系相對于相機坐標系的旋轉(zhuǎn)矩陣,(xPd,yPd)為像素點Pd在平行于相機坐標系的物理坐標系O'X'Y'下的坐標。
由于魚眼鏡頭采集的圖像存在較大的徑向畸變,實際天空觀測點對應(yīng)的偏振方位角的位置發(fā)生徑向偏移,從而導(dǎo)致太陽方向獲取時有較大偏差,需要標定天空觀測點與相機光軸的夾角(天頂角γ)以及該觀測點實際對應(yīng)的像素點與光軸中心點(圖像中心A')的距離,即像素距離。
圖3 為魚眼鏡頭天頂角標定模型。固定偏振相機與魚眼鏡頭,將LED 點光源與魚眼鏡頭的光軸對齊,并繞鏡頭的光心逆時針旋轉(zhuǎn),每旋轉(zhuǎn)一次對應(yīng)的觀測點的天頂角γ累加10°并采集圖像,共旋轉(zhuǎn)9 次,旋轉(zhuǎn)角度為閉區(qū)間[0°,90°],模擬得到半球狀的天空分布。每一位置的LED 點光源在圖像中對應(yīng)一個像素點,圖中位置A處的LED 點光源在圖像中對應(yīng)著像素點A'。將實際得到的觀測點的天頂角γ作為因變量,對應(yīng)的像素距離作為自變量,得到9 個點:(36.0,10°),(73.0,20°),(110.0,30°),(146.0,40°),(182.0,50°),(219.0,60°),(255.0,70°),(291.1,80°),(327.1,90°)。用matlab 曲線擬合工具箱擬合觀測點的天頂角γ與像素距離d之間的映射關(guān)系,并將計算出的9 個點的天頂角與實際值的偏差取平均值(-0.016 8),作為偏置項ε,得到:
圖3 魚眼鏡頭天頂角標定模型Fig.3 Calibration model of zenith angle of fisheye lens
在相機坐標系OXcYcZc中天空觀測點P的偏振方向矢量cE垂直于由天空觀測點P、太陽S及地面觀測點O組成的平面,則cE垂直于OS。天空中所有符合瑞利散射的點在相機坐標系 下表示的電矢量組成矩陣cEsum=[cE1,cE2,...cEn]3×n。理想情況下,cEsumT·cOS=0n×1,但實際中由于存在誤差,需對太陽方向矢量cOS做最優(yōu)估計,其最優(yōu)估計為(cEsumcEsumT)3×3的最小特征值對應(yīng)的特征向量[8]。
太陽方向矢量在相機坐標系OXcYcZc中表示 為(Sx,Sy,Sz),則 載 體 坐 標 系 下 太 陽 方 位角α's為:
參考Nabil 提出的MultiResUnet 深度神經(jīng)網(wǎng)絡(luò)模型[24],并改進了傳統(tǒng)Unet 神經(jīng)網(wǎng)絡(luò)[25],對偏振相機采集的強度圖中的云進行分割。如圖4 所示,本文的改進之處為在編碼結(jié)構(gòu)和解碼結(jié)構(gòu)之間添加了Respath 模塊,在編碼結(jié)構(gòu)的最底層即圖像分辨率降維至25×25 后添加了MultiBlock模塊。
圖4 改進的U-net 神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)Fig.4 Structure of improved U-net neural network model
圖4 中的立體方框表示特征圖,特征圖上邊顯示的數(shù)字表示通道數(shù),特征圖下邊顯示的數(shù)字表示圖的長寬。該模型左半部分為編碼結(jié)構(gòu),即對輸入圖像進行多次下采樣至某一尺寸特征圖;右半部分為解碼結(jié)構(gòu),即對特征圖進行多次上采樣至與輸入圖像相同尺寸時輸出。圖中,BN 操作通過規(guī)范化輸入數(shù)據(jù)改變數(shù)據(jù)分布,在前向傳播過程中消除梯度彌散;Dropout 操作通過舍棄部分特征,防止模型過擬合。使用該神經(jīng)網(wǎng)絡(luò)進行去云分割的具體算法過程是:首先在該神經(jīng)網(wǎng)絡(luò)中輸入600×600 的天空灰度圖,然后經(jīng)過卷積池化等操作下采樣至尺寸為25×25、通道數(shù)為256 的特征圖,之后經(jīng)過轉(zhuǎn)置卷積等操作上采樣至尺寸為600×600、通道數(shù)為16 的特征圖,最后使用一個尺寸為1×1、通道數(shù)為16 的卷積核卷積操作并用Sigmoid 激活函數(shù)將輸出響應(yīng)的值域壓縮到[0,1]之間,得到圖中所示的輸出圖像,白色區(qū)域表示云層,黑色區(qū)域表示藍天。
神經(jīng)網(wǎng)絡(luò)下采樣部分(編碼結(jié)構(gòu))的特征圖為圖像的低層次特征,包括亮度、紋理等特征;上采樣部分(解碼結(jié)構(gòu))的特征圖為圖像的高層次特征,人眼較難分辨。如果將兩者直接連接,可能存在語義差異,因此在連接路徑上建立了如圖5 所示的Respath 模塊。它包含3 個殘差結(jié)構(gòu),能使兩者更好的融合。同時,殘差結(jié)構(gòu)有助于在后向傳播過程中解決梯度彌散問題,Add 操作為圖像特征層之間空間區(qū)域信息的疊加,使每一維度下圖像特征的信息量得到提升。
圖5 Respath 模塊Fig.5 Respath module
MultiBlock 模塊類似于DenseNet 中的DenseBlock[26],如圖6 所示。采用密集連接方式,提升了梯度的反向傳播效率,Concat 操作為圖像特征層之間通道信息的融合,通過特征在通道上的連接實現(xiàn)特征重用,使維度得到了提升,將Add 操作與Concat 操作二者結(jié)合,能夠同時增加圖像的空間區(qū)域信息和通道信息。
圖6 MultiBlock 模塊Fig.6 MultiBlock module
數(shù)據(jù)集采用新加坡南洋理工大學公開的地基云圖數(shù)據(jù)集[27],該數(shù)據(jù)集中包含1 013 組白天地基云圖。為了擴大數(shù)據(jù)量,以更接近偏振相機采集圖片的效果,通過旋轉(zhuǎn)、調(diào)整亮度、對比度均衡化和直方圖均衡化的圖像增強方式將圖片擴增到8 844 組。訓練集與驗證集的比例為7∶3。由于數(shù)據(jù)集圖片本身是RGB 圖,而用偏振相機采集的天空圖為灰度圖,所以在訓練時需把所有圖轉(zhuǎn)為灰度圖,并進行歸一化。由于偏振相機采集的天空圖以中間圓形部分為主要特征,所以對訓練圖片做裁剪至尺寸為600×600。圖7(a)為預(yù)處理后的新加坡天空灰度圖,7(b)為其對應(yīng)的云和藍天的二值分割圖,用該組圖作為神經(jīng)網(wǎng)絡(luò)預(yù)訓練的數(shù)據(jù)集。
圖7 數(shù)據(jù)集Fig.7 Dataset
用偏振相機采集600 張?zhí)炜諒姸葓D,并對每張圖手動分割了云和藍天的二值圖,構(gòu)建一個小樣本數(shù)據(jù)集,樣例如圖7(c)和7(d)所示。通過旋轉(zhuǎn)、調(diào)整亮度和直方圖均衡化的圖像增強方式將該小樣本數(shù)據(jù)集擴增到7 000 組進行遷移學習。訓練集與驗證集的比例仍為7∶3。
將卷積核的初始化權(quán)重設(shè)置為'he_normal',損失函數(shù)設(shè)置為二值交叉熵損失與Dice 系數(shù)損失兩者結(jié)合的方式。訓練時,val_loss 連續(xù)6 次不下降則學習率降低0.1 倍,val_loss 連續(xù)10 次不下降則迭代停止,初始學習率設(shè)為1×10-4,優(yōu)化器用“Adam”。
損失函數(shù)中二值交叉熵損失為:
式中:A表示理想的輸出值,B表示預(yù)測的輸出值。對A與B的交集、A和B均取絕對值,smooth設(shè)置為1,防止分母為0。B越接近A,dice_loss越小。
圖像分割的常用評價函數(shù)為Jacard 相似度,公式如下:
式中:A表示理想的輸出值,B表示預(yù)測的輸出值。
實驗所用網(wǎng)絡(luò)模型基于keras 深度學習框架,并 選 用CPU 為Core i9-9960X,GPU 為Ge-Force RTX 2080Ti 的服務(wù)器進行訓練。實驗中將損失函數(shù)設(shè)置為δ×binary_crossentropy+(1-δ)×dice_loss,預(yù)訓練時δ=0.5,遷移學習時δ=0.85。神經(jīng)網(wǎng)絡(luò)的訓練損失Training loss和驗證損失Validation loss 隨迭代次數(shù)的變化如圖8 所示,對訓練集的評價Training jacard 和對驗證集的評價Validation jacard 隨迭代次數(shù)變化如圖9 所示。
圖8 損失函數(shù)變化Fig.8 Loss function change
圖9 評價指標變化Fig.9 Evaluation index change
由圖8 和圖9 可知,迭代次數(shù)達到46 次時訓練終止,訓練損失為0.017,驗證損失為0.096;訓練集的評價指標為0.980,驗證集的評價指標為0.940。評價指標越接近1 表示預(yù)測的效果越接近真實情況。在實際測試偏振相機采集的天空圖時,設(shè)置神經(jīng)網(wǎng)絡(luò)輸出圖像的閾值為0.5,即像素≥0.5 表示云層,像素<0.5 表示藍天,如圖10(b)所示。
雖然神經(jīng)網(wǎng)絡(luò)去云分割達到了很高的精度,但在云的亮度非常低時神經(jīng)網(wǎng)絡(luò)的預(yù)測效果并不是很好,如圖10(b)中圓圈部分所示。在一張圖像中某部分云的亮度較其他部分云的低,可以認為該部分云較厚,因為云層越厚,散射越強,透過云層的光強越弱,該區(qū)域亮度也越低。通過大量實驗發(fā)現(xiàn),該區(qū)域的偏振度一般低于0.1,即有:
因此,在中間圓形區(qū)域設(shè)置偏振度閾值為0.1,如圖10(c)所示,可以看到所標區(qū)域中的黑點為偏振度≥0.1 的云層,因此,直接設(shè)置偏振度閾值分割云和藍天,效果不佳,所以可通過將神經(jīng)網(wǎng)絡(luò)預(yù)測的二值分割圖與設(shè)置偏振度閾值得到的二值圖進行或運算,最大限度地去除云層產(chǎn)生的干擾點,如圖10(d)所示。
圖10 去云算法處理效果Fig.10 De-cloud algorithm processing result
實驗時間為2020 年7 月27 日下午和8 月28日上午,天空晴朗且有多塊厚云,在大連理工大學機械東樓樓頂,坐標為(121.538 857,38.886 469),將裝有魚眼鏡頭的偏振相機固定在三角架上采集天空圖像。如圖11 和圖12 所示(彩圖見期刊電子版),第一列為天空強度圖;第二列為神經(jīng)網(wǎng)絡(luò)預(yù)測的二值分割圖,白色區(qū)域表示云層,黑色區(qū)域表示藍天;第三列為神經(jīng)網(wǎng)絡(luò)預(yù)測與偏振度閾值結(jié)合得到的二值分割圖;第四列為偏振方位角圖,圖中標注了載體坐標系,黃線表示太陽矢量方向,黃色圓圈表示太陽,表示載體坐標系下的太陽方位角;第五列為將第三列取反作為mask 模板與第四列偏振方位角圖結(jié)合,得到最終的可用于計算載體坐標系下太陽方位角的偏振方位角圖。從圖中可以看到,云層對應(yīng)的異常像素點被很好地去除。圖中的colourbar 對應(yīng)第四列和第五列圖像。
圖11 7 月27 日下午的實驗效果Fig.11 Experimental results in afternoon of July 27
圖12 8 月28 日上午的實驗效果Fig.12 Experimental results in morning of August 28
實驗數(shù)據(jù)如表1 所示。為了驗證隨機時間的實驗效果,沒有設(shè)置固定的時間間隔;登陸SPA Calculator 網(wǎng)站,通過輸入經(jīng)緯度和時間等信息獲得理想太陽方位角,然后計算得到相對轉(zhuǎn)角。未去云時和去云時的誤差如圖13 和圖14所示。將理想太陽相對轉(zhuǎn)角與實際太陽相對轉(zhuǎn)角(通過本文算法獲得)作為兩個變量計算其均方根誤差,設(shè)置該均方根誤差為載體坐標系下太陽方位角的評價指標。應(yīng)用本文方法獲得載體坐標系下太陽方位角的均方根誤差為0.42°,而未去云測得的載體坐標系下太陽方位角的誤差最大超過了-140°,而且波動范圍很大,主要是較多云層產(chǎn)生的異常偏振方位角對獲取載體坐標系下的太陽方位角造成的影響。由此可見,本文方法能夠應(yīng)用于多云天氣下的天空偏振定向。
圖13 7 月27 日太陽方位角和相對轉(zhuǎn)角的誤差曲線Fig.13 Error curves of solar azimuth and relative rotation angle on July 27
圖14 8 月28 日太陽方位角和相對轉(zhuǎn)角的誤差曲線Fig.14 Error curves of solar azimuth and relative rotationangle on August 28
表1 實驗數(shù)據(jù)Tab.1 Experimental data (°)
續(xù)表1 實驗數(shù)據(jù)Tab.1 Experimental data (°)
將改進的U-Net 深度神經(jīng)網(wǎng)絡(luò)結(jié)合偏振度閾值去云,可以去除在偏振方位角圖中云層對應(yīng)的異常像素點,并基于瑞利散射理論中天空點的偏振方向矢量垂直于太陽方向矢量,獲取太陽方向與體軸的夾角,實現(xiàn)天空偏振光導(dǎo)航定向。在實際多云天氣下,實驗獲取載體坐標系下太陽方位角的均方根誤差為0.42°,為實際的多云天氣下天空偏振光導(dǎo)航定向提供了解決方案。但本文提出的方法還存在一定的局限性,目標空域中只能有云和天空,因為訓練神經(jīng)網(wǎng)絡(luò)只能用來分割云和天空,若圖片中存在房屋、樹木等則無法用神經(jīng)網(wǎng)絡(luò)解決。所以,要解決更復(fù)雜的實際問題,后續(xù)工作中需將多種算法組合使用。