日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标

發(fā)布時(shí)間:2023/12/14 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

沒有前言,創(chuàng)作不易,希望家人們點(diǎn)點(diǎn)贊,如有錯(cuò)誤評(píng)論留言,感謝支持!


文章目錄

  • 前言
  • 一、MATLAB批量讀取航攝相片的EXIF信息,并批量提取其GNSS經(jīng)緯度信息
    • (1)前述:
    • (2)代碼實(shí)現(xiàn)和結(jié)果:
  • 二、地理經(jīng)緯度坐標(biāo)轉(zhuǎn)空間直角坐標(biāo)原理及公式
    • (1) 轉(zhuǎn)換原理
    • (2) 轉(zhuǎn)換公式
  • 三、利用MATLAB批量轉(zhuǎn)換坐標(biāo)
  • 四、根據(jù)外部工具驗(yàn)證其轉(zhuǎn)換精度
    • (1)利用pix4D的航線報(bào)告與MATLAB轉(zhuǎn)換后繪制的航線比較
    • (2)利用坐標(biāo)轉(zhuǎn)換COORD軟件轉(zhuǎn)換后與MATLAB轉(zhuǎn)換后的結(jié)果比較


一、MATLAB批量讀取航攝相片的EXIF信息,并批量提取其GNSS經(jīng)緯度信息

(1)前述:

所謂航攝相片的EXIF信息,就是 (可交換圖像文件格式)(英語:Exchangeable image file format,官方簡(jiǎn)稱Exif),是專門為數(shù)碼相機(jī)的照片設(shè)定的,可以記錄數(shù)碼照片的屬性信息和拍攝數(shù)據(jù)。下圖分別是航攝圖片的詳細(xì)屬性信息以及在matlab中讀取的結(jié)果。

圖1 圖片屬性信息圖2 MATLAB顯示

GNSS經(jīng)緯度信息就是BLH(緯度,經(jīng)度,大地高),我們?cè)趫D片的詳細(xì)信息可以看見,而在matlab中讀取之后字段名分別為BLH(GPSLatitude,GPSLongitude,GPSAltitude)

(2)代碼實(shí)現(xiàn)和結(jié)果:

1: 代碼思路: (批量的航攝相片===>matlab讀取每張相片EXIF信息===>讀取EXIF信息的GNSS經(jīng)緯度坐標(biāo)===>經(jīng)緯度的度分秒轉(zhuǎn)換為度===>導(dǎo)出保存為xls文件。)
2:程序清單:
(1) dir函數(shù)----格式:a=dir(‘filename’ , ‘*.txt / *.jpg / *.tiff’ ) 其表示將盤定位到你存放文件的文件里面,會(huì)列舉出你指定問filename路徑下的固定格式的文件,我下面的代碼是由于我將相片文件放在和程序運(yùn)行保存的文件夾里面,所以沒有fliename
(2) imfinfo函數(shù)----格式:a=imfinfo(‘filename’) 其用于讀取圖片的文件信息,相同用法的還有exifread函數(shù)
(3) xlswrite函數(shù)----格式:xlswrite(’ filename+名字.xls ’ , 變量名) 用于將變量里面的內(nèi)容保存為xls表格輸出

