国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python的無人機(jī)影像定位信息處理技術(shù)

2018-11-01 03:30:34余詠勝易桂軒尹言軍高雅冰
城市勘測(cè) 2018年5期
關(guān)鍵詞:標(biāo)簽數(shù)值攝影

余詠勝,易桂軒,尹言軍,高雅冰

(武漢市測(cè)繪研究院,湖北 武漢 430022)

1 引 言

近年來,無人機(jī)航空攝影技術(shù)發(fā)展迅速,因其具有精度高、速度快、成本低等優(yōu)勢(shì),已成為空間數(shù)據(jù)獲取的一種重要手段,在城市規(guī)劃、國土資源管理、農(nóng)林監(jiān)測(cè)、災(zāi)害應(yīng)急等諸多領(lǐng)域廣泛應(yīng)用[1]。采用無人機(jī)設(shè)備進(jìn)行航空攝影時(shí),部分?jǐn)?shù)碼相機(jī)可以直接獲取攝影時(shí)GPS定位信息,也有較多相機(jī)不能直接獲取定位信息,需要輔助POS等相關(guān)設(shè)備才能得到攝影時(shí)的位置和姿態(tài)信息。對(duì)于后一種情況,一般需要作業(yè)員根據(jù)需要將影像和定位信息進(jìn)行關(guān)聯(lián)處理。

通常POS數(shù)據(jù)是以文本文件方式提供,作業(yè)員需要根據(jù)不同的無人機(jī)數(shù)據(jù)處理系統(tǒng)所要求的數(shù)據(jù)格式進(jìn)行整理,將指定路徑下影像文件和定位信息逐一關(guān)聯(lián),輸入的任何字符遺漏、大小寫錯(cuò)誤或路徑變更等問題都會(huì)導(dǎo)致數(shù)據(jù)導(dǎo)入失敗,需要反復(fù)檢查修改,給后續(xù)無人機(jī)影像自動(dòng)化處理工作帶來極大不便。本文針對(duì)這些問題,提出了基于Exif信息的無人機(jī)影像定位信息處理方法,并在Python環(huán)境下對(duì)該數(shù)據(jù)處理方法進(jìn)行了程序?qū)崿F(xiàn)。

2 圖像文件的Exif信息

Exif是Exchangeable Image File(可交換圖像文件)的縮寫,它是由日本電子工業(yè)發(fā)展協(xié)會(huì)(JEIDA)制定的相機(jī)文件設(shè)計(jì)標(biāo)準(zhǔn),用來記錄攝影時(shí)的各種狀態(tài)參數(shù)[2,3]。Exif信息包含了TIFF/JPEG等圖像文件格式的攝影參數(shù)信息,它將攝影時(shí)的光圈、快門、白平衡等參數(shù)信息、相機(jī)品牌型號(hào)、圖像尺寸、攝影時(shí)間以及GPS定位等信息以文件頭形式存儲(chǔ)在TIFF/JPEG文件中,在Windows系統(tǒng)中可以通過文件屬性查看圖像的詳細(xì)Exif信息。

以JPEG文件為例,影像文件由標(biāo)記塊組成,每個(gè)標(biāo)記塊由2字節(jié)標(biāo)記碼0xFFXX標(biāo)記描述信息,所有JPEG文件都是以0xFFD8表示圖像開始(SOI),0xFFD9表示圖像結(jié)束(EOI),其中0xFFE0~0xFFEF之間的標(biāo)記稱為應(yīng)用標(biāo)記。JPEG文件常用的應(yīng)用標(biāo)記有Jfif和Exif兩種類型,Jfif使用APP0(0xFFE0)應(yīng)用標(biāo)記來插入數(shù)碼相機(jī)的配置信息和縮略圖信息,為了避免與Jfif信息沖突,Exif使用APP1(0xFFE1)來標(biāo)記信息。Exif標(biāo)記記錄的攝影信息更加全面,目前除部分老式數(shù)碼相機(jī)采用Jfif應(yīng)用標(biāo)記外,主流的數(shù)碼相機(jī)均使用Exif規(guī)范來存儲(chǔ)攝影相關(guān)參數(shù)信息。

Exif信息以IFD結(jié)構(gòu)方式保存,APP1應(yīng)用標(biāo)記中包含2個(gè)IFD結(jié)構(gòu):IFD0用來存儲(chǔ)主圖的元數(shù)據(jù)信息,IFD1用來存儲(chǔ)縮略圖的元數(shù)據(jù)信息。IFD0除了包含常規(guī)攝影參數(shù)信息外,還包括Sub IFD項(xiàng)(包含Interoperability IFD和MakerNote IFD子項(xiàng))和GPS IFD項(xiàng),其中GPS IFD項(xiàng)就是用來存儲(chǔ)圖像的GPS定位相關(guān)信息,GPS信息的標(biāo)簽值、字段名稱和類型等參數(shù)如表1所示。部分無人機(jī)攝影時(shí),數(shù)碼相機(jī)可通過Exif信息直接記錄攝影瞬間影像的GPS相關(guān)信息。

