您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 课程作业2--计算内定向参数
-1-数字摄影测量作业报告计算内定向参数2010年12月10日-2-1作业任务------------------------------------------------------------------------------------32作业思想---------------------------------------------------------------------------------------33已知条件及数据--------------------------------------------------------------------34作业过程---------------------------------------------------------------------------35源程序-----------------------------------------------------------------------------46作业成果---------------------------------------------------------------------------177心得体会与建议-----------------------------------------------------------------------------17-3-1作业任务根据仿射变换公式,由已知数据(像点的像素坐标和像平面直角坐标)编程解算出仿射变换参数。2作业思想内定向确定像素坐标(I,J)与像平面坐标(x,y)的转换关系,可以运用仿射变换公式。设框标的像素坐标为(,)xy,以像主点为原点的像平面直角坐标为(x,y)则它们之间的关系可用仿射变换公式表示,即012012xaaxayybbxby 式中:ia、ib为6个仿射变换参数,其中包含像素坐标与像平面直角坐标之间的平移、旋转关系以及数字影像的部分系统误差(如底片变形误差、物镜畸变差和扫描仪误差等)。在实际编程作业中,根据上式,可列出矩阵式:0120121xaaaxybbby 编写代码,可求出仿射变换参数ia、ib。3作业条件及数据像点的像素坐标及直角坐标由上机实习所得数据给出,见下表:表1点号像素坐标像平面坐标x(mm)y(mm)x'(m)y'(m)1128.50175932202.536262-103.947-103.95222184.233259102.2687655103.945103.9243105.9170339124.7163795-103.937103.92742206.6690132179.987241103.958-103.952526.99366891164.716996-112.966-0.00562285.7183481140.079603112.99-0.01571143.95868222.852490190.003113.00181168.8057552281.4723290.026-112.971-4-4源程序#includeiomanip.h#includestdlib.h#includemath.h#includefstream.h#includeiostream.hconstintN=8;inti,j;doublezjzb[N][N],xszb[N][N],cs[N][N],zjzbT[N][N],xszbT[N][N];//求转置矩阵templatetypenameT1,typenameT2voidTranspose(T1*mat1,T2*mat2,inta,intb){for(i=0;ia;i++)for(j=0;jb;j++)mat2[j][i]=mat1[i][j];return;}//求矩阵的乘积templatetypenameT1,typenameT2voidArray_mul(T1*mat1,T2*mat2,T2*result,inta,intb,intc){inti,j,k;for(i=0;ia;i++){for(j=0;jc;j++){result[i][j]=0;for(k=0;kb;k++)result[i][j]+=mat1[i][k]*mat2[k][j];}}return;}//求逆矩阵inverse(doubleA[N][N],intm){inti=0,j=0,k=0;doubleC[20][20],B[20][20];for(i=0;i2*m;i++)for(j=0;j2*m;j++){if(i==j)C[i][j]=1.0;-5-elseC[i][j]=0.0;}for(i=0;im;i++)for(j=0;jm;j++)B[i][j]=A[i][j];for(i=0;im;i++)for(j=m;j2*m;j++)B[i][j]=C[i][j-m];cout.precision(5);for(k=0;km;k++){for(i=k;im;i++)for(j=2*m-1;j=0;j--){if(B[i][k]!=0)B[i][j]=B[i][j]/B[i][k];}for(i=m-1;ik;i--){if(B[i][k]==0)continue;for(j=0;j2*m;j++)B[i][j]=B[i][j]-B[k][j];}}for(k=1;km;k++)for(i=0;ik;i++)for(j=2*m-1;j=i;j--)B[i][j]=B[i][j]-B[i][k]*B[k][j];for(i=0;im;i++)for(j=0;jm;j++)A[j][i]=B[j][m+i];return1;}//原始数据导入voidInput(){ifstreaminfile;infile.open(原始坐标数据.txt);if(infile.is_open()){while(!infile.eof()){for(inti=0;i8;i++){infilexszb[i][0];infile.ignore(1);infilexszb[i][1];infile.ignore(1);infilexszb[i][2];infile.ignore(1);infilezjzb[i][0];infile.ignore(1);infilezjzb[i][1];infile.ignore(1);-6-}}infile.close();}}voidmain(){Input();Transpose(zjzb,zjzbT,8,8);Transpose(xszb,xszbT,8,8);inverse(xszbT,8);Array_mul(zjzbT,xszbT,cs,8,8,8);cout计算得仿射变换参数:endl;for(i=0;i2;i++){for(j=0;j3;j++){if(j%3==0)coutendl;coutcs[i][j];}coutendl;}//输出结果ofstreamoutfile;outfile.open(结果数据(仿射变换参数).txt);if(outfile.is_open()){for(i=0;i2;i++)for(j=0;j3;j++){if(j%3==0)outfileendl;outfilecs[i][j];}outfileendl;}outfile.close();}-7-6计算结果即012012-114.394,0.100012,-0.00109189116.518,-0.00108191,b=-0.100035aaabb7心得体会与建议这次作业说实话很惭愧,一开始根本不知道有这样一个作业,可能上机课那天走神了。后来知道的时候已经是离作业布置很久之后,才又翻开前面学习的这部分内容,又看了一遍,发现这个作业完成起来应该不难,就是很简单的矩阵运算。随后变找同学要来了上机时得到的像素坐标数据和像平面坐标数据,开始编程。在文件输入和输出的时候出现一点小问题,后来修改程序之后也纠正过来。时隔上学期的编程作业这么久,初下手时感觉是有点手生,看来自己需要多“学而时习之”。
本文标题:课程作业2--计算内定向参数
链接地址:https://www.777doc.com/doc-2032059 .html