clc; clear all; data=dir('*.JPG'); m=[]; n=[]; %data.name表示相片的全名,用m集合儲(chǔ)存; data.folder表示相片所在文件夾的位置,用n集合儲(chǔ)存 for i=1:length(data)m_data=data(i).name;folder=data(i).folder;m=[m;m_data];n=[n;folder]; end %利用imfinfo函數(shù)循環(huán)讀取每一張相片的exif信息 GNSS=[]; for j=1:length(data)GNSS_data=imfinfo([n(j,:),'\',m(j,:)]);%這里的imfinfo('filename'),這里的filename就是第j張相片的文件夾的位置+ \ +第j張相片的全名GNSS=[GNSS;GNSS_data]; end %將exif信息中的GPS信息賦值給GNSS_data,依次讀取其經(jīng)緯度坐標(biāo) E=[]; N=[]; H=[]; for k=1:length(data)GNSS_data=GNSS(k,:).GPSInfo;E_data=GNSS_data.GPSLatitude;N_data=GNSS_data.GPSLongitude;H_data=GNSS_data.GPSAltitude;E=[E;E_data];N=[N;N_data];H=[H;H_data]; end %注意由于相片經(jīng)緯度坐標(biāo)的組織形式,因此讀取的經(jīng)緯度的度分秒以矩陣形式存在 %將度分秒轉(zhuǎn)換為度為單位 EAST=E(:,1)+E(:,2)/60+E(:,3)/3600; NORTH=N(:,1)+N(:,2)/60+N(:,3)/3600; image_GNSS=[EAST,NORTH,H]; %保存轉(zhuǎn)換后的坐標(biāo)為xls xlswrite('C:\Users\穩(wěn)魂\Desktop\GNSS.xls',image_GNSS);

我們將程序提取保存后的經(jīng)緯度的表格打開,可以看見明顯的BLH格式。

二、地理經(jīng)緯度坐標(biāo)轉(zhuǎn)空間直角坐標(biāo)原理及公式

(1) 轉(zhuǎn)換原理

我國的參心坐標(biāo)系可以分為參心大地坐標(biāo)系和參心空間直角坐標(biāo)系;參心大地坐標(biāo)系的坐標(biāo)元素是BLH(也就是我們常見的經(jīng)緯度坐標(biāo))而參心空間直角坐標(biāo)系的坐標(biāo)元素是XYZ(注意不是笛卡爾坐標(biāo)系,xy的方向是反的),他們的原點(diǎn)都是參考橢球的原點(diǎn)。

圖1 參心大地坐標(biāo)系圖2 參心空間直角坐標(biāo)系

而其轉(zhuǎn)換原理就是將兩個(gè)坐標(biāo)系上的同名點(diǎn)投影到點(diǎn)所在的子午平面上,建立對(duì)應(yīng)的數(shù)學(xué)關(guān)系,進(jìn)行轉(zhuǎn)換。

(2) 轉(zhuǎn)換公式

我們?cè)O(shè)A點(diǎn)的大地坐標(biāo)(B,L,H)以及對(duì)應(yīng)的空間直角坐標(biāo)(X,Y,Z)以及下面的一系列參數(shù):
橢球基準(zhǔn):西安80坐標(biāo)系
參考橢球長(zhǎng)半軸:a=6378140±5(m)
參考橢球短半軸:b=6356755.2882(m)
過A點(diǎn)的卯酉圈曲率半徑:

參考橢球的第二偏心率:

公式:


三、利用MATLAB批量轉(zhuǎn)換坐標(biāo)

2:程序清單:

(1) importdata函數(shù)—格式:a=imortdata(‘filename’) 用于讀取表格以及文本格式文件
(2) format long g:用于關(guān)閉數(shù)據(jù)科學(xué)計(jì)數(shù)法顯示

clc; clear all; %利用importdata函數(shù)讀取上一個(gè)程序保存的GNSS經(jīng)緯度表格 BLH_data=importdata('C:\Users\穩(wěn)魂\Desktop\GNSS.xls'); B=BLH_data(:,1); L=BLH_data(:,2); H=BLH_data(:,3); a=6378140; b=6356755.2882; e2=(a^2-b^2)/(a^2); NN=[]; format long g; for i=1:length(BLH_data)N=a/((1-e2*(sind(B(i,:)).^2)).^0.5);NN=[NN;N]; end XX=[]; YY=[]; ZZ=[]; for j=1:length(BLH_data)X=((NN(j,:)+H(j,:)).*cosd(B(j,:)).*cosd(L(j,:)));Y=((NN(j,:)+H(j,:)).*cosd(B(j,:)).*sind(L(j,:)));Z=((NN(j,:).*(1-e2)+H(j,:)).*sind(B(j,:)));XX=[XX;X];YY=[YY;Y];ZZ=[ZZ;Z]; end XYZ=[XX,YY,ZZ]; figure; xlswrite('C:\Users\穩(wěn)魂\Desktop\XYZ.xls',XYZ);

四、根據(jù)外部工具驗(yàn)證其轉(zhuǎn)換精度

根據(jù)上述轉(zhuǎn)換后的坐標(biāo)數(shù)據(jù),繪制其這一組航攝相片的航線圖

plot(XX,YY,'--gs',...'LineWidth',2,...'MarkerSize',3,...'MarkerEdgeColor','r',...'MarkerFaceColor',[1,0.5,0.5]); xlim([-1517450 -1517150]); ylim([5268200 5268340]); xlabel('Y',"Color",'r'); ylabel('X',"Color",'r'); title('該航攝相片組的航線','color','r'); grid on;

(1)利用pix4D的航線報(bào)告與MATLAB轉(zhuǎn)換后繪制的航線比較

需要注意的是我在pix4D中選用的WGS 84 UTM 48N的平面投影,是經(jīng)緯度與平面坐標(biāo)之間的轉(zhuǎn)換
而我計(jì)算的經(jīng)緯度與空間直角坐標(biāo)之間的轉(zhuǎn)換,所以航線會(huì)有差別,這里只為了做參考。

圖1 MATLAB繪制的航線圖2 pix4D質(zhì)量報(bào)告的航線

(2)利用坐標(biāo)轉(zhuǎn)換COORD軟件轉(zhuǎn)換后與MATLAB轉(zhuǎn)換后的結(jié)果比較

我們抽取第一張相片的經(jīng)緯度利用坐標(biāo)轉(zhuǎn)換軟件轉(zhuǎn)換后與matlab轉(zhuǎn)換后的結(jié)果比較,轉(zhuǎn)換精度還可以,至于毫米級(jí)之后的精度,是因?yàn)槲靼?0橢球參數(shù)長(zhǎng)半軸a=6378140±5(m),我直接省略了±5,所以各位可以自行選用。

圖1 COORD軟件圖2 MATLAB

總結(jié)

以上是生活随笔為你收集整理的MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。