GPS屬性信息表 表1

續(xù)表1

值得注意的是,應(yīng)用標(biāo)記并不是JPEG圖像解碼的必要標(biāo)記信息,通過Photoshop等圖像處理軟件編輯過的影像可能會(huì)刪除APP0或APP1標(biāo)記,同時(shí)插入APP2(ICC色彩配置)、APP13(Photoshop IRB圖像資源)、APP14(Adobe標(biāo)識(shí))等應(yīng)用標(biāo)記,從而造成Jfif/Exif信息的丟失。

3 基于Python的定位信息處理

Python是一種面向?qū)ο蟮慕忉屝统绦蛟O(shè)計(jì)語言,首次公開發(fā)行是1991年,經(jīng)過二十多年的發(fā)展,Python已成為廣泛應(yīng)用的編程語言之一。從ArcGIS 9開始,Python作為使用ArcObject空間處理框架的腳本語言與軟件其他組件一起自動(dòng)安裝到計(jì)算機(jī)系統(tǒng)上[4]。Python程序不需要像其他編程語言那樣編譯成二進(jìn)制代碼即可運(yùn)行,同時(shí)還可以通過標(biāo)準(zhǔn)庫和第三方擴(kuò)展庫拓展其應(yīng)用領(lǐng)域,ArcGIS軟件缺省安裝的Python是2.7版本。

3.1 提取影像文件的GPS信息

在Python中操作影像文件的Exif信息需要使用pyexiv2第三方擴(kuò)展,該擴(kuò)展庫是C++程序庫exiv2的綁定,用于操作Exif、IPTC和XMP圖像元數(shù)據(jù)等信息。通過pyexiv2擴(kuò)展庫,程序可以自動(dòng)定位到GPS IFD塊,并根據(jù)表1中的GPS屬性字段名稱獲取所需的GPS信息。在Python中調(diào)用pyexiv2擴(kuò)展庫的函數(shù),需要使用以下代碼:

from pyexiv2 import *

在讀取影像文件的GPS信息之前,必須通過GPSTag標(biāo)簽判斷GPS信息是否存在,然后根據(jù)GPS屬性字段名稱獲取對(duì)應(yīng)的GPS定位信息。根據(jù)影像文件的Exif信息讀取攝影時(shí)經(jīng)度、緯度和高程值等信息的相關(guān)代碼如下:

dms2deg=lambda lst:float(lst[0])+float(lst[1])/60.+ float(lst[2])/3600.

im=ImageMetadata(r'd: est.jpg')

im.read()

if "Exif.Image.GPSTag" in im.exif_keys:

lst1=im["Exif.GPSInfo. GPSLongitude"].value

lng=dms2deg(lst1)

lst2=im["Exif.GPSInfo.GPSLatitude"].value

lat=dms2deg(lst2)

alt=float(im["Exif.GPSInfo. GPSAltitude"].value)

通過Exif.GPSInfo標(biāo)簽返回的經(jīng)緯度數(shù)值為度分秒形式的字符串列表,必須將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)值后再換算成小數(shù)度形式,方便后續(xù)矢量要素生成等操作。

無人機(jī)航空攝影完成后,往往需要快速地將像主點(diǎn)位置疊加到工作底圖上,檢查航線分布和重疊度等飛行質(zhì)量。在完成影像文件的GPS信息提取后,還需要將定位信息轉(zhuǎn)換成ESRI Shapefile文件,方便后續(xù)檢查處理,相關(guān)代碼如下:

import arcpy

