数字摄影测量实习报告DOC文档格式.docx
《数字摄影测量实习报告DOC文档格式.docx》由会员分享,可在线阅读,更多相关《数字摄影测量实习报告DOC文档格式.docx(48页珍藏版)》请在冰豆网上搜索。
图9数字表面模型
图中的红色方框所包围的可以很容易看出来是房屋而不是地形。
所以需要对上上述DEM进行编辑,生成正真意义上的DEM。
点击“高级DEM编辑”,进入DEM编辑界面。
图10编辑后的DEM
图中的红色部分就是我们编辑的范围,经过编辑后加载DEM显示立体图,可以看出其中的房屋高度已经贴合地面了。
3、DEM拼接
由于每一个DEM只是两张影像形成的,一测区有多个DEM,因此需要经过拼接才能形成整个测区的DEM。
点击“高级-->
DEM拼接”弹出DEM拼接界面,加载需要拼接的DEM,用鼠标划定拼接范围,接下来就可以执行拼接。
图11图12DEM拼接
4、图像镶嵌
生成整个测区的DEM后,我们就可以生成整个测区的正射影像了。
依次点击“高级正射影像制作”弹出制作界面,选定DEM以及相应的影像数据,然后执行,结果如图
图13拼接后的正射影像
5、IGS数字化测图
点击“测图IGS数字化测图”进入到数字化测图界面,然后依次“新建VZV矢量文件装载影像数据”,然后通过红绿眼睛对测区进行矢量化。
图14IGS数字化测图
图15矢量图形
6、空中三角测量
1)数据准备和图像预处理
打开VirtuozoAAT,依次“新建测区—设置参数---引入影像”
图16输入影像
注意第二条航带的选项要选上相机旋转。
然后进行“内定向航带间偏移量”
图17航带间偏移量
在图中选取航带间的同名点,系统会自动计算航带间偏移量设置好航带间偏移量之后,开始提取连接点,最后运行自动挑点程序。
2)交互式编辑
打开交互式编辑界面,一次在每张图像上选点,保证每个蓝框周围至少有3个点就行。
图18选点图19使用PATB平差
然后加入控制点,只要在测区中加入三个控制点,然后使用PATB进行平差,就可以使用“预测控制点”预测出其余的控制点的位置,然后依次选出控制点坐标。
图20控制点图21被挑出的点
可能一次选择的点精度不够会有误差超限的点,显示在如图21中带有星号,然后对带有星号的点从新定位,这样直到没有星号的点。
至此,交互式编辑完成。
3)三角测量
打开VirtuozoNT,打开在AAT中建立的测区,自动创建测区,之就可以使用批处理功能进行自动化处理。
至此,三角测量完成。
图22批处理界面
4)DEM拼接和正射影像制作
按照前面的拼接步骤进行DEM拼接和正射影像的制作,结果如下:
图23DEM图24正射影像
3、GeoWay实习流程
1、交互式编辑
1)新建工程,设置相关参数
(PS:
对照表添加[LAYER][ENDSEC],然后将SYM符号库文件拷贝到C:
\WINDOWS\GeoSymbol)
图1参数设置界面
2)生成内图廓线
图2生成图廓线
3)交互式地物编辑
1、加载栅格图层。
点击栅格图层,加载tfw数据,加入栅格图层,然后生成内图廓,格网线
图3加载栅格图层
2、勾选跨层输入编辑,设置激活图层,然后点击相应地物设为输入地物类。
3、点、单线、双线编辑
4、点、线处理。
悬挂点和伪节点处理,工具—检查—悬挂伪节点进行伪节点检测。
批处理—消除悬挂点和伪节点能够消除大部分错误,不能消除的部分进行手工编辑。
图4节点编辑后的图
5、面处理。
新建房屋对照表,在拓扑构建时启用房屋对照表,然后拓扑弧段预处理,最后进行拓扑构建。
对于拓扑构建中被遗漏的要手工处理后再次构建
图5拓扑构建后的图
2、GEOWAY空三加密
1)新建工程,数据准备并检查
依次点击“新建工程选择数据所在的目录初始构网”然后点击“生成成果生成单色点云”用mashlab打开.ply文件,查看点云和构网结果
图6点云图图7网形图
2)控制网平差
“常规处理光束法平差删除残差大于域值的点自由网平差”,重复上述步骤直到最小残差小于阈值60(PS:
每次删除的点不能太多,以防删除过多正确的点)
3)精确匹配并查看匹配结果
点击“常规处理精确匹配”,进一步匹配
图8
图9
4)刺点
常规处理光束法平差常规处理绝对定向(GPS)刺点
图10刺点界面
5)空三结果
图11
3、立体测图(无人机)
1)新建方案和数据准备
影像管理加载影
模型管理新建模型
控制点编辑导入控制点
像点导入导入像点
外方为元素导入导入外方位元素
2)初步处理
内定向—相对定向—绝对定向—核线重采样
图12相对定向
3)批处理
图13
4)地物采集
新建加工工程,然后依次进行高程点、道路、房屋、比高点、等高线的采集
图14地物采集结果
5)DEM编辑
1、点线处理采集特征线处理—选择特征线处理
2、面处理—自适应内插,量测点内插局部置平、水域处理
图15DEM编辑前图16DEM编辑后
6)TIN网处理
图17编辑前图18编辑后
图19编辑后
7)质量检查
1、设置质检方案—制作方案—加入工作方案
图20检查报告图21方案设置
2、新建检查任务,指定目录到数据所在目录。
然后自动检查错误并查看错误,然后对矢量图进行修改
图22编辑前图23编辑后
图24编辑前图25编辑后
四、编程内容
1、单像空间后方交会
#include"
hfjhdialog.h"
#include<
opencv.hpp>
vector>
string>
fstream>
iostream>
QFileDialog>
usingnamespacestd;
HFJHDialog:
:
HFJHDialog(QWidget*parent):
QDialog(parent),
ui(newUi:
HFJHDialog)
{
ui->
setupUi(this);
char*title="
空间后方交会"
;
QStringqtitle=QString:
fromLocal8Bit(title);
setWindowTitle(qtitle);
textBrowser->
setText("
---------------HFJH--------------"
);
//焦距单位pixel
fx=4547.99665;
fy=4547.87373;
//内方位元素pixel
x0=47.48571;
y0=12.02756;
//畸变参数
k1=-5.00793e-009;
k2=1.83462e-016;
p1=-2.24419e-008;
p2=1.76820e-008;
//初始值
Xs0=4300.0;
Ys0=-150.0;
Zs0=-300.0;
//单位mm
phi0=0.0;
omega0=0.0;
kappa0=0.0;
//单位rad
}
~HFJHDialog()
deleteui;
//读取像点坐标
intHFJHDialog:
readxy(stringpath)
intindex=1;
//path="
F:
\\我的课程\\数字摄影测量影像数据\\后方交会\\像点坐标.txt"
ifstreamfil;
fil.open(path);
if(!
fil)
{
char*log="
打开像点文件失败<
<
"
ui->
append(QString:
fromLocal8Bit(log));
return-1;
}
xytmp;
while(!
fil.eof())
fil>
>
tmp.index>
tmp.x>
tmp.y;
append(QString("
Point%1:
x:
%2y:
%3"
).arg(index).arg(tmp.x).arg(tmp.y));
index++;
pic.push_back(tmp);
fil.close();
return0;
//读取物方点坐标
readXYZ(stringpath)
打开控制点文件失败<
XYZtmp;
stringhead;
for(inti=0;
i<
4;
++i)
head;
tmp.X>
tmp.Y>
tmp.Z;
X:
%2Y:
%3Z:
).arg(index).arg(tmp.X).arg(tmp.Y).arg(tmp.Z));
index++;
obj.push_back(tmp);
//读取相机参数文件
readcamera(stringpath)
打开相机文件失败<
//空间后方交会算法主体函数
voidHFJHDialog:
HFJH()
//结果值
doubleXs=Xs0,Ys=Ys0,Zs=Zs0;
//定义
doublephi=phi0,omega=omega0,kappa=kappa0;
//定义
doublex,y,X,Y,Z;
//定义X,Y,Z
doublea1,a2,a3,b1,b2,b3,c1,c2,c3;
doubleX_,Y_,Z_;
doublea11,a12,a13,a14,a15,a16;
doublea21,a22,a23,a24,a25,a26;
doublelx,ly;
doubler_r,dx,dy;
cv:
MatA,L,dX;
//,A0,L0,A1;
//迭代终止阈值
doublee=1.0/206265;
//单位权中误差
doublem0;
//求取主点坐标
doubleW=5344.0;
doubleH=4008.0;
x0=W/2+x0;
y0=H/2-y0;
do
for(size_ti=0;
i!
=pic.size();
x=pic[i].x;
y=pic[i].y;
X=0;
Y=0;
Z=0;
for(size_tj=0;
j<
obj.size();
j++)
if(obj[j].index==pic[i].index)
X=obj[j].X;
Y=obj[j].Y;
Z=obj[j].Z;
break;
if(abs(x)<
1)
char*arg1="
像点"
char*arg2="
没有找到对应的控制点"
%1%2%3"
).arg(QString:
fromLocal8Bit(arg1)).arg(pic[i].index).arg(QString:
fromLocal8Bit(arg2)));
continue;
//求观测值的改正
r_r=(x-x0)*(x-x0)+(y-y0)*(y-y0);
dx=(x-x0)*(k1*r_r+k2*r_r*r_r)+p1*(r_r+2*(x-x0)*(x-x0))-2*p2*(x-x0)*(y-y0);
dy=-(y-y0)*(k1*r_r+k2*r_r*r_r)+p2*(r_r+2*(y-y0)*(y-y0))-2*p1*(x-x0)*(y-y0);
//经过畸变改正后的像点坐标观测值
x=(x-x0)-dx;
y=-(y-y0)-dy;
//求矩阵R各元素的值
a1=cos(phi)*cos(kappa)-sin(phi)*sin(omega)*sin(kappa);
a2=-cos(phi)*sin(kappa)-sin(phi)*sin(omega)*cos(kappa);
a3=-sin(phi)*cos(omega);
b1=cos(omega)*sin(kappa);
b2=cos(omega)*cos(kappa);
b3=-sin(omega);
c1=sin(phi)*cos(kappa)+cos(phi)*sin(omega)*sin(kappa);
c2=-sin(phi)*sin(kappa)+cos(phi)*sin(omega)*cos(kappa);
c3=cos(phi)*cos(omega);
//求X_,Y_,Z_
X_=a1*(X-Xs)+b1*(Y-Ys)+c1*(Z-Zs);
Y_=a2*(X-Xs)+b2*(Y-Ys)+c2*(Z-Zs);
Z_=a3*(X-Xs)+b3*(Y-Ys)+c3*(Z-Zs);
//求x,y的近似值
doublex_=-fx*X_/Z_;
doubley_=-fy*Y_/Z_;
//求矩阵L各元素的值
lx=x-x_;
ly=y-y_;
//求矩阵A各元素的值
a11=1/Z_*(a1*fx+a3*x);
a12=1/Z_*(b1*fx+b3*x);
a13=1/Z_*(c1*fx+c3*x);
a21=1/Z_*(a2*fy+a3*y);
a22=1/Z_*(b2*fy+b3*y);
a23=1/Z_*(c2*fy+c3*y);
a14=y*sin(omega)-(x/fx*(x*cos(kappa)-y*sin(kappa))+fx*cos(kappa))*cos(omega);
a15=-fx*sin(kappa)-x/fx*(x*sin(kappa)+y*cos(kappa));
a16=y;
a24=-x*sin(omega)-(y/fy*(x*cos(kappa)-y*sin(kappa))-fy*sin(kappa))*cos(omega);
a25=-fy*cos(kappa)-y/fy*(x*sin(kappa)+y*cos(kappa));
a26=-x;
//合成矩阵
doublea[12]={a11,a12,a13,a14,a15,a16,a21,a22,a23,a24,a25,a26};
doublel[2]={lx,ly};
MatAi(2,6,CV_64FC1,a);
MatLi(2,1,CV_64FC1,l);
A.push_back(Ai);
L.push_back(Li);
//计算
dX=(A.t()*A).inv()*A.t()*L;
Xs+=dX.at<
double>
(0,0);
Ys+=dX.at<
(1,0);
Zs+=dX.at<
(2,0);
phi+=dX.at<
(3,0);
omega+=dX.at<
(4,0);
kappa+=dX.at<
(5,0);
#%1:
%2%3%4%5%6%7"
).arg(index).arg(dX.at<
(0)).arg(dX.at<
(1)).arg(dX.at<
(2)).arg(dX.at<
(3)).arg(dX.at<
(4)).arg(dX.at<
(5)));
cv:
MatM0=(A*dX-L).t()*(A*dX-L);
m0=sqrt(M0.at<
(0)/(2*pic.size()-6));
A.release();
L.release();
if(index>
100)break;
while(fabs(dX.at<
(0))>
0.001||fabs(dX.at<
(3))>
e);
Result:
));
Xs:
%1Ys:
%2Zs:
%3phi:
%4omega:
%5kappa:
%6"
).arg(Xs).arg(Ys).arg(Zs).arg(phi).arg(omega).arg(kappa));
char*log="
单位权中误差:
%1%2"
fromLocal8Bit(log)).arg(m0));
on_pushButton_clicked()
QStringqpath=QFileDialog:
getOpenFileName(this);
stringpath=qpath.toLocal8Bit();
if(readxy(path)==-1)
char*log="
读取像点坐标错误XXXXXX"
return;
读取像点坐标结束OOOOOO"
lineEdit->
setText(qpath);
on_pushButton_2_clicked()
if(readXYZ(path)==-1)
读取控制点坐标错误XXXXXX"
读取控制点坐标结束OOOOOO"
lineEdit_2->
on_pushButton_4_clicked()
HFJH();
on_pushButton_5_clicked()
HFJHDialog:
close();
图1控件后方交会
2、特征匹配
match.h"
#inclu