王皎
(山東省國土測繪院,山東 濟南 250101)
近年來無人機傾斜攝影技術得到了迅猛的發(fā)展,利用無人機傾斜攝影進行實景三維重建已成為自然資源調查監(jiān)測、建筑施工、高精度農村房產一體化測量的創(chuàng)新技術手段。特別是消費級無人機傾斜攝影[1],在不依賴于POS精度的軟件環(huán)境下,結合LiDar融合、環(huán)繞拍攝等多源數(shù)據融合技術[2-3],不僅能夠真實地反映地物情況,而且能提供一系列地物信息。國外較早研制成功的大型傾斜航攝儀有德國的Penta-DigiCam、美國的AOS和以色列的A3等系統(tǒng),隨后國內相繼研發(fā)了SWDC-5、AMC580、TOPDC-5等系統(tǒng)[4],但主要用于大面積傾斜實景三維重建。由于航速及航高限制,精度一般在±20cm~±60cm,較難滿足高精度測繪要求。隨著國內多旋翼無人機及小型傾斜相機的發(fā)展,模型精度得到極大提高,但普通多旋翼無人機體積大、操作難度高、價格昂貴限制了其使用范圍,而目前消費級無人機多配備三軸自穩(wěn)云臺相機,具有操作簡便、小巧靈活價格低廉等特點。已成為一種新型的快速獲取對地光學影像的平臺[5]。但消費級無人機高精度傾斜攝影,數(shù)據量大,冗余復雜的多視角、影像數(shù)據帶來了較大的人工內業(yè)整理工作量,為解決這一難題,該文提出了一種傾斜影像區(qū)塊化自動整理方法,以解決繁雜的前期工序。
普通無人機傾斜攝影一般搭載五鏡頭、搖擺式兩鏡頭,通過執(zhí)行單一航飛設計來獲取多視角傾斜影像。傾斜影像一般存儲于不同視角相機的內存卡上,通常帶有低精度POS。而消費級無人機則搭載單鏡頭通過執(zhí)行多個航線設計來獲取多個視角傾斜影像,所有影像存儲于一張數(shù)據卡上,沒有單獨的POS信息,影像名稱按序遞增排列。但傾斜影像整理規(guī)范要求,應按攝區(qū)代號(5位)+分區(qū)號(2位)+航線號(3位)+相機號(2位)+影像航線流水號(4位),共計16位組成,后續(xù)數(shù)據整理面臨著按規(guī)范命名、無效片剔除、航線號賦值、送審片選取、影像旋轉、片號注記、十字絲標記等繁雜工序。傳統(tǒng)傾斜影像整理需要人工將下載照片、分類(如前視、后視、左視、右視、下視),然后通過第三方軟件提取照片拍攝點位,制作曝光點軌跡,但消費級無人機像幅小、無單獨POS文件,如要在ContextCapture下制作高精度實景三維模型,為避免影像名稱沖突和便于像控點片規(guī)范選取,對海量的多視角影像進行分類、重命名、挑片選片的工作更加復雜,人工勞動強度大,容易疏漏,數(shù)據整理更加繁瑣。
Context Capture是基于圖形運算單元GPU快速三維建模軟件,可以將多種源數(shù)據、分辨率、任意數(shù)據量的照片轉化為高分辨率帶有圖像紋理的三維網格模型。該文通過研究消費級無人機傾斜攝影特點及ContextCapture建模步驟[6]發(fā)現(xiàn),利用傾斜影像Excel信息表可方便地將傾斜影像數(shù)據導入ContextCapture進行空三解算,具體包含影像名稱、路徑、類型、GPS信息、視角分類、拍攝姿態(tài)等信息。通過精心的研究和試驗,該文基于C#編制了區(qū)塊化傾斜影像信息表批量自動化整理程序,將前期多項工序通過程序自動實現(xiàn),關鍵技術如下:
(1)多視角傾斜影像自動分類及重命名。消費級無人機所有視角照片按拍攝流水號依次存儲于一張內存卡上,海量照片無法同大型傾斜攝影裝備,自動按視角分類,該文利用消費級無人機照片內嵌EXIF信息,主要包含曝光點GPS位置信息、飛行器X、Y軸速度、拍攝云臺姿態(tài)信息等,以及視角切換曝光拐點與斷點續(xù)航曝光拐點的空間、時間邏輯關系實現(xiàn)海量多視角航片的自動分類。規(guī)范化的高精度傾斜攝影航片曝光間隔一般在秒級,視角切換或是斷點續(xù)航間隔一般在分鐘級,因而可根據曝光點之間的時間間隔篩選出傾斜攝影視角切換及斷點續(xù)航拐點,然后再利用曝光點與上下幀之間的空間位置關系,剔除斷點續(xù)航拐點,保留視角切換拐點,記錄片號,完成影像自動分組。視角切換與斷點續(xù)航拐點航線邏輯關系如圖1所示:
圖1 傾斜攝影視角切換與斷點續(xù)航拐點時空關系邏輯示意圖
自動分類后傾斜影像組名及重命名主要代碼實現(xiàn)如下:
……
switch (dinfo.Name) {
case "前視":CameraFlag = "A"; break;
case "右視":CameraFlag = "B"; break;
case "左視":CameraFlag = "C"; break;
case "后視":CameraFlag = "D"; break;
case "下視":CameraFlag = "E"; break; }
Computer my_computer = new Computer();
string newname = CameraFlag + string.Format("{0:D4}", i);
……
my_computer.FileSystem.RenameFile(finfo.FullName, my_newname)
(2)傾斜影像GPS信息讀取。消費級無人機影像GPS信息存儲于Exif中,不同于名稱、大小、類型等屬性通過程序可直接讀取,該文基于VS 2019創(chuàng)建了Exif讀取類庫,以便讀取傾斜影像Exif-GPS屬性,關鍵語句如下:
public String FGPS(String PicPath,out string _lat,out string _lon,out string _alt)
//定義Exif-GPS讀取語句
……
case 0x0006:
if (objItem.Value.Length == 8){
double dblAltitude = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
alt = dblAltitude.ToString();}//高程讀取語句
……
(3)Excel傾斜影像信息表。將自動分組及重命名后的傾斜影像信息按特定格式寫入傾斜影像信息表模板,關鍵代碼如下:
if (folder is DirectoryInfo)//如果是文件夾{
DirectoryInfo dinfo = new DirectoryInfo(folder.FullName);
FileSystemInfo[] fsinfos = dinfo.GetFileSystemInfos();
nub = 0;
for (int i = 0; i < (fsinfos.Count()); i++){
if (fsinfos[i] is DirectoryInfo) {
string modelExcel = folder.FullName + "" + "BlockImport_WURENJI.xlsx";//模板路徑
excel.Application excel = new excel.Application();
object missing = System.Reflection.Missing.Value;
excel.Workbook wookbook = excel.Application.Workbooks.Open(modelExcel, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
excel.Worksheet worksheet = (excel.Worksheet)wookbook.Worksheets[2]; //調用模板
DirectoryInfo my_info = new DirectoryInfo(fsinfos[i].FullName);
switch (my_info.Name) {//視角分類
case "前視":CameraFlag = "A";break;
case "右視":CameraFlag = "B";break;
case "左視":CameraFlag = "C";break;
case "后視":CameraFlag = "D";break;
case "下視":CameraFlag = "E";break;}
FileSystemInfo[] fs = my_info.GetFileSystemInfos("*.JPG");
for (int j = 0; j < (fs.Count()); j++){
FileInfo finfo = new FileInfo(fs[j].FullName);
……
FGPS(PicPath, out string my_lat, out string my_lon, out string my_alt);//EXIF類調用
worksheet.Cells[nub + 2, 1] = my_newname.Substring(0, my_newname.LastIndexOf("."));
worksheet.Cells[nub + 2, 2] = my_pitch;
worksheet.Cells[nub + 2, 3] = my_roll;
worksheet.Cells[nub + 2, 4] = my_heading;
worksheet.Cells[nub + 2, 5] = my_alt;
worksheet.Cells[nub + 2, 6] = my_lat;
worksheet.Cells[nub + 2, 7] = my_lon;
worksheet.Cells[nub + 2, 8] = CameraFlag;
worksheet.Cells[nub + 2, 9] = my_info.FullName;
worksheet.Cells[nub + 2, 10]= finfo.Extension;
……
nub = nub + 1;
this.toolStripProgressBar1.Value = nub; }
(4)曝光點軌跡制作。為了控制片選取方便及外業(yè)像控點導航需求,該文創(chuàng)建并引用了帶有影像鏈接、片號、特定圖標的模板,自動生成曝光點軌跡,效果如圖2所示。在移動設備上不僅可查看點位信息還可同時瀏覽對應影像,示例代碼如下:
圖2 前楊崗村高精度實景三維及控制片自動選取
string modelpath = path + "" + "Model.kml";//引用模板
……
model[8 * (t + 1) + 34]= "
//定義點位圖片對應的傾斜影像 ……model[8 * (t + 1) + 38]= " ";//寫入點位坐標信息
File.WriteAllLines(M_path,model);
前期多次探索的基礎上,在滕州前楊崗村,采用大疆精靈4 Pro V2.0消費級無人機成功進行了高精度傾斜攝影。前楊崗村100余戶,面積約0.1km2,村貌良好,戶型較一般村莊復雜,檐廊、連戶房較多。首先,根據實地情況進行航攝方案設計[7],采用單鏡頭超低空五航線航拍(下視、前視、后視、左視、右視),航高44m,影像分辨率約1.2cm(據下視計算),旁向重疊度85%,航向重疊度85%[8],然后進行靶標布設。靶標控制點采用“L”設計,容易區(qū)分內外角等特征信息,布設于村莊主路面,間距100~150m,大小20cm×20cm。采用簡易三腳架對中桿,萊卡RTK進行30秒觀測,統(tǒng)一采集外角。因影像分辨率較高,必要時也可采集村莊地面其他特征信息。再者在Context Capture軟件下進行高精度實景三維建模。數(shù)據導入ContextCapture建模軟件之前,需要對航片進行視角分類、無效片剔除、按規(guī)范重命名、影像信息表、曝光點軌跡制作等。
前楊崗村共獲取高分辨率多視角影像4026張,分別采用了人工及自動化整理程序進行整理。其中人工耗時1d,主要耗時集中在海量數(shù)據的視角分類、無效片剔除以及區(qū)塊化影像信息表人工信息錄入等工序,而自動化整理程序耗時30min,自動完成前期多項工序,效率對比如表1所示,整理程序及影像信息表如圖3所示:
表1 傾斜影像整理效率對比
為驗證經傾斜影像區(qū)塊化自動整理方法整理后的數(shù)據是否對實景三維建模精度帶來的影響,該文利用萊卡免棱鏡全站儀實測了共計44個房屋角點及分戶界址點,與實景三維解析同名點進行了精度比對,如表2所示:
圖3 傾斜影像區(qū)塊化自動整理程序及傾斜影像信息表
表2 三維測圖精度統(tǒng)計
注:X檢,Y檢為全站儀實測坐標;X圖,Y圖為實景三維解析坐標;ΔX,ΔY為實測坐標與解析坐標偏差值。
綜上所述,基于消費級無人機的傾斜影像區(qū)塊化自動整理方法,實景三維建模質量可以滿足高精度三維測圖精度要求,相比傳統(tǒng)人工手動信息錄入模式,工作強度極大減少,錯誤率得到有效控制[9-11]。利用輕型無人機航空攝影系統(tǒng)實現(xiàn)三維全景地圖生產,生產方式方便、高效且質量較好,為三維地籍系統(tǒng)建設、農村區(qū)域房地一體化建設及地理省情監(jiān)測與基礎測繪帶來了創(chuàng)新途徑[12-15]。輕小型消費級無人機低空操控、靈活性強[16],且自動避障和失聯(lián)返航功能都相對成熟,結合多源數(shù)據融合及實景三維模型處理技術[17],有效提高了實景三維建模的效率和精細程度[18]。
傾斜影像區(qū)塊化自動整理程序簡化了冗余復雜的傾斜影像整理過程,縮短了高精度實景三維建模周期,滿足高精度測繪要求,不僅適用于消費級無人機傾斜攝影,對大型旋翼、固定翼無人機傾斜攝影、正射影像的整理、丟片查找同樣適用,并可實現(xiàn)多區(qū)塊批量處理,極大降低了人工勞動強度,而且數(shù)據整理減小了對外業(yè)航攝人員的依賴程度,更容易實現(xiàn)內外業(yè)分離,規(guī)?;鳂I(yè),將為“實景三維中國”建設提供強有力技術支撐。