arcpy.CreateFeatureclass_management('d:\','test.shp','point')

rows=arcpy.da.InsertCursor(shpPathName,["SHAPE@"])

rows.insertRow([[lng,lat]])

del rows

以上代碼僅完成了單幅影像經(jīng)緯度坐標(biāo)的寫入,對(duì)于多幅航空影像,只需要進(jìn)行一次簡單的循環(huán)遍歷即可完成所有的操作。在Shapefile文件中,還可以將影像文件名、高程值、攝影時(shí)間等相關(guān)信息作為屬性字段加入矢量文件中,使檢查工作更加便捷、高效。

3.2 將GPS信息寫入影像文件

很多情況下,無人機(jī)攝影獲取的影像數(shù)據(jù)沒有附加GPS信息,相關(guān)定位信息通常以文本文件形式單獨(dú)提供,給后續(xù)的影像位置關(guān)聯(lián)和數(shù)據(jù)處理帶來不便。對(duì)于不包含任何Exif信息的影像文件來說,必須先進(jìn)行APP1應(yīng)用標(biāo)記插入,再將IFD0結(jié)構(gòu)和GPS IFD結(jié)構(gòu)嵌入影像文件后才能進(jìn)行GPS相關(guān)信息寫入操作。

GPS標(biāo)簽是Exif標(biāo)準(zhǔn)的一部分,將GPS信息寫入影像時(shí),必須設(shè)置GPSLatitude、 GPSLatitudeRef、GPSLongitude、GPSLongitudeRef、GPSAltitude和GPSAltitudeRef等標(biāo)簽。其中,GPSLatitudeRef 標(biāo)簽值只能取字符“N”或“S”表示北緯或南緯,GPSLongitudeRef 標(biāo)簽值只能取字符“E”或“S”表示東經(jīng)或西經(jīng),GPSLatitudeRef 標(biāo)簽值只能取數(shù)字“0”或“1”表示高于或低于海平面的高程值。經(jīng)緯度和高程值不能直接使用浮點(diǎn)型數(shù)值,必須采用有理型數(shù)值,其中GPSLatitude和GPSLongitude使用三個(gè)有理型分別表示度、分、秒數(shù)值,GPSAltitude使用一個(gè)有理型表示高程值。Python可以通過Rational(n,d)函數(shù)實(shí)現(xiàn)有理型數(shù)值的生成,其中n表示有理數(shù)的分子,d表示分母,分母通常為1或10的指數(shù)倍。GPS信息中的其他屬性標(biāo)簽值可以根據(jù)實(shí)際需要進(jìn)行取舍,典型的GPS信息寫入影像文件的程序代碼如下:

im=ImageMetadata(r'd: est.jpg')

im.read()

im["Exif.Image.GPSTag"]=654

im["Exif.GPSInfo.GPSVersionID"]='2 2 0 0'

im["Exif.GPSInfo.GPSMapDatum"]="WGS-84"

lng=(Rational(114,1),Rational(30,1),Rational(30,1))

im["Exif.GPSInfo.GPSLongitude"]=lng

im["Exif.GPSInfo.GPSLongitudeRef"]='E'

lat=(Rational(30,1),Rational(15,1),Rational(15,1))

im["Exif.GPSInfo.GPSLatitude"]=lat

im["Exif.GPSInfo.GPSLatitudeRef"]='N'

im["Exif.GPSInfo.GPSAltitude"]=Rational(alt*1000,1000)

im["Exif.GPSInfo.GPSAltitudeRef"]=0

im.write()

將無人機(jī)設(shè)備獲取的GPS信息寫入影像文件后,無人機(jī)數(shù)據(jù)處理軟件就可以直接讀取相關(guān)定位數(shù)據(jù)并進(jìn)行后續(xù)處理。

3.3 GPS坐標(biāo)讀寫精度分析

Python支持4種不同的數(shù)值類型:int(整型)、long(長整型)、float(浮點(diǎn)型)、complex(復(fù)數(shù)型),Python內(nèi)部自動(dòng)將整數(shù)處理為整型和長整型數(shù)值。整型數(shù)值長度為機(jī)器位長,通常為32位,超過這個(gè)范圍的整數(shù)自動(dòng)作為長整型處理,長整型對(duì)數(shù)值的大小沒有限制。Exif信息中支持的GPS坐標(biāo)采用有理型數(shù)值,組成分子和分母的數(shù)值必須采用無符號(hào)整型數(shù)值,長度不超過32位,最大數(shù)值不能超過4294967295L。

按照WGS84參考橢球參數(shù),子午線的緯線弧長每1度長度約為 111 km,平行圈的經(jīng)線弧長僅在赤道附近與子午線弧長大致相等,經(jīng)線弧長隨緯度的增加而快速減少,每1度長度值從 111 km~0 km不等[5]。因此,當(dāng)緯度值精確到10-4秒時(shí)可以達(dá)到毫米級(jí)精度,以度為單位時(shí)需要精確到10-8度才能達(dá)到毫米級(jí)精度。根據(jù)Exif信息中的有理型計(jì)數(shù)規(guī)則,GPS坐標(biāo)以有理型度、分、秒數(shù)值寫入時(shí)可完全滿足毫米級(jí)以上的位置精度,當(dāng)GPS坐標(biāo)以度為單位時(shí)分母最大值可取至10-7,即最高可達(dá)到分米級(jí)精度要求,此時(shí)可以不進(jìn)行度分秒數(shù)值轉(zhuǎn)換而直接使用。例如,當(dāng)已知緯度值為45.2084028°時(shí),可以直接將緯度值轉(zhuǎn)換為以下表示形式:

lat1=(Rational(45.2084028e7,1e7),Rational(0,1),Rational(0,1))

如果將緯度值進(jìn)行度分秒換算,即將以上緯度坐標(biāo)轉(zhuǎn)換為45°12'30.25",其坐標(biāo)值也可以等價(jià)地表示為以下形式:

lat2=(Rational(45,1),Rational(12,1),Rational(3025,100))

4 數(shù)據(jù)測(cè)試

通常,無人機(jī)數(shù)據(jù)處理軟件如PhotoScan、Pix4D、Smart3D、PixelFactory等處理影像數(shù)據(jù)時(shí),可以直接通過影像的Exif信息讀取影像的GPS定位信息,不需要IMU數(shù)據(jù)和人工交互式操作即可完成自動(dòng)數(shù)據(jù)處理,自動(dòng)生成正射影像并完成鑲嵌和勻色操作,影像數(shù)據(jù)成果可以用GIS或RS軟件進(jìn)行顯示。

本文以Smart3D為平臺(tái),對(duì)武漢市東湖綠道范圍內(nèi)約 15 km2范圍的無人機(jī)影像進(jìn)行了數(shù)據(jù)處理。Smart3D采用獨(dú)特的處理模型,可以根據(jù)無人機(jī)數(shù)據(jù)生成基于真實(shí)影像的高密度點(diǎn)云,并以此構(gòu)建具有真實(shí)影像紋理的高分辨率實(shí)景三維模型。項(xiàng)目影像數(shù)據(jù)預(yù)處理采用本文方法在影像文件中寫入GPS信息,并根據(jù)定位信息直接生成Shape file文件便于飛行質(zhì)量檢查。為提高數(shù)據(jù)處理效率,項(xiàng)目采用了多臺(tái)計(jì)算機(jī)進(jìn)行并行處理,本文處理方式可以快速發(fā)現(xiàn)并剔除冗余數(shù)據(jù),高效進(jìn)行數(shù)據(jù)分區(qū)部署,提高了整體作業(yè)效率。在Smart3D中進(jìn)行數(shù)據(jù)分區(qū)部署后載入的影像數(shù)據(jù)情況如圖1所示。

5 結(jié) 語

本文以Python的pyexiv2擴(kuò)展庫為基礎(chǔ)實(shí)現(xiàn)了無人機(jī)影像數(shù)據(jù)定位信息的處理。該方法以TIFF/JPEG等圖像文件的Exif信息為GPS定位信息的主要處理對(duì)象,實(shí)現(xiàn)了影像文件定位信息的讀取和外部GPS定位數(shù)據(jù)的寫入,并對(duì)寫入的GPS坐標(biāo)精度進(jìn)行了分析。與常規(guī)影像定位信息關(guān)聯(lián)的處理方式相比,本文處理方法高效、可靠,提高了無人機(jī)影像數(shù)據(jù)自動(dòng)處理的效率和靈活性,在無人機(jī)數(shù)據(jù)生產(chǎn)中發(fā)揮了重要作用。

圖1在Smart3D中分區(qū)部署后載入的影像數(shù)據(jù)

猜你喜歡
標(biāo)簽數(shù)值攝影
用固定數(shù)值計(jì)算
數(shù)值大小比較“招招鮮”
無懼標(biāo)簽 Alfa Romeo Giulia 200HP
車迷(2018年11期)2018-08-30 03:20:32
不害怕撕掉標(biāo)簽的人,都活出了真正的漂亮
海峽姐妹(2018年3期)2018-05-09 08:21:02
標(biāo)簽化傷害了誰
基于Fluent的GTAW數(shù)值模擬
焊接(2016年2期)2016-02-27 13:01:02
基于多進(jìn)制查詢樹的多標(biāo)簽識(shí)別方法
WZW—bewell攝影月賽
旅游縱覽(2014年8期)2014-09-10 07:22:44
最美的攝影
焦點(diǎn)(2014年3期)2014-03-11 23:03:43
帶凹腔支板的數(shù)值模擬
尼勒克县| 涞源县| 肃北| 康保县| 稻城县| 盖州市| 文山县| 临猗县| 威海市| 武功县| 体育| 黑河市| 湖南省| 科尔| 扎赉特旗| 靖西县| 江北区| 建水县| 云林县| 出国| 南投县| 青神县| 定安县| 社旗县| 阳新县| 临猗县| 库尔勒市| 焉耆| 都安| 腾冲县| 潢川县| 山西省| 开远市| 方城县| 房山区| 开化县| 汨罗市| 奉贤区| 夏邑县| 万年县| 通河县|