摄影测量实习报告
一、实习目的与要求
本次实习是在摄影测量的教学基础上,理论实际相联系的动手操作实习,是我们在学习测量专业的一个重要的实习环节。一方面是培养我们的实践操作能力和运用软件解算数据的能力,另一方面培养我们在今后遇到问题应该如何去解决的能力,通过实习发现自己在实践动手方面的不足并想办法解决,为以后的工作实践打下扎实的基础。使我们熟练地掌握摄影测量及遥感的原理,信息获取的途径,数字处理系统和应用处理方法。
二、实习地点
桂林市雁山区旧村;
桂林理工大学02223机房。
三、实习用具
大比例尺航片两张、画图板一个、透明纸两张、铅笔、橡皮、胶布;电子计算机、Virtuozo软件、ENVI遥感图像处理系统、编程软件(MATLAB)
四、实习任务与要求
摄影测量实习:
1.摄影外业控制测量;2.像片解译及调绘;3.外业补测;4.内业成图。 要求:掌握野外调绘的过程方法,学会辨认地物信息;学会使用Virtuozo 进行航片处理,以及影像的矢量化成图。
遥感实习:
根据两幅不同时相的遥感影像,对其进行植被、建筑用地、水体及耕地信息的提取,并根据两个时相的遥感影像信息所提取的上述信息,对它们进行动态监测并分析。
1、 熟练掌握遥感影像的预处理方法
2、 熟练掌握遥感的分类方法
3、 掌握利用遥感影像进行实例分析的方法
要求:学会使用ENVI进行遥感影像的处理,以及专题提的制作;同时掌握一些常用的影像处理方法的原理。
五、实习步骤
I、野外航片调绘
1. 准备工作
1
a.选择调绘像片;b.选刺像控点;c. 确定调绘面积;d.选择调绘路线。
2.地理要素的调绘
实地判读时,首要任务就是确定自己站立之点在像片上的位置。为了确认自己站立点在像片上的位置,通常从明显地物点开始判读,即从像片上最明显、最突出的影像去寻找地面上相应的地物,或者以明显、突出的地物去找像片上相应的影像。为了避免出错,要从不同方向多次比较辨认。同时用此方法找出定向目标,标定方位。
对于要调绘的地物地貌要素,通常采取“远看近判”的调绘方法,以便进行正确的综合取舍。如地类界、梯田坎的取舍,线状地物的走向以及在近处不易看清总轮廓与地物间的相互关系的情况下,利用“远看”能取得较好的效果。“近判”则便于确定那些影像较小或没有影像的地物的准确位置,另外还可检查“远看”的准确性及纠正“远看”中的错误。
内业成图
使用Virtuozo软件对一个像片对进行内定向操作然后,进行相对定向操作,之后对像片进行绝对定向,最后使用数字化成图工具对处理好的影像进行矢量化。
调绘时的注意事项:
1.即地物地貌的调绘要连续进行,避免调绘不连贯和遗漏。
2.当地理名称注记过密时,可适当取舍。
3.调绘工作应按照国家标准的地形图图式进行,说明性质的注记应采用“简注表”,不得任意命名。
4.在调绘好的透明纸上,图名注于调绘片正上方,调绘者姓名及调绘日期等信息在调绘航片的右下角。
II、使用ENVI系统处理遥感影像
主要要求学会使用ENVI系统对遥感影像进行监督分类处理,及制作专题地图。
1.监督分类
实习过程中首先导入某一地区的两幅不同年分的影像,进行几何校正并统一 2
地理参数,然后选取感兴趣区域,分别对两幅影像进行监督分类处理。
2.动态监测
图像直接比较法:
该方法是直接对两个时相的影像中的某一相同波段进行操作。
分类后比较法:
该方法是先把两个时相的影像进行分类后,再对其进行动态监测。
3.专题地图
根据转移矩阵计算各类地物的转入和转出比例,制作成图表表;
分别把两个时相的分类结果图以及变化监测的结果图制作成专题图。
4.MATLAB编程
使用matlab编写图像滤波处理的程序,对比不同处理的效果图。
六、实习心得
在这次实习过程中,在老师的指导下我们一共进行了四项内容,分别是像片的判读与调绘;全数字立体测图;遥感影像监督分类;MATLA编写简单图像处理程序。使用到的软件有Virtuozo、ENVI、MATLAB。像片的判读与调绘则是让我们利用学过的几类常用遥感影像的判读技术与方法,完成航空像片或彩红外片的判读和外业调绘工作,掌握全野外调绘的基本技能。在摄影测量的实习过程中使用的Virtuozo的全数字立体测图的功能直接在计算机上进行数字化测图的作业,实行对地物数据采集及编辑,生成数字测图文件,按标准的制图符号将之输出为矢量地形图。实习过程使得我们更加熟悉Virtuozo的制图功能。使用ENVI软件进行遥感影像自动分类则是让我们了解并掌握督与非督分类的过程和方法,并利用监督分类结果制作一幅影像专题地图。图像增强处理的方法学习过程中使用Matlab进行编程,掌握了空间域滤波和频率滤波的原理,以及处理的一些基本的方法。本次实习不仅使我们理论知识得到巩固、操作能力得到加强,同时也使我们运用知识的能力得到提高。
但是,感到遗憾的是此次实习仅仅只有三周的时间,虽然在这三周的时间中我们学习到了很多新的内容,但是这些远远满足不了我们的求知欲。然虽,实习过程是辛苦的,甚至经常犯错,但是也让认识到了学习是一种过程,只有经历了痛苦的磨砺才能有真正的收获知识,也只有经常犯错才能从错误中吸取教训。此次的实习虽然已经结束,但是结束不了我们的学习热情,和对知识的强烈渴望。 3
第二篇:摄影测量实习报告翟智佳
摄影测量实习报告
——单张影像空间后方交会程序设计
实习时间 2013.5.20-2013.5.24
学生班级 学生姓名
学生学号所在院系 矿业工程学院
指导教师
一、实习目的
1.深入理解单片空间后方交会的原理,体会在有多余观测情况下,用最小二乘平差方法编程实现解求影像外方位元素的过程。
2.利用Visual C++或者Matlab(或其他熟悉的计算机语言)编写一个完整的单片空间后方交会程序,通过对提供的试验数据进行计算,输出像片的外方位元素并进行评定精度。
3.通过编写程序实现单张影像空间后方交会计算,掌握非线性方程线性化的过程、相应数据读入与存储的方法以及迭代计算的特点,巩固各类基础课程及计算机课程的学习内容,培养上机调试程序的动手能力,通过对实验结果的分析,增强综合运用所学知识解决专业实际问题的能力。
二、实习环境
1.硬件环境:Window操作系统
2.软件环境:VC++或Matlab或其他计算机语言
三、实习内容
利用一定数量的地面控制点,根据共线条件方程求解像片外方位元素并进行精度评定。
四、实习原理
1.共线方程
x??fa1(X?Xs)?b1(Y?Ys)?c1(Z?Zs)
a3(X?Xs)?b3(Y?Ys)?c3(Z?Zs)
a(X?Xs)?b2(Y?Ys)?c2(Z?Zs)y??f2
a3(X?Xs)?b3(Y?Ys)?c3(Z?Zs)
2.精度评定
mi?m0?ii 其中m0?? VV2n?6
五、实习数据
1.模拟像片一对:左片号23 右片号24
2.像片比例尺: 1/30000
3.航摄机主距:f=150mm
4.每张像片有4个控制点
5.点位略图
6.各片像点坐标及其地面坐标
六、验证数据
1.已知航摄仪内方位元素f=153.24mm,Xo=Yo=0。 2.已知4对点的影像坐标和地面坐标
3.解算结果
?0.997710.067530.00399??? YS?27476.46m R??-0.067530.99772-0.00221??ZS?7572.69m?-0.004120.001840.9999??0XS?39795.45m
七、程序过程框图:
八.实现程序
#include "iostream.h"
#include"stdio.h"
#include "stdlib.h"
#include<math.h>
#define N 4
void mult(double *m1,double *m2,double *result,int i_1,int j_12,int j_2)//矩阵相乘
{
int i,j,k;
for(i=0;i<i_1;i++)
for(j=0;j<j_2;j++)
{
result[i*j_2+j]=0.0;
for(k=0;k<j_12;k++)
result[i*j_2+j]+=m1[i*j_12+k]*m2[j+k*j_2]; }
return;
}
int invers_matrix(double *m1,int n)//矩阵求逆
{
int *is,*js;
int i,j,k,l,u,v;
double temp,max_v;
is=(int *)malloc(n*sizeof(int));
js=(int *)malloc(n*sizeof(int));
if(is==NULL||js==NULL){
printf("out of memory!\n");
return(0);
}
for(k=0;k<n;k++){
max_v=0.0;
for(i=k;i<n;i++)
for(j=k;j<n;j++){
temp=fabs(m1[i*n+j]);
if(temp>max_v){
max_v=temp; is[k]=i; js[k]=j;
}
}
if(max_v==0.0){ free(is); free(js); printf("invers is not availble!\n"); return(0); } if(is[k]!=k) for(j=0;j<n;j++){ u=k*n+j; v=is[k]*n+j; temp=m1[u]; m1[u]=m1[v]; m1[v]=temp; } if(js[k]!=k) for(i=0;i<n;i++){ u=i*n+k; v=i*n+js[k]; temp=m1[u]; m1[u]=m1[v]; m1[v]=temp; } l=k*n+k; m1[l]=1.0/m1[l]; for(j=0;j<n;j++) if(j!=k){ u=k*n+j; m1[u]*=m1[l]; } for(i=0;i<n;i++) if(i!=k) for(j=0;j<n;j++) if(j!=k){ u=i*n+j; m1[u]-=m1[i*n+k]*m1[k*n+j]; } for(i=0;i<n;i++) if(i!=k){ u=i*n+k; m1[u]*=-m1[l]; } } for(k=n-1;k>=0;k--){ if(js[k]!=k) for(j=0;j<n;j++){ u=k*n+j; v=js[k]*n+j; temp=m1[u]; m1[u]=m1[v]; m1[v]=temp; } if(is[k]!=k) for(i=0;i<n;i++){ u=i*n+k; v=i*n+is[k];
temp=m1[u]; m1[u]=m1[v]; m1[v]=temp;
}
}
free(is); free(js);
return(1);
}
void transpose(double *m1,double *m2,int m,int n) //矩阵转置 {
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
m2[j*m+i]=m1[i*n+j];
return;
}
void main()
{
double Xs,Ys,Zs,q,w,k;
double a[3],b[3],c[3];
double x0,y0,f;
double x[N],y[N];
double X[N],Y[N],Z[N];
double x1[N],y1[N];
double m;
double L[2*N];
double XX[6];
double A[2*N][6];
double X0[N],Y0[N],Z0[N],At[6][2*N],result1[6][6],result2[6][1]; int i,n=0;
double sum=0,m0;
/*---------------输入点地面坐标---------------------*/
for(i=0;i<N;i++)
{
printf("请输入第%d个点的地面坐标:",i+1);
scanf("%lf%lf%lf",&X[i],&Y[i],&Z[i]);
}
/*---------------输入点像片坐标---------------------*/
for(i=0;i<N;i++)
{
printf("请输入第%d个点的像片坐标:",i+1);
scanf("%lf%lf",&x[i],&y[i]); } cout<<endl; /*-----------------设定外方位元素初始值--------------*/ x0=0;y0=0;f=150;m=30000; Xs=0;Ys=0;Zs=f*m/1000; q=0;w=0;k=0; XX[3]=1; /*------------------迭代计算--------------------------*/ while((XX[3]>0.00001 || XX[4]>0.00001 || XX[5]>0.00001)&&n<100) { /*----------------旋转矩阵R-----------------------*/ a[0]=cos(q)*cos(k)-sin(q)*sin(w)*sin(k); a[1]=-cos(q)*sin(k)-sin(q)*sin(w)*cos(k); a[2]=-sin(q)*cos(w); b[0]=cos(w)*sin(k); b[1]=cos(w)*cos(k); b[2]=-sin(w); c[0]=sin(q)*cos(k)+cos(q)*sin(w)*sin(k); c[1]=-sin(q)*sin(k)+cos(q)*sin(w)*cos(k); c[2]=cos(q)*cos(w); /*-----------------像点坐标计算值------------------*/ for(i=0;i<N;i++) { X0[i]=a[0]*(X[i]-Xs)+b[0]*(Y[i]-Ys)+c[0]*(Z[i]-Zs); Y0[i]=a[1]*(X[i]-Xs)+b[1]*(Y[i]-Ys)+c[1]*(Z[i]-Zs); Z0[i]=a[2]*(X[i]-Xs)+b[2]*(Y[i]-Ys)+c[2]*(Z[i]-Zs); x1[i]=x0-f*X0[i]/Z0[i]; y1[i]=y0-f*Y0[i]/Z0[i]; } /*-------------误差方程中各偏导数的值--------------*/ for(i=0;i<N;i++) { A[2*i][0]=((a[0]*f+a[2]*(x[i]-x0)))/Z0[i]; A[2*i][1]=((b[0]*f+b[2]*(x[i]-x0)))/Z0[i]; A[2*i][2]=((c[0]*f+c[2]*(x[i]-x0)))/Z0[i]; A[2*i][3]=(y[i]-y0)*sin(w)-((x[i]-x0)*((x[i]-x0)*cos(k)-y[i]*sin(k))/f+f*cos(k))
*cos(w);
A[2*i][4]=-f*sin(k)-(x[i]-x0)*((x[i]-x0)*sin(k)+(y[i]-y0)*cos(k))/f; A[2*i][5]=y[i]-y0;
L[2*i]=x[i]-x1[i];
A[1+2*i][0]=((a[1]*f+a[2]*(y[i]-y0)))/Z0[i];
A[1+2*i][1]=((b[1]*f+b[2]*(y[i]-y0)))/Z0[i];
A[1+2*i][2]=((c[1]*f+c[2]*(y[i]-y0)))/Z0[i];
A[1+2*i][3]=-(x[i]-x0)*sin(w)-((y[i]-y0)*((x[i]-x0)*cos(k)-(y[i]-y0)*sin(k))/f-f*sin(k))
*cos(w);
A[1+2*i][4]=-f*cos(k)-(y[i]-y0)*((x[i]-x0)*sin(k)+(y[i]-y0)*cos(k))/f;
A[1+2*i][5]=-x[i]+x0;
L[1+2*i]=y[i]-y1[i];
}
/*-------------------解法方程--------------------*/
transpose(&A[0][0],&At[0][0],2*N,6);
mult(&At[0][0],&A[0][0],&result1[0][0],6,2*N,6);
invers_matrix(&result1[0][0],6);
mult(&At[0][0],L,&result2[0][0],6,2*N,1);
mult(&result1[0][0],&result2[0][0],&XX[0],6,6,1);
Xs+=XX[0];
Ys+=XX[1];
Zs+=XX[2];
q+=XX[3];
w+=XX[4];
k+=XX[5];
n++;
}
/*----------------旋转矩阵R-----------------------*/
a[0]=cos(q)*cos(k)-sin(q)*sin(w)*sin(k);
a[1]=-cos(q)*sin(k)-sin(q)*sin(w)*cos(k);
a[2]=-sin(q)*cos(w);
b[0]=cos(w)*sin(k);
b[1]=cos(w)*cos(k);
b[2]=-sin(w);
c[0]=sin(q)*cos(k)+cos(q)*sin(w)*sin(k);
c[1]=-sin(q)*sin(k)+cos(q)*sin(w)*cos(k);
c[2]=cos(q)*cos(w);
cout<<"迭代次数为:"<<n<<endl;
printf("\n像片外方位元素的解\n");
} cout<<"航向顷角q:"<<q<<endl; cout<<"旁向倾角w:"<<w<<endl; cout<<"像片旋角k:"<<k<<endl; printf("Xs=%lf\t\tYs=%lf\t\tZs=%lf\n",Xs,Ys,Zs); cout<<endl; printf("旋转矩阵R:\n"); for(i=0;i<3;i++) printf("%lf\t",a[i]); printf("\n"); for(i=0;i<3;i++) printf("%lf\t",b[i]); printf("\n"); for(i=0;i<3;i++) printf("%lf\t",c[i]); printf("\n"); /*-------------------计算单位权中误差---------------*/ for(i=0;i<2*N;i++) sum+=L[i]*L[i]; m0=sqrt(sum/(2*N-6)); cout<<"单位权中误差m0="<<m0<<endl; cout<<"测量精度:"<<endl; cout<<"Xs的精度为:"<<m0*sqrt(result1[0][0])<<endl; cout<<"Ys的精度为:"<<m0*sqrt(result1[1][1])<<endl; cout<<"Zs的精度为:"<<m0*sqrt(result1[2][2])<<endl; cout<<"q的精度为:"<<m0*sqrt(result1[3][3])<<endl; cout<<"w的精度为:"<<m0*sqrt(result1[4][4])<<endl; cout<<"k的精度为:"<<m0*sqrt(result1[5][5])<<endl;
九、程序运行结果 23像片运行结果
24号像片运行结果
10.实习心得
通过一周的实习,让我感觉得到了自己摄影测量知识的欠缺
和编程方面的无措。不过最后在同学们的帮助下中雨完成了这次实习 而在编程里也学习了好多以前没见过的函数,mult是矩阵相乘的函数、invers_矩阵求逆函数、transpose矩阵转换函数。这对以后的学习是大有裨益的。
通过此次实习,才知道书到用时方恨少,同时下定决心好好学习,非常感谢老师给我们提供此次实习。