• 大小: 1.85MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-30
  • 语言: 其他
  • 标签: DLT  C++  

资源简介

本算法根据近景摄影测量中的直接线性变换(DLT算法)写成,内含有两个版本的数据以供试验,注释清晰,运行正常。

资源截图

代码片段和文件信息

//直接线性变换DLT
//2013.12.7

#include 
#include 
#include 
#include “CMatrix.h“
using namespace std;

struct P1
{
int numbers;  //点号
double xp yp;
double X Y Z;
};

struct P2
{
int numbers;  //点号
double xl yl;
double xr yr;
double X Y Z;
};

void ReadLData(double *data char *s int &num)
{
ifstream file1;
file1.open(s ios::in|ios::out);
for (int i=0; file1.eof()==0; i++)
{
file1>>data[i];
}
num = data[0];
if (num>=800)
{
cout<<“发生溢出错误!“< return;
}
file1.close();
}

void Get_L(double *X double *WF P1 *ctrl int num)
{
//  double *A = new double[22*num];
//  double *AT = new double[22*num];
//  double *L = new double[2*num];
double *A = new double[22*6];
double *AT = new double[22*6];
double *L = new double[2*6];

double ATA[121] = {0.0};
double ATL[11] = {0.0};
//L系数的初始值计算
for (int i=0; i<6; i++)
{
A[ 0+22*i] = ctrl[i].X;
A[ 1+22*i] = ctrl[i].Y;
A[ 2+22*i] = ctrl[i].Z;
A[ 3+22*i] = 1;
A[ 4+22*i] = 0;
A[ 5+22*i] = 0;
A[ 6+22*i] = 0;
A[ 7+22*i] = 0;
A[ 8+22*i] = ctrl[i].xp*ctrl[i].X;
A[ 9+22*i] = ctrl[i].xp*ctrl[i].Y;
A[10+22*i] = ctrl[i].xp*ctrl[i].Z;
A[11+22*i] = 0;
A[12+22*i] = 0;
A[13+22*i] = 0;
A[14+22*i] = 0;
A[15+22*i] = ctrl[i].X;
A[16+22*i] = ctrl[i].Y;
A[17+22*i] = ctrl[i].Z;
A[18+22*i] = 1;
A[19+22*i] = ctrl[i].yp*ctrl[i].X;
A[20+22*i] = ctrl[i].yp*ctrl[i].Y;
A[21+22*i] = ctrl[i].yp*ctrl[i].Z;

L[0+2*i] = -ctrl[i].xp;
L[1+2*i] = -ctrl[i].yp;
}
TransposeMatrix(AAT1211);
Multiply(ATAATA111211);
Multiply(ATLATL11121);
Inverse(ATA11);
Multiply(ATAATLX11111);

//L系数的精确值计算
double r3; //r3*r3
double x0 y0;  //内方位元素
double a b c;  //用于结算方便设置的中间变量
double fxfyfx1fy1;  //x向主距,y向主距上次迭代的fx值上次迭代的fy的值
double Atemp rr;  //误差方程中方便计算的变量

double *M = new double[24*num];
double *MT = new double[24*num];
double *W = new double[2*num];
double MTM[144] = {0.0};
double MTW[12] = {0.0};
//计算x0,y0
r3 = 1/(X[8]*X[8]+X[9]*X[9]+X[10]*X[10]);
x0 = -r3*(X[0]*X[8]+X[1]*X[9]+X[2]*X[10]);
y0 = -r3*(X[4]*X[8]+X[5]*X[9]+X[6]*X[10]);
a  = r3*(X[0]*X[0]+X[1]*X[1]+X[2]*X[2])-x0*x0;
b  = r3*(X[4]*X[4]+X[5]*X[5]+X[6]*X[6])-y0*y0;
c  = r3*(X[0]*X[4]+X[1]*X[5]+X[2]*X[6])-x0*y0;
//  double dbeta = asin( sqrt(c*c/(a*b)));
//  double ds = sqrt(a/b) - 1;
//  fx = sqrt(a) * cos(dbeta);
//  fy = fx / (1 + ds);
fx = sqrt((a*b-c*c)/b);
fy = sqrt((a*b-c*c)/a);

do 
{
fx1 = fx;
fy1 = fy;
for (int i=0; i {
Atemp = X[8]*ctrl[i].X+X[9]*ctrl[i].Y+X[10]*ctrl[i].Z+1;
rr = (ctrl[i].xp-x0)*(ctrl[i].xp-x0)+(ctrl[i].yp-y0)*(ctrl[i].yp-y0);

M[24*i+0]  = -ctrl[i].X/Atemp;
M[24*i+1]  = -ctrl[i].Y/Atemp;
M[24*i+2]  = -ctrl[i].Z/Atemp;
M[24*i+3]  = -1/Atemp;
M[24*i+4]  = 0;
M[24*i+5]  = 0;
M[24*i+6]  = 0;
M[24*i+7]  = 0;
M[24*i+8]  = -(ctrl[i].xp*ctrl[i].

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     122368  2013-12-15 22:34  DLT\Debug\DLT.exe

     文件     594148  2013-12-15 22:34  DLT\Debug\DLT.ilk

     文件    1018880  2013-12-15 22:34  DLT\Debug\DLT.pdb

     文件       1268  2013-12-08 00:19  DLT\DLT\CMatrix.h

     文件        558  2013-12-15 22:34  DLT\DLT\Debug\cl.command.1.tlog

     文件       5912  2013-12-15 22:34  DLT\DLT\Debug\CL.read.1.tlog

     文件        260  2013-12-15 22:34  DLT\DLT\Debug\CL.write.1.tlog

     文件       4009  2013-12-15 21:36  DLT\DLT\Debug\DLT.Build.CppClean.log

     文件         80  2013-12-15 22:34  DLT\DLT\Debug\DLT.lastbuildstate

     文件       1792  2013-12-15 22:34  DLT\DLT\Debug\DLT.log

     文件     304194  2013-12-15 22:34  DLT\DLT\Debug\DLT.obj

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link-cvtres.read.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link-cvtres.write.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link-rc.read.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link-rc.write.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1584-cvtres.read.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1584-cvtres.write.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1584-rc.read.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1584-rc.write.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1584.read.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1584.write.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1776-cvtres.read.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1776-cvtres.write.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1776-rc.read.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1776-rc.write.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1776.read.1.tlog

     文件          2  2013-12-15 22:34  DLT\DLT\Debug\link.1776.write.1.tlog

     文件       1022  2013-12-15 22:34  DLT\DLT\Debug\link.command.1.tlog

     文件       2308  2013-12-15 22:34  DLT\DLT\Debug\link.read.1.tlog

     文件        332  2013-12-15 22:34  DLT\DLT\Debug\link.write.1.tlog

............此处省略20个文件信息

评论

共有 条评论