楊云源,陳 瑞
(1.楚雄師范學院 資源環(huán)境與化學學院,云南 楚雄 675000;2.楚雄師范學院 管理與經(jīng)濟學院,云南 楚雄 675000)
高分辨率遙感圖像主要源自星載高分遙感和機載低空航測。高分辨率遙感數(shù)據(jù)實時處理與提升運算速度是海量高分遙感圖像處理需面對的問題。計算機集群運算、CPU多核運算、CPU+GPU協(xié)同運算[1]、遙感云計算是常見的遙感圖像加速處理方法。計算機集群運算需要大量的硬件投入;CPU多核運算、CPU+GPU協(xié)同運算充分發(fā)揮了本機硬件功能;云計算高度依賴云端軟硬件部署與網(wǎng)絡。如遙感云計算平臺Google Earth Engine,針對的是免費中低分辨率遙感數(shù)據(jù)?,F(xiàn)有諸多研究將高分辨率遙感圖像預處理、圖像增強、圖像分類等算法移植到了GPU上,獲得了較高加速比[2]。SIFT (scale-invariant feature transform)算法進行特征點識別,具有旋轉(zhuǎn)不變性與尺度不變性、特征點識別精度高等特點。SIFT具有旋轉(zhuǎn)、尺度、亮度不變性等諸多優(yōu)點,被廣泛運用在圖像校正、變換、拼接、匹配、融合[3-4]等領域。在此基礎上,還演化出了SURF(speed up robust feature)算法[5]、ORB(oRiented brief)算法[6]等。
SIFT算法與高分辨率遙感結(jié)合,主要圍繞3方面:①CUDA支持的SIFT并行運算實現(xiàn)遙感圖像運算加速[7]。郝昀超等[8]將SIFT算法的高斯金字塔建立、局部極值探測進行GPU并行計算,獲得約3倍的加速比。肖漢等[9]將SIFT特征匹配的高斯金字塔構(gòu)建、關(guān)鍵點精確定位、關(guān)鍵點主方向提取、特征匹配放在GPU中計算。汪亮等[10]提出CoSIFT算法,利用CUDA高速存儲器提升數(shù)據(jù)訪問速度和二維高斯卷積核降維的方法提升SIFT計算性能。②對SIFT算法優(yōu)化實現(xiàn)運算加速。如王曉紅等[11]在無人機影像匹配中,采用AKAZE算法檢測影像的特征點,再用SIFT描述符描述特征向量并計算特征點的主方向。張海濤等[12]利用Marr小波進行圖像特征提取,然后基于歐氏距離進行特征點初配準,提升配準精度和效率。鄭茜穎等[13]使用主成分分析對64維SIFT特征描述符降維來實現(xiàn)圖像快速拼接,獲取了1.6~2.2倍的加速。張勇等[14]使用雙向2DPCA對SIFT特征描述符降維的方法實現(xiàn)圖像拼接。楊佳賓等[15]利用無人機航測POS數(shù)據(jù)輔助Dense SIFT算法獲取初始匹配點,獲取匹配點數(shù)量是傳統(tǒng)SIFT算法5倍多。③降低參與SIFT運算數(shù)據(jù)量實現(xiàn)運算加速。如高陽等[16]通過提取關(guān)鍵特征點并進行匹配來降低計算數(shù)據(jù)量,從而加速了圖像配準。研究中,文獻[7]~[10]將關(guān)鍵步驟全部或部分地移植在GPU上并行計算。文獻[11]~[12]對最復雜的特征點部分提取進行優(yōu)化,文獻[13]~[14]對特征描述符降維實現(xiàn)圖像拼接,文獻[15]使用了機載POS數(shù)據(jù)輔助SIFT運算實現(xiàn)優(yōu)化加速,文獻[16]通過減少運算量實現(xiàn)優(yōu)化加速。高分辨率影像SIFT計算的特征點密集、特征點提取算法復雜度高、需逐點運算,計算時間長。隨著傳感器技術(shù)進步,遙感影像的4個分辨率進一步提高,高分辨率遙感圖像,尤其是無人機低空獲取高重疊度多視影像,數(shù)據(jù)量更大,導致高分遙感影像數(shù)據(jù)量激增。高分辨率圖像實時處理對基于特征點的圖像運算提出更快速處理要求?;赟IFT的圖像拼接算法自身有一定的優(yōu)化提升空間[7-8]。SIFT運算中,通過減少參與計算的數(shù)據(jù)量與算法優(yōu)化等方式,實現(xiàn)圖像快速拼接值得深入探索。
本文使用Python+OpenCV對WorldView3高分辨率遙感切片數(shù)據(jù)進行快速拼接實驗,本研究探討通過減少參與SIFT計算的數(shù)據(jù)量及優(yōu)化算法來實現(xiàn)圖像快速拼接的可行性,優(yōu)選出圖像快速拼接算法;進一步使用CUDA并行計算檢驗算法提升空間。
圖1 基于ED-SIFT的圖像拼接算法流程
建立的算法基于ED-SIFT(Edge Detection & SIFT)的圖像拼接算法。基于SIFT的圖像拼接,圖像順序進行特征檢測、特征匹配(BFMatch)、最優(yōu)特征點獲取、最優(yōu)特征點對坐標獲取、單應矩陣計算、圖像變換、圖像縫合即完成圖像拼接。由于SIFT特征點提取算法復雜度高,需逐點運算,設法降低運算數(shù)據(jù)量是提速的關(guān)鍵?;贓D-SIFT的圖像拼接,圖像經(jīng)邊緣檢測后再執(zhí)行SIFT特征檢測;最后進行最優(yōu)特征點對坐標獲取優(yōu)化與圖像縫合優(yōu)化。基于ED-SIFT的圖像拼接算法流程(見圖1)中,算法設計更改的部分如圖1中黑色區(qū)域所示。具體流程如下:
1)邊緣檢測算法擇優(yōu)。研究通過邊緣檢測減少參與SIFT計算的數(shù)據(jù)量,從而減少參與BFMatch特征匹配的特征點數(shù)量,實現(xiàn)圖像快速拼接。邊緣檢測算法主要有Sobel邊緣檢測、Laplacian邊緣檢測、MorphologyEx形態(tài)學變換、Canny邊緣檢測、Scharr濾波器。研究從以上邊緣檢測算法中優(yōu)選速度最快的算法。
2)最優(yōu)特征點對坐標獲取優(yōu)化。優(yōu)化計算代碼,直接根據(jù)圖像的BFMatch匹配結(jié)果和SIFT計算的特征點數(shù)據(jù)映射出特征點坐標對。算法不再生成并存儲最優(yōu)點對信息。整個優(yōu)化過程將3個循環(huán)和2個條件判斷歸并為1個循環(huán)和1個條件判斷,無中間變量生成與存儲。
3)圖像縫合。采用全圖整體拷貝,檢測圖像第一通道空值區(qū)后,完成拼接圖像裁剪得到結(jié)果。
2.1 實驗數(shù)據(jù)與實驗平臺
Anaconda是包含180多個科學包及其依賴項的開源的Python平臺。通過Anaconda下Jupyter Notebook在瀏覽器中實現(xiàn)基于Python的集成開發(fā)。圖2是Jupyter Notebook的GIS-RS編程擴展。CUDA是NVIDIA公司基于GPU的通用計算體系。CUDA運算中,32個Thread(1個Warp)組成運行和調(diào)度的基本單元。通過對GPU數(shù)據(jù)組織、存儲器訪問控制、線程劃分等可實現(xiàn)程序的粗粒度與細粒度并行。Python下遙感圖像運算的CUDA并行開發(fā)可使用Numba(通過及時編譯機制優(yōu)化Python代碼)或PyCUDA(按照C/C++語法調(diào)用CUDA內(nèi)核函數(shù))實現(xiàn)。本研究使用的OpenCV、圖像CUDA并行運算的Numba都集成在Anaconda3里。
使用從北京攬宇方圓信息技術(shù)有限公司購買的2018-01-24楚雄市區(qū)WorldView3全色和多光譜Pansharping融合數(shù)據(jù)。分別截取3組重疊率為20%、65%、80%的切片數(shù)據(jù),每組為1 210像素×630像素的兩幅彩色圖片,共6張。計算機配置為Intel Core i7 6700 3.4GHz、內(nèi)存DDR4 8G、顯卡GTX970(1664 CUDA Core)。
圖2 Jupyter Notebook的GIS-RS編程擴展
本研究使用方法包括:①基于ED-SIFT算法的圖像拼接。待拼接圖像先執(zhí)行高效率邊緣檢測,減少參與SIFT計算的數(shù)據(jù)量;優(yōu)選能使圖像拼接加速的邊緣檢測算法;進行圖像拼接的最優(yōu)特征點坐標對計算代碼優(yōu)化、圖像縫合代碼優(yōu)化。②對以上圖像拼接方法的Numba加速實驗。
實現(xiàn)方法為:①ED-SIFT算法實現(xiàn)。將本算法封裝為5個函數(shù)(邊緣檢測-SIFT-特征匹配、最優(yōu)特征點坐標對獲取、后續(xù)計算),統(tǒng)計總耗時。為代碼添加@auto.jit修飾器,再次統(tǒng)計總耗時。②ED-SIFT算法的最優(yōu)特征點坐標對獲取代碼CUDA并行。使用cuda.jit修飾器,修改Numba不能識別的最優(yōu)特征點坐標對獲取代碼,將參數(shù)轉(zhuǎn)換為Numba支持的基本數(shù)據(jù)類型,進行多線程運算設計,最終實現(xiàn)基于CUDA的多線程并行。此程序中計算總耗時采用循環(huán)100次的平均耗時。
基于ED-SIFT的圖像拼接算法實現(xiàn)中,完成5種圖像邊緣檢測、最優(yōu)特征點坐標對直接映射、圖像縫合時整圖拷貝。以Soble運算為例,執(zhí)行運算后,圖像數(shù)據(jù)量明顯減少。圖3是待拼接圖像及其Sobel運算后的直方圖對比。
本研究共組合出7種計算方法,對比7種方法的計算效率(待拼接圖像重疊率為65%)。圖4是基于SIFT圖像拼接和基于ED-SIFT的圖像拼接的特征點及最優(yōu)匹配點對比。表1是7種圖像拼接方法的特征點和速度對比。
圖3 待拼接圖像及其Sobel運算后的對比
特征點數(shù)量對比:表1中方法1~2不進行邊緣檢測,未改變參與運算的數(shù)據(jù)量,SIFT計算特征點數(shù)量相同。局部特征基本條件是需要一定數(shù)目的特征點[19]。采用5種邊緣檢測,除 Scharr運算外,再進行SIFT運算得到的特征點數(shù)目都變少,其中Canny運算特征點急劇減少,不宜采用?;贓D-SIFT圖像拼接優(yōu)選的邊緣檢測采用Sobel運算。兩個待拼接圖像執(zhí)行基于ED-SIFT的圖像拼接,特征點合計從28 339個減少至10 117個,減少64.3%;匹配點對從14 229個減少至5 324個,減少62.6%;最優(yōu)點對數(shù)從5 933個減少至754個,減少87.3%。ED-SIFT算法特征點總數(shù)減少,但仍能保持一定數(shù)目的特征點。
圖4 基于SIFT圖像拼接和基于ED-SIFT圖像拼接的特征點及最優(yōu)匹配點對比
計算耗時對比,
S=(T2-T1)/T1.
(1)
式中:S為加速倍率,T2為基于SIFT的圖像拼接方法耗時,T1為其余某一種算法耗時?;赟IFT的圖像拼接平均耗時10.05 s,圖像縫合使用整圖拷貝后提速明顯;5種圖像邊緣檢測算法參與后,雖然過程變長,但除Scharr運算對圖像拼接起阻礙作用外,其余4種邊緣檢測對圖像拼接起到促進作用,且Sobel算法加速效果最好。本研究確定的基于ED-SIFT的圖像拼接算法(表1中方法3)選定的Sobel運算在減少特征點數(shù)量和加快圖像拼接速度兩方面皆占優(yōu)勢?;赟IFT的圖像拼接方法平均耗時10.05 s,基于ED-SIFT的圖像拼接算法平均耗時為0.96 s,加速倍率(S)為9.47,即速度加快9.47倍。
不同重疊率圖像拼接對比:使用重疊率分別為20%、65%、80%、100%的圖片組進行實驗。表2是基于ED-SIFT的圖像拼接算法對不同重疊率圖片拼接實驗結(jié)果。本研究建立的基于ED-SIFT的圖像拼接算法對4種重疊率的圖像拼接平均耗時都在0.96~1.08 s,圖像成功拼接。圖像拼接中計算產(chǎn)生的最優(yōu)特征點數(shù)目變化較大,但是耗時差異不明顯。說明基于邊緣檢測+SIFT運算的圖像拼接方法切實可行。
表1 7種圖像拼接方法的特征點和速度對比(重疊率:65%)
表2 基于ED-SIFT的圖像拼接算法對不同重疊率圖片拼接實驗結(jié)果
搭配使用CUDA的@auto.jit修飾器、@cuda.jit修飾器進行加速運算,兩種方法整體速度都變慢。OpenCV下,邊緣檢測、SIFT運算、BFmatch圖像匹配、單應矩陣運算、圖像變換都各自集合為函數(shù),@auto.jit修飾器對其無益。對最優(yōu)點的坐標對獲取使用@cuda.jit修飾器并行加速。然而Numba支持Numpy等基本的數(shù)據(jù)類型,但不支持SIFT運算產(chǎn)生的CV2.KeyPoint類和BFmatch特征點匹配產(chǎn)生的CV2.DMath類。必須把計算中使用的distance值等數(shù)據(jù)提取出來才能加載到CUDA運算。最優(yōu)點對的坐標獲取優(yōu)化本身耗時不多,@cuda.jit運算需涉及數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)拷貝、程序調(diào)度、程序啟動等操作,需一定的時間,這些原因?qū)е翤cuda.jit 修飾器計算速度變慢。OpenCV函數(shù)高度集成,OpenCV+Numba環(huán)境下加速,Numba支持的功能和支持的數(shù)據(jù)類型有限,對基于ED-SIFT的圖像拼接提速已不明顯。OpenCV下的算法加速還是需以減少數(shù)據(jù)量和代碼優(yōu)化為主。
建立基于ED-SIFT的圖像拼接算法,通過Sobel邊緣檢測減少參與SIFT計算的數(shù)據(jù)量和優(yōu)化計算代碼的方法實現(xiàn)圖像拼接加速。在計算機上,以Pyhon+OpenCV為平臺,對1 210像素×630像素的WorldView3切片數(shù)據(jù)進行拼接實驗,平均耗時為0.96 s,與傳統(tǒng)基于SIFT的圖像拼接算法相比,在保證一定數(shù)目的特征點的同時,速度加快9.47倍。使用該算法對重疊率為20%、65%、80%的切片數(shù)據(jù)進行拼接,都能成功拼接,耗時在0.96~1.08 s。繼續(xù)進行OpenCV+Numba下基于ED-SIFT的圖像拼接,提速不明顯。
基于ED-SIFT的圖像拼接算法進行高分辨率遙感圖像快速拼接取得較好效果。以Pyhon+OpenCV為平臺的RS-GIS數(shù)據(jù)處理,一定程度上降低了開發(fā)難度。對基于特征點提取為基礎的圖像快速拼接、基于CUDA的圖像拼接并行計算等相關(guān)研究有待同仁繼續(xù)努力。