DLT 直接线性变换解法程序
基于遥感的三维重建理论和方法
3 3
a7 X 2Y b7 X 2Y
a8 XY 2 a9Y b8 XY 2 b9Y 3
3)
)
❖ 共线方程式法
x f a11 ( Xp Xs) a21 (Yp Ys) a31 (Zp Zs) a13 ( Xp Xs) a23 (Yp Ys) a33 (Zp Zs)
环节二:系数L和物方空间坐标(X,Y,Z)精确解算。
四、单张遥感影像三维重建
(1)、老式旳航空影像及近景影像一般作为建筑物 三维重建旳主要信息源。但是,航空影像因为其高空成 像造成侧面纹理匮乏,且航空、近景影像均需要昂贵旳 仪器、设备。
(2)、对于从立体遥感影像上自动、半自动地进行 建筑物旳提取和重建旳措施,已经有了大量旳研究,在技 术思绪上也已经比较成熟,而且取得旳建筑物几何模型 精度也较高。在有些特定情况下,尤其是在工程摄影测 量、非正规航空摄影旳条件下,不能获取具有要求重叠 度旳立体像对,所以利用单影像进行三维建模也是一种 主要旳途径。
1、单张遥感影像三维重建
原理:RFM (1)角点量测法 (2)阴影量测法
2、单张近景影像三维重建
原理:灭点理论
1、单张影像基于RFM三维重建
RFM
r c
P1 ( X , Y , H )
P2 ( X , Y , H ) P3 ( X , Y , H )
P4 ( X , Y , H )
p1(X ,Y , Z ) a0 a1X a2Y a3Z a4 XY a5 XZ a6YZ a7 X 2 a8Y 2 a9Z 2 a10YXZ a11X 3 a12 XY 2 a13 XZ 2 a14 X 2Y a15Y 3 a16YZ 2 a17 X 2Z a18Y 2Z a19Z 3
几种相机检校方法的研究(最新整理)
X1
ai,11 ai,21
-ai,12 - ai,22
-ai,13 - ai,23
ai,17
ai,27
ai,18 ai,28
ai,19 ai,29
X3
bi,11 bi,21
bi,12 bi,22
bi,13 bi,23
bi,14 bi,24
bi,15 bi,25
K
xi
yi
(xi )
顾及实际像点偏差的共线条件方程为:
x x0
x f
a1( X a3 ( X
X s ) b1(Y Ys ) c1(Z Zs ) X s ) b3 (Y Ys ) c3 (Z Zs )
y
y0
y
f
a2 ( X a3 ( X
X s ) b2 (Y X s ) b3 (Y
x x0
x f
a1( X a3 ( X
X s ) b1(Y Ys ) c1(Z Zs ) X s ) b3 (Y Ys ) c3 (Z Zs )
y
y0
y
f
a2 ( X a3 ( X
X s ) b2 (Y X s ) b3 (Y
Ys ) c2 (Z Zs ) Ys ) c3 (Z Zs )
外方位元素( X外 )的相机检校方法。误差方程式表示如下:
V=AX 外 BX内 CX ad L
理学解线性方程组的直接法
对一般线性方程组: A x = b, 其中
a11 A a21
a12 a22
a1n
a2
n
b1
b
b2
an1 an2
ann
bn
x1
x
x2
M
xn
由以前所学内容知,当且仅当矩阵A行列式不为0 时,即A非奇异时,方程组存在唯一解,可根据 Cramer法则求解。
《计算方法》 第三章 解线性方程组的直接法 数学科学学院 房秀芬
计算2个数:[m32 m42]T = [a32(1) a42(1)]T / a22(1) 用-m32乘矩阵第二行后加到矩阵第三行; 用-m42乘矩阵第二行后加到矩阵第四行; 其系数增广矩阵变为:
a11 a12 a13 a14
A(2)
a a (1) (1) 22 23 a(2) 33
a (1) 24
第三章 解线性方程组的直接法
引言 Gauss消元法 列主元素消元法 矩阵三角分解法 向量和矩阵的范数 误差分析
《计算方法》 第三章 解线性方程组的直接法 数学科学学院 房秀芬
3.1 引言
小行星轨道问题:
天文学家要确定一小行星的轨道,在轨道平面建 立以太阳为原点的直角坐标系。在坐标轴上取天文测 量单位(一天文单位为地球到太阳的平均距离:9300万 英里,约1.5亿千米),对小行星作5次观察,测得轨道 上5个点的坐标数据如下: x 5.7640 6.2860 6.7590 7.1680 7.4800
方程组的解。
《计算方法》 第三章 解线性方程组的直接法 数学科学学院 房秀芬
Gauss消元的目的:
原始方程组
a11x1 a12 x2 L a1n xn b1 La21Lx1 a22 x2 L a2n xn b2 an1x1 an2 x2 L ann xn bn
DLT程序设计与应用
#$% &%’%(&)$ *+ ,’-./ (.0 1&*/&(22-./ *+ 0-&%)3 4-.%(& 3&(.’+*&2(3-*.
"#$ !%&’(!) *+ $ ,-’(") !$ ./012%’(# $!% 12345256 789:5293; <52=8>2?@A BCD25 !"#%%%A (:253E "$ F3;235 *;355256 GCH83C 4I F8=8;4J256 +H83A F3;235 !!&&%%A (:253; #$ G82K256 L25M356 (3NJ35@ 4I 7:8 (2?@ F8=8;4JN85? OH4CJA G82K256A !%%%!#) 56’3&()37 7:2> ?:8>2> >8?> CJ ?:8 IC59?245 N4P8; 4I P2H89? ;2583H 4I 3JJ85P256 J3H3;;8; 945P2?245 ?H35>Q I4HN3?245 R@ 3PP256 3JJ85P256 J3H3;;8; 945P2?245A 45 ?:8 R3>2> 4I F17 ?:84H@ 4I 9;4>8,H3568 J:4?4Q 6H3J: >CH=8@256$ S? P2>9C>>8> ?:8 N8?:4P 4I H8K89?256 R;C5P8H R@ ?:8 N8?:4P 4I F3?3,T544J256 35P 94NJ85>3?256 >@>?8N3?29 8HH4H R@ J4>??8>?256 94NJ85>3?245 JH2592J;8 25 ?:8 M4HU 4I F17$ G893C>8 4I ?:8 2NJ4H?3598 35P C>8IC;58>> 4I ?:8 N8?:4P 4I F17 H8>C;?8P IH4N ?:8 J4JC;3H C>8 4I 545,>CH=8@256 93N8H3 35P ?:8 >4J:2>?293?245 4I M4HU H8>C;?8P IH4N ?:8 ;3H68 >93;8 P3?3A M8 JH46H3NN8P ?:8 JH46H3N I4H ?:8 M4HU 4I F17 R@ C>256 ’()) JH46H3NN256 ;356C368A J425? 4C? 35P 25?8HJH8? ?:8 C>8 35P >4N8 U8@ N8?:4P> I4H 2?$ 8%9 :*&0’7 ?:8 F17 93;9C;3?245E ! J3H3N8?8HE ?:8 N8?:4P 4I P3?3,>544J256E ?:8 N8?:4P 4I J4>??8>?256 94NJ85>3?245
第 章 直接线性变换解法
是否有某种算法适合非量测摄影机的数 据处理?
答案是肯定的。
一、定义
直接线性变换解法是建立像点的“坐标 仪坐标”和相应物点的物方空间坐标直接的 线性关系的解法.
xy xy00 xy ffa a a a3 12 3((((X X X X X X X XS SS S)))) b bb b1 33 2((((Y Y Y Y Y Y Y YS SS S)))) cccc133 2 ((((Z Z Z Z Z Z Z ZSSS S))))
[om 2,o1 m ] 以像主点为原点包含不正交 性dβ误差的像点p的坐标;
xy xy00 xy ffa a a a3 12 3((((X X X X X X X XS SS S)))) b bb b1 33 2((((Y Y Y Y Y Y Y YS SS S)))) cccc133 2 ((((Z Z Z Z Z Z Z ZSSS S))))
(x,y)o [2,n o1]n 以像主点为原点,不包含线 性误差的像点p的坐标;
xy xy00 xy ffa a a a3 12 3((((X X X X X X X XS SS S)))) b bb b1 33 2((((Y Y Y Y Y Y Y YS SS S)))) cccc133 2 ((((Z Z Z Z Z Z Z ZSSS S))))
即 与 之 1
ZZ: 间 的CC
u v
关 1
dx
0
0
系
0
1 dy 0
u
0
v0
DLT算法
DLT 算法1. DLT 的基本公式由空间射影定理所知:坐标变换时点的齐次坐标的变换是以线性齐次关系表示的,即为:⎪⎪⎭⎪⎪⎬⎫+++=+++=+++=+++=443424141433323131423222122413121111''''x D x C x B x A x x D x C x B x A x x D x C x B x A x x D x C x B x A x (2-1) 如用非齐次坐标来表示射线变换公式,则可用式(2-1)中的第四个式子逐项去除前三个式子,并令''',''',''',,,434241434241x x z x x y x x x x x Z x x Y x x X ======(2-2) 将式(2-2)代入式(2-1),可得:⎪⎪⎪⎭⎪⎪⎪⎬⎫++++++=++++++=++++++=444433334444222244441111'''D Z C Y B X A D Z C Y B X A z D Z C Y B X A D Z C Y B X A y D Z C Y B X A D Z C Y B X A x (2-3) (2-3)式为射影测量中表示三维的射影变换,如若表示二维的射影变换,即点)',','(z y x 满足某一平面方程,设这一平面方程为0'''=+++d cz by ax ,即'z 能由'x 、'y 表示,即(2-3)式中前两式与(2-3)式中三式等价。
当(2-3)式中前两式分子、分母同除以4D ,即有下式成立:⎪⎪⎭⎪⎪⎬⎫++++++=++++++=1'1'111098765111094321Z L Y L X L L Z L Y L X L y Z L Y L X L L Z L Y L X L x (2-4) 式(2-4)即为直接线性变换的基本公式,形式上与由共线条件方程导出的完全一样,但它比惯用的共线条件方程式具有一般的意义。
3.5 直接线性变化的基本原理和解算方法
21立体摄影测量的基本原理0011 0010 1010 1101 0001 0100 10113.5 直接线性变化的基本原理和解算方法210011 0010 1010 1101 0001 0100 1011一、直接线性变化的关系式111333222333s s s i i i ()()()0()()()()()()0()()(),,,,s a b c i f s s s s s s s s s s s s a X X b Y Y c Z Z x f a X X b Y Y c Z Z a X X b Y Y c Z Z y f a X X b Y Y c Z Z X Y Z X Y Z -+-+-⎫+=⎪-+-+-⎪⎬-+-+-⎪+=⎪-+-+-⎭中心构像方程:其中:为物点的空间坐标 为光心的空间坐标 ,,(=1,2,3)旋转矩阵 所测x y 像片的主距,像点在摄影坐标系的坐标210011 0010 1010 1101 0001 0100 1011直接线性变化法•直接线性变换(DLT —Direct Linear Transformation )算法是直接建立像点坐标与物点空间坐标关系式的一种算法。
•该算法在机算中,不需要内、外方位元素。
而直接通过像点解算物点。
210011 0010 1010 1101 0001 0100 1011二、线性误差的修正1、线性误差:•底片均匀变形、不均匀变形•畸变差•x ,y 坐标轴不垂直2、线性修正ℓ系数假设主点坐标为(0,0)210011 0010 1010 1101 0001 0100 1011i i 12301231111s 1s 1s 1233333s 3s 3s 2222s 2s 2s 1233i x x y y a X+b Y+c Z (a X +b Y +c Z )f a X+b Y+c Z (a X +b Y +c Z )a X+b Y+c Z (a X +b Y +c Z )f a X x y y y x y x y x y αβαααβββαααβββ∴⎧+⎪⎨=-++⎪⎩+++0像片坐标系的坐标原点为主点设,(=1,2,3)为引入的线性修正系数=x-x ==+则==代入共线方程-++--+333s 3s 3s 1s 1s 1s 2s 2s 2s 33s 3s 3s +b Y+c Z (a X +b Y +c Z )r (a X +b Y +c Z )r (a X +b Y +c Z )r (a X +b Y +c Z )⎧⎪⎪⎨⎪⎪⎩⎧⎪⎨⎪⎩12-=-定义=-=-210011 0010 1010 1101 0001 0100 1011123491011567891011x y x 0101X Y Z X Y X X Y Z X Y X +++⎧=⎪+++⎪⎨+++⎪=⎪+++⎩其中上式为关于,的二元一次方程求解方程式:+y +系数为线性修正系数已知系数和物点坐标可以求解像点坐标210011 0010 1010 1101 0001 0100 1011三、内方位元素的解算11103332220333()()()0()()()()()()0()()()x y s s s x s s s s s s y s s s x y x x xy y y a X X b Y Y c Z Z x x f a X X b Y Y c Z Z a X X b Y Y c Z Z y y f a X X b Y Y c Z Z f f =-=--+-+-⎫-+=⎪-+-+-⎪⎬-+-+-⎪-+=⎪-+-+-⎭主点不在原点的共线方程为:其中,为像片在方向和方向的摄影主距210011 0010 1010 1101 0001 0100 101111110333311110333300a b c r 0a b c r a b c r 0a b c r x 0y 0x y X Y Z x x f X Y Z X Y Z y y f X Y Z x y ⎫-⎪⎪⎬⎪-⎪⎭⎫⎪⎪⎬⎪⎪⎭123491011567491011则上式可以简化为:++++=+++++++=+++合并,简化为下式:L X+L Y+L Z+L +=L X+L Y+L Z +1L X+L Y+L Z+L +=L X+L Y+L Z +1210011 0010 1010 1101 0001 0100 1011x x 33x x 33x x 33x x 333339333a f a xb f b x r rc f c x r f r x r r a f a x b f b x r r c f c x r f r x r r a b c r r r L L 130130121301303423023056230230781011求解系数:(-)(-)L = L =(-)(-)L = L =(-)(-)L = L =(-)(-)L = L == L = L =210011 0010 1010 1101 0001 0100 1011[]{[]}[][]x 31s 1s 1s x 3s 3s 3s 03s 1x 301x 301x 30s 3s s 1x 301x 301x 30s 3s r f r x r (a X +b Y +c Z )f (a X +b Y +c Z )x r a f a x b f b x c f c x r a f a x b f b x c f c x r X Y Z X Y Z ∴-⎡⎤⎢⎥-⎢⎥⎢⎥-⎣⎦-⎡⎤⎢⎥-⎢⎥⎢⎥-⎣⎦13048(-)L =1=---1 =---1同理:L =---210011 0010 1010 1101 0001 0100 1011x 0111s y 0222s 3333s f 0x a b c 1000f y a b c 010r 001a b c 001X Y Z ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦888888888888可建立L的系数矩阵L L L L L L L =L L L L L L --1=---210011 0010 1010 1101 0001 0100 1011391011333i i i 22233131313222222233323s 3s 3s 19210311222x 131313033232223323a b c a b c 1a a b b c c 01(a b c )r (a X +b Y +c Z )f a a b b c c x a b c r x a b c r x L L L L L L L L L L ∴⎧⎪⎨⎪⎩++=∴++⎡⎤⎣⎦00,,之间存在下列关系式:++=++=由矩阵有:++=又1 =(++)-(++) =-(++)=-()()910119101191011222222019210311222059610711x y L L L L L L L L L L L L L L L L L L L L L ++++++∴++++()=-=-210011 0010 1010 1101 0001 0100 1011()()()()()91011910112221231x 301x 301x 3023x 23222222x 123222222x 567x y 1a f a x b f b x c f c x r1f x r f x f x 1f f f L L L L L L L L L L L L L L L ⎡⎤++=⎣⎦⎧++++⎪⎨++++⎪⎩222220220220(-)+(-)+(-) =(+)同理求解:=-+=-+=+2四、直接线性变化的计算过程0011 0010 1010 1101 0001 0100 1011•矩阵L有12个未知系数21•需要已知6个空间待测点的坐标和6对立体像对,即12个像点坐标,才能求解L系数210011 0010 1010 1101 0001 0100 1011[][]xi yi 91011xi i 1i 2i 34i i 9i i 10i i 11i i yi i 5i 6i 78i i 9i i 10i i 11i i 6v v 11v x x x x 1v y y y y L A L X L Y L Z X L Y L Z L L X L Y L Z L A X L Y L Z L L X L Y L Z L A =++⎧++++++⎪⎪⎨⎪++++++⎪⎩第一步:解算系数设在大地坐标系上有个待测点,对应6对立体像对则共有12个关于L的方程,为像点坐标的修正系数令+误差方程:=-+=-+令修正矩阵为:i xiyixiyi xiyi v v v v v v T⎡⎤⎣⎦V =21 0011 0010 1010 1101 0001 0100 1011111111111111111111111111111111116666666666661666666666666666666610000x x x 00001y y y10000x x x 00001y y yBX A Y A Z A A X A Y A Z AX A Y A Z A A X A Y A Z AX A Y A Z A A X A Y A Z AX A Y A Z A A X A Y A Z A ------⎡⎢-----⎢⎢⎢⎢------------⎣=1112610611xyyxLLLLL⎤⎥⎥⎥⎥⎥⎢⎥⎢⎥⎢⎥⎦⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦1166-A-AI=-A-A210011 0010 1010 1101 0001 0100 1011121121111112111121210111212111111112121TTTV B L I BVBB L BI =+⨯⨯⨯⨯=⨯⨯+=⨯⨯⨯⨯⨯210011 0010 1010 1101 0001 0100 1011i i x y x y x y x y 2x y x y v v v v v v v v L L V '''''⎡⎤⎢⎥⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥'⎢⎥⎢⎥⎣⎦⎢⎥'⎢⎥⎣⎦第二步:已知系数,由像点坐标解算物点坐标求解空间物点的坐标为:(X,Y,Z)像机1的L系数为L ,像机的系数为L 立体像对的像点坐标分别为(,)和(,)误差修正系数分别为,和,X 令 S=Y Z210011 0010 1010 1101 0001 0100 101119210311591107111921031159610711(x )(x )(x )(y )(y )(y )(x )(x )(x )(y )(y )(y )L L L L L L L L L L L L N L L L L L L L L L L L L N S ⎡⎤+++⎢⎥⎢⎥⎢⎥+++⎢⎥=⎢⎥''''''⎢⎥'''+++'''⎢⎥⎢⎥''''''''+++⎢⎥⎢⎥'''⎣⎦=+111---A A A111---A A A 111---A A A 111---A A A 矩阵方程为:V 41433141TTQ N NS N Q ⨯⨯⨯⨯+=210011 0010 1010 1101 0001 0100 1011五、关于A值的问题9101133103310333333s 3s 3s3333s 3s 3s 1a rb rc r a X+b Y+c 1a X +b Y +c a X+b Y+c 1a X +b Y +c 1A A L X L Y L Z L L ZA Z ZZ A =+++∴===∴≈ 9值的表达式为:L =-+在实际测量中在机算中210011 0010 1010 1101 0001 0100 1011七、外方位元素的解算()[][][]()[]()[][][]()()()()9101191011910119101191011333333391011122221231x 301x 301x 303312333303030111222222222x222221a b c r 1a b c 2a f a x b f b x c f c x r 1a b c a x b x c x f 3a b c L L L L L L L L L L L L L L L L L L L L L L L L ∴⇒++⎡⎤⎢⎥⇒⎢⎥⎢⎥++++++⎣⎦、外方位角元素的解算11==1又=---=+++同理可求[]()()()()()()()9101191011910115672303030111222222222y 222i i i 1a y b y c y f 123a b c i 123L L L L L L L L L L L L φωκ⎡⎤⎢⎥⎢⎥⎢⎥++++++⎣⎦⇒=+++由、、求方向余弦,,=,,求外方位角元素,如、、。
摄影测量后方交会近景摄影测量DLT直接线性变换代码见介绍
近景摄影测量实习报告班级: 07021班学号: 0062姓名:方毅日期: 2010年12月1日第一部分摄影、像点量测以及DLT 和单像后方空间交会解算1. 实习的目的和意义数码相机摄影:为后续的摄影测量解析处理提供质量合格的数字影像,了解所用数码相机的特点及使用,学习获取数字影像的方法。
像点量测:量测所拍摄的高精度室内三维控制场中控制点的像点坐标,为后续摄影测量解析处理准备计算数据。
直接线性变换(DLT )与单像空间后方交会解算:加深理解近景摄影测量直接线性变换与单像空间后方交会的理论,学习准备数据和调试程序的方法。
2.实习原理 DLT 直接线性变换直接线性变换解法是建立像点坐标仪坐标和相应物点物方空间坐标直接的线性关系的算法。
它的基本关系式如下:1234910115678910110101l X l Y l Z l x l X l Y l Z l X l Y l Z l y l X l Y l Z +++⎧+=⎪+++⎪⎨+++⎪+=⎪+++⎩()展开可得到以i l 为未知数的方程:1234910115678910110000000000l X l Y l Z l xl X xl Y xl Z x l X l Y l Z l yl X yl Y yl Z y +++++++++++=⎧⎨+++++++++++=⎩() 当有n 个控制点时,即可列出2n 个方程式,写为矩阵的形式如下:111111111111111111111211100000000110000001n n n n n n n n n n n nnn nn nn n n X Y Z x X x Y x Z x l X Y Z y X y Y y Z y l X Y Z x X x Y x Z x l X Y Z y X y Y y Z y -⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎣⎦⎢⎥⎢⎥-⎣⎦⎣⎦() 即AX L =。
第三章 解线性代数方程组的直接法(1)
2 2 3 3 2 2 3 3 4 7 7 1 ⇒ 0 3 1 −5 ( A b) = 0 6 8 −4 −2 4 5 −7
2 2 3 3 2 2 3 3 4 7 7 1 ( A b) = → 0 3 1 −5 −2 4 5 − 7 0 6 8 − 4
( i , j = k + 1, L , n )
(4) 当 a kk
(k )
≠ 0( k = 1, 2, ..., n − 1)
时,经过n-1次消元得到 经过n
与原方程等价的上三角方程组: 与原方程等价的上三角方程组:
a
(1) 11
a a
(1) 12 ( 2) 22
ik , k
k
( ) (n+1)=(A|b).
输出: 或失败信息. 输出 近似解 xk=ak,n+1(k=1,2,…,n) 或失败信息
,k
= max ai ,k , i = k , k + 1,L , n
k≤i≤n
则交换第k行和 行和i ≠ 0 ,则交换第 行和 k行;
否则转Step 7 否则转
算法: 列主元消去算法 算法: Gauss列主元消去算法(续) 列主元消去算法( Step 3 for i=k+1,…,n 计算
k
k = 1, 2,L , n − 1
(k ) i ,k
a
(k ) ik , k
= max a
k ≤i≤n
, i = k , k + 1,L , n
再进行消元 消元过程 然后交换矩阵A( k )的第 k 行和 i 行,再进行消元过程
论文-第二章近景摄影测量的理论-2.3直接线性变换解法
2.3直接线性变换解法直接线性变换 (Direct Linear Transformation)解法是建立像点坐标仪坐标和相应物点物方空间坐标之间直接的线性关系的算法。
这里,坐标仪坐标是指坐标仪上坐标的直接读数,是指无需化算到以像主点为原点的坐标仪上的坐标读数。
直接线性变换解法,因无需内方位元素值和外方位元素的初始近似值,故特别适用于非量测相机所摄影像的摄影测量处理。
直接线性变换解法具有两个显著的特点:一是由像空间坐标直接变换到物空间坐标,因此不需要任何内、外方位元素的初值;二是直接使用原始的影像坐标作为观测值,因此可以进行有效的系统误差的补偿。
2.3.1直接线性变换解法的基本关系式直接线性变换解法于1971年提出,现将几何概念清晰且便于深入分析的一种方法介绍如下。
直接线性变换(DLT)解法,原则上也是从共线条件方程式演绎而来的。
按共线 条件方程式:()()()()()()()()()()()()S A S A S A S A S A S A S A S A S A S A S A S A Z Z c Y Y b X X a Z Z c Y Y b X X a f y y y Z Z c Y Y b X X a Z Z c Y Y b X X a fx x x -+-+--+-+--=∆+--+-+--+-+--=∆+-33322203331110 把非量测相机所摄像片安置在某坐标仪上,如图2.1所示,假设上式中的系统误差改正数(,x y ∆∆)暂时仅包含坐标轴不垂直性误差d β和比例尺不一误差ds 引起的线性误差改正数部分。
坐标仪坐标系c xy -是非直角坐标系,其两坐标轴之间的不垂直度为d β。
以像主点o 为原点有两个坐标系,分别是直角坐标系o xy -和非直角坐标系o xy -。
像主点o 在c xy -内的坐标为(00,x y )。
某像点'p 的坐标仪坐标为(,x y ),点'p 在非直角坐标系o xy -中的坐标为(21,'om om ),此坐标受d β和ds 的影响而包含线性误差。
相机检校
2.软件介绍
PhotoModeler Scanner是一套基于影像的数字近景摄影测量软件, 在国外已广泛应用于建筑、考古与医学等领域。该软件包含普 通数码相机的检校模块,能快速实现相机的检校,解算出相机 的内方位元素和光学畸变系数,给近景摄影测量工作带来了方 便。 知道相机的参数(相机成像几何模型的参数),就可以建立数 字影像中像元与被摄物体表面相应的点之间的数学关系。
头主光轴旋转90度,拍摄四幅纵幅像片,为提高精度还可拍摄更多的照片。
2.软件操作过程
打开PhotoModeler Scanner
数码相机的误差由机械误差、电学误差和光学误差组成,机械误差和电学误差 合称为像平面内仿射性畸变差。 机械误差是指光学镜头摄取的影像转化为数字化阵列影像这一步产生的误差,主 要原因是:扫描阵列不平行于光学影像,致使数字化影像相对于光学影像有旋转; 每个阵列元素尺寸不同而产生不均匀变形。它包括像素定位不准、行列不直及相 互不垂直等误差,此外还有CCD不同的像元对相同的光强信号转换得到的灰度值 有差异的像元敏感不均匀性误差。 电学误差(或行抖动误差)是指影像信号经A/D转换时产生的影像几何误差(即 CCD信号转换中的误差)。主要是光电信号转换不完全、信号传递滞后以及CCD驱 动电路电压及频率不稳等因素造成,它主要包括行同步误差、场同步误差和像素 采样误差,这种误差不仅影响像素的几何位置,同时也影响像素的灰度值,即表 现为像点灰度的畸变及像点的移位,在此误差影响下,目标中一条理想的阶跃边 缘,在CCD影像上呈一种抖动状,具体表现在目标中的一条直线在CCD影像上呈非 规则的抖动状。 光学误差主要是指光学畸变误差,是指物镜系统设计、制作和装配误差引起的像 点偏离其理想成像位置的点位误差,主要包括径向畸变差和偏心畸变差两类。一 般情况下,偏心畸变差远比径向畸变差小,仅为径向畸变差的1/5~1/7,对于较 好的物镜系统,偏心畸变差影响就更小。
基于二维直接线性变换
(2.4.9)
(h1 − h7 x0 ) a1 = f λ (h − h x ) b 2 8 0 = 1 f λ
(2.4.10)
(2.4.11)
(2.4.12)
n
将 (2.4.10) 、 (2.4.11) 和 (2.4.12) 的 上 下 两 式 分 别 相 乘 并 相 加 , 顾 及
其中 λ = (a3 X s + b3Ys + c3 Z s ) 。比较(2.4.5)式和(2.4.3)式可知: (2.4.5)
a1 a3 h1 = f λ − λ x0 b b h2 = f 1 − 3 x0 λ λ
(2.4.6)
a2 a3 h4 = f λ − λ y0 b b h5 = f 2 − 3 y0 λ λ
a1b1 + a2 b2 + a3b3 = 0 得:
(h1 − h7 x0 ) ⋅ (h2 − h8 x0 ) + (h4 − h7 y0 ) ⋅ (h5 − h8 y0 ) + h h
f2 f2
则有:
7 8
=0
(2.4.13)
f =
n
− (h1 − h7 x0 ) ⋅ (h2 − h8 x0 ) − (h4 − h7 y0 ) ⋅ (h5 − h8 y0 ) h7 h8
f h3 = x0 − λ (a1 X s + b1Ys + c1Z s ) h = y − f (a X + b Y + c Z ) 0 2 s 2 s 2 s 6 λ λ = (a X + b Y + c Z ) 3 s 3 s 3 s
(2.4.19)
通过上述各式可以利用二维 DLT 获取每幅影像对应的外方位元素初值包括相机的主距 初值等, 在有些情况下也可利用空间后方交会获取更加准确的参数, 进而用于光束法平差整 体求解。
开题报告
[18]夏仁波,刘伟军,赵吉宾,徐金亭.基于圆形标志点的全自动相机标定方法.仪器仪表学报2009(2)
[19]冯文灏.关于近景摄影机检校的几个问题.2000
[20]佟书泉,王东,任忠成,巩维龙.基于2维DLT方法的普通数码相机检校.测绘通报2007
自标定方法是指仅利用摄像机在运动过程中的周围环境及图像之间的对应关系来求取摄像机内参数的方法。从本质上说,自标定方法都只是利用了摄像机内参数存在的约束,这些约束与场景和摄像机的运动无关。自1992年Hartley和Faugeras首次提出摄像机自标定的思想以来,这种方法已经成为计算机视觉领域的研究热点之一。目前,最主要的自标定方法是基于消失点的自标定算法,即找到3个正交方向的消失点,利用三个消失点与像主点的关系解算相机内参数。但这种方法要求场景中存在3组正交的平行线,在实际中难以满足,实用性不强。自标定方法的改进方向是要降低场景的约束条件,简化标定算法,如基于二消失点的相机自标定方法等。
4、读懂市场上成型的基于DLT的相机标定程序
5、编写自确性
三、毕业设计(论文)工作进度安排
根据本次研究的目的和时间要求,进度安排如下:
1.2010年3月上旬至4月初:明确课题目的,查找部分参考资料,并完成开题报告的编写。
2.2010年4月初至4月中旬:学习并掌握基于直接线性变换(DLT)的相机标定的理论知识,搜集成型的基于DLT的相机标定程序,研究读懂程序。
[5]韩秀丽,毋立芳,郭江,杨鹏.基于二消失点的相机标定方法.信号处理2007(8)
[6]张丹,段锦,顾玲嘉,景文博.基于图像的模拟相机标定方法的研究.红外与激光工程2007(6)
dlt算法 python实现
Differential Evolution算法(DE)是一种常用的演化算法,其主要特点是无需梯度信息,并且具有较好的全局寻优能力。
在实际工程中,DE算法被广泛应用于优化问题的求解,尤其在参数优化、函数优化等方面具有较好的效果。
本文将主要介绍DE算法的基本原理以及如何使用Python语言来实现DE算法。
文章将分为以下几个部分进行阐述:一、DE算法的基本原理1.1 DE算法的提出背景1.2 DE算法的基本思想1.3 DE算法的优缺点分析二、DE算法的Python实现2.1 Python环境的准备2.2 DE算法的框架设计2.3 核心代码实现与参数设置2.4 DE算法的收敛性分析三、DE算法的应用实例3.1 DE算法在函数优化中的应用3.2 DE算法在参数优化中的应用3.3 DE算法在实际工程中的应用案例分析四、DE算法的性能优化与改进4.1 DE算法参数调优策略4.2 DE算法的变种及改进4.3 DE算法与其他优化算法的比较研究五、结论5.1 DE算法在工程优化中的实际应用价值5.2 DE算法未来的发展方向和趋势通过以上几个部分的论述,将全面系统地介绍DE算法的原理、Python实现方法、应用实例以及性能优化等内容,从而为读者提供一份较为完备的DE算法使用指南,帮助读者更好地理解和使用DE算法。
谢谢!DE算法的基本原理1.1 DE算法的提出背景Differential Evolution算法(DE)最早由Storn和Price在1997年提出。
DE算法是一种基于种裙的全局优化算法,其灵感来源于自然界中的进化过程。
DE算法的提出是为了解决传统的优化算法在高维复杂优化问题上的局部最优解问题,并且DE算法相对于遗传算法等其他优化算法来说,具有更快的收敛速度和更好的全局搜索能力。
1.2 DE算法的基本思想DE算法主要基于种裙的演化过程来进行全局搜索,其基本思想可以概括为:通过不断地在种裙中进行差分变异、交叉变异和选择操作,不断地优化种裙中的个体,最终找到最优解。
浅析变形监测中的地面摄影测量
2017年19期研究与展望科技创新与应用Technology Innovation and Application浅析变形监测中的地面摄影测量李伟(深圳市工勘岩土集团有限公司,广东深圳518054)摘要:随着摄影测量技术的飞速发展,它逐渐被应用到越来越多的项目上来,其中随着地面摄影测量技术的逐渐发展成熟,它也更多地应用到变形监测方面。
文章主要就地面摄影测量用于变形监测的原理、设备及工序以及影响地面摄影测量精度的主要因素及解决措施进行了分析,指出地面摄影测量在工程的变形监测中已经发挥了很大的作用,但也存在着不足,精度和作业距离受限。
因此,很好地结合地面摄影测量的各种方法对于变形监测来说非常重要。
关键词:变形监测;地面摄影测量;分析中图分类号:TB22文献标志码:A 文章编号:2095-2945(2017)19-0183-02作者简介:李伟(1984-),男,河南省三门峡人,注册测绘师,主要从事工程测量方案编写、项目实施及质量审核工作。
近年来,计算机技术在不断飞速发展中,摄影测量技术已经迈进了数字摄影测量的时代。
“计算机视觉”的工作原理是把摄影像片转换成数字,或使用CCD 相机等具有特殊用途的摄影机直接拍摄物体的“数字影像”,再通过数字影像匹配技术以及数字摄像处理技术取得同名像点的坐标,并获取对应物点的空间坐标。
1地面摄影测量用于变形监测的主要方式及其原理1.1时间基线法时间基线法又称为伪视差法,是指将不同时刻拍的两个像片作为立体像对,对固定设站的同一目标像点的上下以及左右视差进行量测,所得视差与像片比例尺的积就是目标像点的位移。
时间基线法只能对变形体的二维变形进行监测,无法监测目标像点随着摄影机主光轴方向的位移。
如图1所示。
图1时间基线法原理S 为摄影中心,S-XYZ 为物方坐标系,第一期观测时,目标点A 成像于a ,设x ,z 为像点a 在像片坐标系中的坐标,f 为摄影机焦距。
利用简单的几何关系可得出目标点A 的坐标为:(1)式中,Y 为A 点的Y 坐标;f Y =1M为像片的摄影比例尺。
DLT算法
DLT 算法1. DLT 的基本公式由空间射影定理所知:坐标变换时点的齐次坐标的变换是以线性齐次关系表示的,即为:⎪⎪⎭⎪⎪⎬⎫+++=+++=+++=+++=443424141433323131423222122413121111''''x D x C x B x A x x D x C x B x A x x D x C x B x A x x D x C x B x A x (2-1) 如用非齐次坐标来表示射线变换公式,则可用式(2-1)中的第四个式子逐项去除前三个式子,并令''',''',''',,,434241434241x x z x x y x x x x x Z x x Y x x X ======(2-2) 将式(2-2)代入式(2-1),可得:⎪⎪⎪⎭⎪⎪⎪⎬⎫++++++=++++++=++++++=444433334444222244441111'''D Z C Y B X A D Z C Y B X A z D Z C Y B X A D Z C Y B X A y D Z C Y B X A D Z C Y B X A x (2-3) (2-3)式为射影测量中表示三维的射影变换,如若表示二维的射影变换,即点)',','(z y x 满足某一平面方程,设这一平面方程为0'''=+++d cz by ax ,即'z 能由'x 、'y 表示,即(2-3)式中前两式与(2-3)式中三式等价。
当(2-3)式中前两式分子、分母同除以4D ,即有下式成立:⎪⎪⎭⎪⎪⎬⎫++++++=++++++=1'1'111098765111094321Z L Y L X L L Z L Y L X L y Z L Y L X L L Z L Y L X L x (2-4) 式(2-4)即为直接线性变换的基本公式,形式上与由共线条件方程导出的完全一样,但它比惯用的共线条件方程式具有一般的意义。
8-二维直接线性变换DLT
2 2 2
可得: (h
2 2 1 − h7 x0 ) − (h2 − h8 x0 ) + (h4 − h7 y 0 ) − (h5 − h8 y 0 ) + h − h ( 7 8 ) =0 f2 2
获取f并已知x0,y0的情况下可分解外方位元素:
( a1 h1 − h7 x0 ) =− a3 fh7
ØDLT
武汉大学测绘学院·詹总谦·2013年09
DLT的特点及用法
n 三维DLT解法可提供1/5000(相对摄影距离)的测量精度; n 影响3D DLT的因素主要包括:像点坐标量测精度;控制点 的数量、质量和分布;像片数量及交会角; n 二维DLT广泛使用在基于平面控制场的测量领域:室内钣 金件等钣金件测量、相机标定; n DLT一般用于中低精度测量,通常情况下用于获取像片外 方位元素初值,最终使用空间后方交会或者光束法平差获取 严密解;
l3 Z + l 4 l1 X l 2Y + + l Z + 1 l11 Z + 1 l11 Z + 1 x + 11 =0 l X l Y 9 + 10 +1 l11 Z + 1 l11 Z + 1 l5 X l6Y l Z + l8 + + 7 l11 Z + 1 l11 Z + 1 l11 Z + 1 + =0 y l9 X l10Y + +1 l11 Z + 1 l11 Z + 1
实习二 直接线性变换(dlt)解算
实习二直接线性变换(DLT)解算一、目的加深理解近景摄影测量直接线性变换的理论;学习调试数据的方法。
二、直接线性变换解法的原理三、基本用法1.建立原始数据文件,格式为:1)像点坐标类型,摄影带数单片观测为1,立体观测为2;2)各摄影带像片数或像对数3)各像片或像对像点数每张像片都写,如两张像片各有20个点,则写为20,204)坐标仪常数对单片观测,①指仪器的零位置读数或像片上选为坐标系原点的像点坐标Q x,Q y,②坐标轴方向变换系数k x,k y,其值为1或-1;对立体观测,坐标仪常数为Q x,Q y,Q p,Q q, k x,k y,k p,k q5)各像点坐标观测值单片观测片号1点号1, x1, y1点号2, x2, y2点号n, x n, y n片号2点号1, x1, y1点号2, x2, y2点号n, x n, y n立体观测片号1点号1, x1, y1, p1, q1点号2, x2, y2, p2, q2点号n, x n, y n, p n, q n片号2点号1, x1, y1, p1, q1点号2, x2, y2, p2, q2点号n, x n, y n, p n, q n6)是否考虑畸变改正系数标志不考虑给-1考虑给1,其后应写出第二畸变差零点半径7)已知物方点的个数(可多于上述像点个数)8)已知物方点坐标点号1, X1, Y1, Z1点号2, X 2, Y2, Z2点号n, X n, Y n, Z n像点坐标观测值与控制点坐标顺序可不同。
9)本次计算所选控制点个数10)本次计算所选控制点点号。
当已知物方点皆为控制点时,控制点点号可省略。
2.DLT↵3.显示:Please Input The Original Data FileName4.输入:‘原始数据文件名’ ↵注意文件名要加单引号。
5.显示:Please Input The Result Data FileName6.输入:‘结果文件名’ ↵注意文件名要加单引号。
LDLT分解法求解对称线性方程组
LDL T 分解法求解对称线性方程组朱松盛 041002045 南京师范大学一、 LDL T 分解法原理利用矩阵 A 的T LDL 分解来解Ax = b ,的方法称为T LDL 分解法。
当求解方程组的系数矩阵是对称矩阵时,则用T LDL 分解法可以简化程序设计并减少计算量。
当矩阵 A 的各阶顺序主子式不为零时,A 有唯一的 Doolittle 分解 A = LU ,其中⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=-1111121323121nn n n l l l l l l L ,⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=nn n n n u u u u u u u u u u U 333223*********。
此时,当然有01≠=∏=ni iiuA det ,所以矩阵U 的对角线元素0≠ii u ,( , , 2 , 1n i =),将矩阵U 每行依次提出ii u ,则有U D U ~=,其中⎪⎪⎪⎪⎪⎭⎫⎝⎛=nn u u u D2211,⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=---1111111222222311111131112n n n n n n u u u u u u u u u u u u U~因而U LD A ~=,显然这种A 的分解也是唯一的,当A 为对称矩阵时,由A A T =,得()U LD DL U L D U U LD T T T T T T ~~~~===,由分解的唯一性,有L U T =~,即T L U =~。
由此可得,若对称矩阵A 的各阶顺序主子式不为零时,A 可唯一分解为T LDL A =,其中⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=-1111121323121nn n n l l l l l l L ,⎪⎪⎪⎪⎪⎭⎫⎝⎛=n d d d D 21,T L 为L 的转置矩阵。
当A 有T LDL 分解时,利用矩阵运算法则及相等原理易得计算ik l 及k d 的公式为⎪⎪⎩⎪⎪⎨⎧-=-=∑∑-=-=kk m m km im ik ik k m m km kk k dd l l a l d l a d /)(11112 , , , 2 , 1 , , 2 , 1n k k i n k ++== 为减少乘法次数,引入辅助量k ik ik d l u =,则上面公式可写成⎪⎪⎪⎩⎪⎪⎪⎨⎧=-=-=∑∑-=-=k ik ik k m km im ik ik k m kmkm kk k d u l l u a u l u a d / 1111,n k k i n k , , 2 , 1 , , 2 , 1 ++== (1) 当设计程序时,为了减少存储空间,又由于矩阵A 在经过计算后就不需要再使用了,因此可以采用原位存储的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DLT 直接线性变换解法程序介绍一、程序综合介绍:DLT结算程序程序功能介绍:应用6个已知点计算左右片l 系数;然后应用已经求得的l系数求解物方空间坐标系坐标程序名:SuYGDLT程序界面:程序界面有四个按钮,分别为读取文件,左片l系数计算,右片系数计算,物放坐标解算程序界面有四个编辑框,分别用来输出文件信息,左片l系数、右片l系数、以及无妨坐标结果截图如下程序使用介绍:必须先点击导入文件按钮,导入文件方可进行正确的计算,如果未导入文件就点击左片平差或右片平差或无妨坐标解算就会弹出如下对话框:读取数据后点击其它按钮进行其它计算。
程序文件格式:数据文件分为两部分,KnownPoint,UNKnownPoint,分别代表已知点信息和待求点信息当文件读取程序读到“KnownPoint”时开始读取已知点信息,已知点信息格式如下GCP1,1214.0000,1032.0000,1046.5180,1071.6652,9.201742,-9.672384,-2.726064分别代表点名、左片相片X坐标、左片相片y坐标、右片相片x坐标、右片相片y坐标物方坐标X、Y、Z;当文件读取到“END KnownPoint”时结束已知坐标的读取待求点信息类似:文件格式截图如下:程序运行结果与评估:本程序区1-10号点作为已知点计算l近似值11-20号点作为未知点解求其物方三维坐标;程序运行结果与所给参考值相似,应该可以证明其运算是正确的,运行结果截图如下:二、程序编程思想及相关代码程序编程思想及相关函数:本程序设计DLTCalculation类作为l系数结算主程序,其成员变量及成员函数与作用介绍如下:CSuLMatrix LL;//左片L系数矩阵CSuLMatrix RL;//右片L系数矩阵int m_iKnownPointCount;//已知点个数CControlPoint *m_pKnownPoint;//已知点int m_iUnKnownPointCount;//未知点个数CControlPoint *m_pUnKnownPoint;//未知点public:CString LoadData(const CString& strFileName);//读取文件函数int ifLoda;//判断是否导入数据CString Datainfor;//文件信息存储CString *SplitString(CString str,char split, int& iSubStrs); //分割函数void LFormApproL(CSuLMatrix &LL);//计算左片L系数近似值void RFormApproL(CSuLMatrix &RL);//计算右片L系数近似值void FormLErrorEquations(CSuLMatrix LL,CMatrix &LM,CMatrix &LW);//组成左片系数矩阵和常数项矩阵void LAdjust();//左片平差主函数void FormRErrorEquations(CSuLMatrix RL,CMatrix &RM,CMatrix &RW);//组成右片系数矩阵和常数项矩阵void RAdjust();//右片平差主函数void Output(const CString& strFileName);//输出结果主程序void OutMatrixToFile(const CMatrix& mat,CStdioFile& SF);//输出矩阵总程序另外设计类qianfangjiaohui作为结算物放坐标解算主程序其成员变量与成员函数及其作用介绍如下:void FormApproCoor( DLTCalculation &R);//计算无妨坐标近似值void FormErrorEquations(DLTCalculation &R,CMatrix &N,CMatrix &Q);//解求系数矩阵void Adjust(DLTCalculation &R);//平差计算物放坐标程序详细代码粘贴如下:以下为类DLTCalculation.cpp文件详细内容:#include"StdAfx.h"#include"DLTCalculation.h"#include<locale>#include"SuLMatrix.h"DLTCalculation::DLTCalculation(void){ifLoda=0;}DLTCalculation::~DLTCalculation(void){}CString* DLTCalculation::SplitString(CString str,char split, int& iSubStrs){int iPos = 0; //分割符位置int iNums = 0; //分割符的总数CString strTemp = str;CString strRight;//先计算子字符串的数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串本身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串的数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength());strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}CString DLTCalculation::LoadData(const CString& strFileName){ifLoda=1;CString strputdata;//用于保存观测文件的字符串CStdioFile sf;//创建文件对象setlocale(LC_ALL,""); //设置语言环境if(!sf.Open(strFileName, CFile::modeRead)) return _T("文件打开失败");;//以读的形式打来文件,如果打开失败则返回CString strLine;int n;CString *strTmp=NULL;do{sf.ReadString (strLine);strputdata+=strLine;strputdata+=_T("\r\n");}while(strLine!="KnownPoint");Datainfor=strputdata;if(strLine=="KnownPoint")//读取已知数据while(strLine!=_T("END KnownPoint")){sf.ReadString (strLine);strputdata+=strLine;strputdata+=_T("\r\n");if(strLine!=_T("END KnownPoint")){strTmp = SplitString(strLine, ',',n);}elsebreak;if(strTmp[0]=="KnownPointCount"){m_iKnownPointCount=_ttoi(strTmp[1]);m_pKnownPoint=new CControlPoint[m_iKnownPointCount];if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}for(int i=0;i<m_iKnownPointCount;i++){sf.ReadString (strLine);strputdata+=strLine;strputdata+=_T("\r\n");strTmp = SplitString(strLine, ',',n);m_pKnownPoint[i].strName =strTmp[0];m_pKnownPoint[i].Lx =_tstof(strTmp[1]);m_pKnownPoint[i].Ly =_tstof(strTmp[2]);m_pKnownPoint[i].Rx =_tstof(strTmp[3]);m_pKnownPoint[i].Ry =_tstof(strTmp[4]);m_pKnownPoint[i].X =_tstof(strTmp[5]);m_pKnownPoint[i].Y =_tstof(strTmp[6]);m_pKnownPoint[i].Z =_tstof(strTmp[7]);if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}}}}sf.ReadString (strLine);strputdata+=strLine;strputdata+=_T("\r\n");if(strLine=="UnknownPoint")//读取未知数据{while(strLine!=_T("END UnknownPoint")){sf.ReadString (strLine);strputdata+=strLine;strputdata+=_T("\r\n");if(strLine!=_T("END UnknownPoint")){strTmp = SplitString(strLine, ',',n);}elsebreak;if(strTmp[0]=="UnknownPointCount"){m_iUnKnownPointCount=_ttoi(strTmp[1]);m_pUnKnownPoint=new CControlPoint[m_iUnKnownPointCount];if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}for(int i=0;i<m_iUnKnownPointCount;i++){sf.ReadString (strLine);strputdata+=strLine;strputdata+=_T("\r\n");strTmp = SplitString(strLine, ',',n);m_pUnKnownPoint[i].strName =strTmp[0];m_pUnKnownPoint[i].Lx =_tstof(strTmp[1]);m_pUnKnownPoint[i].Ly =_tstof(strTmp[2]);m_pUnKnownPoint[i].Rx =_tstof(strTmp[3]);m_pUnKnownPoint[i].Ry =_tstof(strTmp[4]);if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}}}}}sf.Close ();return strputdata;}void DLTCalculation::LFormApproL(CSuLMatrix &LL)//计算左片L系数近似值{CMatrix LX(11,1);CMatrix LB(11,11);CMatrix Lf(11,1);for(int i=0;i<5;i++){LB(2*i,0) = LB(2*i+1,4) = m_pKnownPoint[i].X*1000;LB(2*i,1) = LB(2*i+1,5) = m_pKnownPoint[i].Y*1000;LB(2*i,2) = LB(2*i+1,6) = m_pKnownPoint[i].Z*1000;LB(2*i,3) = LB(2*i+1,7) = 1;LB(2*i,4) = LB(2*i,5) = LB(2*i,6) = LB(2*i,7) = LB(2*i+1,0) = LB(2*i+1,1) = LB(2*i+1,2) = LB(2*i+1,3) = 0;LB(2*i,8) = m_pKnownPoint[i].Lx * m_pKnownPoint[i].X*1000;LB(2*i,9) = m_pKnownPoint[i].Lx * m_pKnownPoint[i].Y*1000;LB(2*i,10) = m_pKnownPoint[i].Lx * m_pKnownPoint[i].Z*1000;LB(2*i+1,8) = m_pKnownPoint[i].Ly * m_pKnownPoint[i].X*1000;LB(2*i+1,9) = m_pKnownPoint[i].Ly * m_pKnownPoint[i].Y*1000;LB(2*i+1,10) = m_pKnownPoint[i].Ly * m_pKnownPoint[i].Z*1000;}LB(10,0) = m_pKnownPoint[5].X*1000;LB(10,1) = m_pKnownPoint[5].Y*1000;LB(10,2) = m_pKnownPoint[5].Z*1000;LB(10,3) = 1;LB(10,4) = LB(10,5) = LB(10,6) = LB(10,7) = 0;LB(10,8) = m_pKnownPoint[5].Lx * m_pKnownPoint[5].X*1000;LB(10,9) = m_pKnownPoint[5].Lx * m_pKnownPoint[5].Y*1000;LB(10,10) = m_pKnownPoint[5].Lx * m_pKnownPoint[5].Z*1000;for(int i=0;i<5;i++){Lf(2*i,0) = m_pKnownPoint[i].Lx;Lf(2*i+1,0) = m_pKnownPoint[i].Ly;}Lf(10,0) = m_pKnownPoint[5].Lx;LX = (-1)*(LB.Inv())*Lf;LL.l1 = LX(0,0);LL.l2 = LX(1,0);LL.l3 = LX(2,0);LL.l4 = LX(3,0);LL.l5 = LX(4,0);LL.l6 = LX(5,0);LL.l7 = LX(6,0);LL.l8 = LX(7,0);LL.l9 = LX(8,0);LL.l10 = LX(9,0);LL.l11 = LX(10,0);}void DLTCalculation::RFormApproL(CSuLMatrix &RL)//计算右片L系数近似值{CMatrix RX(11,1);CMatrix RB(11,11);CMatrix Rf(11,1);for(int i=0;i<5;i++){RB(2*i,0) = RB(2*i+1,4) = m_pKnownPoint[i].X*1000;RB(2*i,1) = RB(2*i+1,5) = m_pKnownPoint[i].Y*1000;RB(2*i,2) = RB(2*i+1,6) = m_pKnownPoint[i].Z*1000;RB(2*i,3) = RB(2*i+1,7) = 1;RB(2*i,4) = RB(2*i,5) = RB(2*i,6) = RB(2*i,7) = RB(2*i,7) = RB(2*i+1,0) = RB(2*i+1,1) = RB(2*i+1,2) = RB(2*i+1,3) = 0;RB(2*i,8) = m_pKnownPoint[i].Rx * m_pKnownPoint[i].X*1000;RB(2*i,9) = m_pKnownPoint[i].Rx * m_pKnownPoint[i].Y*1000;RB(2*i,10) = m_pKnownPoint[i].Rx * m_pKnownPoint[i].Z*1000;RB(2*i+1,8) = m_pKnownPoint[i].Ry * m_pKnownPoint[i].X*1000;RB(2*i+1,9) = m_pKnownPoint[i].Ry * m_pKnownPoint[i].Y*1000;RB(2*i+1,10) = m_pKnownPoint[i].Ry * m_pKnownPoint[i].Z*1000;}RB(10,0) = m_pKnownPoint[5].X*1000;RB(10,1) = m_pKnownPoint[5].Y*1000;RB(10,2) = m_pKnownPoint[5].Z*1000;RB(10,3) = 1;RB(10,4) = RB(10,5) = RB(10,6) = RB(10,7) = 0;RB(10,8) = m_pKnownPoint[5].Rx * m_pKnownPoint[5].X*1000;RB(10,9) = m_pKnownPoint[5].Rx * m_pKnownPoint[5].Y*1000;RB(10,10) = m_pKnownPoint[5].Rx * m_pKnownPoint[5].Z*1000;for(int i=0;i<5;i++){Rf(2*i,0) = m_pKnownPoint[i].Rx;Rf(2*i+1,0) = m_pKnownPoint[i].Ry;}Rf(10,0) = m_pKnownPoint[5].Rx;RX = (-1)*(RB.Inv())*Rf;RL.l1 = RX(0,0);RL.l2 = RX(1,0);RL.l3 = RX(2,0);RL.l4 = RX(3,0);RL.l5 = RX(4,0);RL.l6 = RX(5,0);RL.l7 = RX(6,0);RL.l8 = RX(7,0);RL.l9 = RX(8,0);RL.l10 = RX(9,0);RL.l11 = RX(10,0);}void DLTCalculation::FormLErrorEquations(CSuLMatrix LL,CMatrix &LM,CMatrix &LW)//组成左片系数矩阵和常数项矩阵{LM.SetSize(2*m_iUnKnownPointCount,12);LW.SetSize(2*m_iUnKnownPointCount,1);//LFormApproL(LL);double A;double x0,y0;double r;for(int i=0;i<m_iKnownPointCount;i++){A = LL.l9 * m_pKnownPoint[i].X * 1000 + LL.l10 * m_pKnownPoint[i].Y * 1000 + LL.l1 *m_pKnownPoint[i].Z * 1000 + 1;x0 = (-1)*(LL.l1 * LL.l9 + LL.l2 * LL.l10 + LL.l3 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);y0 = (-1)*(LL.l5 * LL.l9 + LL.l6 * LL.l10 + LL.l7 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);r = sqrt((m_pKnownPoint[i].Lx-x0)*(m_pKnownPoint[i].Lx-x0) +(m_pKnownPoint[i].Ly-y0)*(m_pKnownPoint[i].Ly-y0));LM(2*i,0) = LM(2*i+1,4) = (-1)*m_pKnownPoint[i].X * 1000 /A;LM(2*i,1) = LM(2*i+1,5) = (-1)*m_pKnownPoint[i].Y * 1000 /A;LM(2*i,2) = LM(2*i+1,6) = (-1)*m_pKnownPoint[i].Z * 1000 /A;LM(2*i,3) = LM(2*i+1,7) = (-1)*1/A;LM(2*i,4) = LM(2*i,5) = LM(2*i,6) = LM(2*i,7) = LM(2*i+1,0) = LM(2*i+1,1) = LM(2*i+1,2) = LM(2*i+1,3) = 0;LM(2*i,8) = (-1)*m_pKnownPoint[i].Lx * m_pKnownPoint[i].X* 1000 /A;LM(2*i,9) = (-1)*m_pKnownPoint[i].Lx * m_pKnownPoint[i].Y* 1000 /A;LM(2*i,10) = (-1)*m_pKnownPoint[i].Lx * m_pKnownPoint[i].Z* 1000 /A;LM(2*i,11) = (-1)*(m_pKnownPoint[i].Lx - x0) * r * r;LM(2*i+1,8) = (-1)*m_pKnownPoint[i].Ly * m_pKnownPoint[i].X* 1000 /A;LM(2*i+1,9) = (-1)*m_pKnownPoint[i].Ly * m_pKnownPoint[i].Y* 1000 /A;LM(2*i+1,10) = (-1)*m_pKnownPoint[i].Ly * m_pKnownPoint[i].Z* 1000 /A;LM(2*i+1,11) = (-1)*(m_pKnownPoint[i].Ly - y0) * r * r;LW(2*i,0) = (-1)*m_pKnownPoint[i].Lx/A;LW(2*i+1,0) = (-1)*m_pKnownPoint[i].Ly/A;}}void DLTCalculation::OutMatrixToFile(const CMatrix& mat,CStdioFile& SF) {CString strLine,strTmp;for(int i=0;i<mat.Row();i++){strLine.Empty();for(int j=0;j<mat.Col();j++){strTmp.Format(_T("%.4f "),mat(i,j));strLine=strLine+strTmp;}SF.WriteString(strLine+_T("\r\n"));}}void DLTCalculation::LAdjust()//左片平差主函数{CMatrix LM(2*m_iUnKnownPointCount,12);CMatrix LW(2*m_iUnKnownPointCount,1);CMatrix LNbb(12,12);CMatrix LNvv(12,1);CMatrix LV(12,1);int Ln = 0;CString strputdata;double x0,y0;double A,B,C;double fx;double x00,y00;double A0,B0,C0;double fx0;double dfx;LFormApproL(LL);x00 = (-1)*(LL.l1 * LL.l9 + LL.l2 * LL.l10 + LL.l3 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);y00 = (-1)*(LL.l5 * LL.l9 + LL.l6 * LL.l10 + LL.l7 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);A0 = (LL.l1 * LL.l1 + LL.l2 * LL.l2 + LL.l3 * LL.l3)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 *LL.l11)-x00*x00;B0 = (LL.l5 * LL.l5 + LL.l6 * LL.l6 + LL.l7 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 *LL.l11)-y00*y00;C0 = (LL.l1 * LL.l5 + LL.l2 * LL.l6 + LL.l3 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 *LL.l11)-x00*y00;fx0 = sqrt((A0*B0-C0*C0)/B0);/*do{FormLErrorEquations(LL,LM,LW);LNbb=(~LM)*LM;LNvv=(~LM)*LW;LV=(LNbb.Inv())*LNvv;LL.l1=LV(0,0);LL.l2=LV(1,0);LL.l3=LV(2,0);LL.l4=LV(3,0);LL.l5=LV(4,0);LL.l6=LV(5,0);LL.l7=LV(6,0);LL.l8=LV(7,0);LL.l9=LV(8,0);LL.l10=LV(9,0);LL.l11=LV(10,0);x0 = (-1)*(LL.l1 * LL.l9 + LL.l2 * LL.l10 + LL.l3 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);y0 = (-1)*(LL.l5 * LL.l9 + LL.l6 * LL.l10 + LL.l7 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);A = (LL.l1 * LL.l1 + LL.l2 * LL.l2 + LL.l3 * LL.l3)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-x0*x0;B = (LL.l5 * LL.l5 + LL.l6 * LL.l6 + LL.l7 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-y0*y0;C = (LL.l1 * LL.l5 + LL.l2 * LL.l6 + LL.l3 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-x0*y0;fx = sqrt((A*B-C*C)/B);dfx = fx - fx0;fx0 = fx;Ln++;}while(fabs(dfx)>0.01);*/}void DLTCalculation::Output(const CString& strFileName){CStdioFile SF;CString strLine;setlocale(LC_ALL,"");if(!SF.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;//开始写数据SF.WriteString(_T("结果输出:\n"));SF.WriteString(_T("---------空间后方交汇----------\n"));CMatrix LM(2*m_iKnownPointCount,12);CMatrix LW(2*m_iKnownPointCount,1);CMatrix LNbb(12,12);CMatrix LNvv(12,1);CMatrix LV(12,1);int Ln = 0;CString strputdata;double x0,y0;double A,B,C;double fx;double x00,y00;double A0,B0,C0;double fx0;double dfx;LFormApproL(LL);x00 = (-1)*(LL.l1 * LL.l9 + LL.l2 * LL.l10 + LL.l3 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);y00 = (-1)*(LL.l5 * LL.l9 + LL.l6 * LL.l10 + LL.l7 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);A0 = (LL.l1 * LL.l1 + LL.l2 * LL.l2 + LL.l3 * LL.l3)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 *LL.l11)-x00*x00;B0 = (LL.l5 * LL.l5 + LL.l6 * LL.l6 + LL.l7 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 *LL.l11)-y00*y00;C0 = (LL.l1 * LL.l5 + LL.l2 * LL.l6 + LL.l3 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 *LL.l11)-x00*y00;fx0 = sqrt((A0*B0-C0*C0)/B0);/*do{*/FormLErrorEquations(LL,LM,LW);LNbb=(~LM)*LM;LNvv=(~LM)*LW;OutMatrixToFile(LM,SF);/*LV=LNbb.Inv();*//*LV=(LNbb.Inv())*LNvv;*//*LL.l1+=LV(0,0);LL.l2+=LV(1,0);LL.l3+=LV(2,0);LL.l4+=LV(3,0);LL.l5+=LV(4,0);LL.l6+=LV(5,0);LL.l7+=LV(6,0);LL.l8+=LV(7,0);LL.l9+=LV(8,0);LL.l10+=LV(9,0);LL.l11+=LV(10,0);x0 = (-1)*(LL.l1 * LL.l9 + LL.l2 * LL.l10 + LL.l3 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);y0 = (-1)*(LL.l5 * LL.l9 + LL.l6 * LL.l10 + LL.l7 * LL.l11)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11);A = (LL.l1 * LL.l1 + LL.l2 * LL.l2 + LL.l3 * LL.l3)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-x0*x0;B = (LL.l5 * LL.l5 + LL.l6 * LL.l6 + LL.l7 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-y0*y0;C = (LL.l1 * LL.l5 + LL.l2 * LL.l6 + LL.l3 * LL.l7)/(LL.l9 * LL.l9 + LL.l10 * LL.l10 + LL.l11 * LL.l11)-x0*y0;fx = sqrt((A*B-C*C)/B);dfx = fx - fx0;fx0 = fx;Ln++;*/////}while(fabs(dfx)>0.01);CString putdata;putdata.Format(_T("%s\r\n"),_T("左片结果"));strputdata+=putdata;putdata.Format(_T("%s\r\n"),_T("L系数为:"));strputdata+=putdata;putdata.Format(_T("%s%.5f\r\n%s%.5f\r\n%s%.5f\r\n%s%.5f\r\n%s%.5f\r\n%s%.5f\r\n%s%.5f\r\n%s%.5f\r \n%s%.5f\r\n%s%.5f\r\n%s%.5f\r\n"),_T("l1 = "),LL.l1,_T("l2 = "),LL.l2,_T("l3 = "),LL.l3,_T("l4 = "),LL.l4,_T("l5 = "),LL.l5,_T("l6 = "),LL.l6,_T("l7 = "),LL.l7,_T("l8 = "),LL.l8,_T("l9 = "),LL.l9,_T("l10 = "),LL.l10,_T("l11 = "),LL.l11);strputdata+=putdata;SF.WriteString(strputdata);//putdata.Format(_T("%s%d\r\n"),_T("迭代次数为:"),Ln);///*strputdata+=putdata;*/}void DLTCalculation::RAdjust()//右片平差主函数{CMatrix RM(2*m_iKnownPointCount,12);CMatrix RW(2*m_iKnownPointCount,1);CMatrix RNbb(12,12);CMatrix RNvv(12,1);CMatrix RV(12,1);int Rn = 0;CString strputdata;double x0,y0;double A,B,C;double fx;double x00,y00;double A0,B0,C0;double fx0;double dfx;RFormApproL(RL);//x00 = (-1)*(RL.l1 * RL.l9 + RL.l2 * RL.l10 + RL.l3 * RL.l11)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11);//y00 = (-1)*(RL.l5 * RL.l9 + RL.l6 * RL.l10 + RL.l7 * RL.l11)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11);//A0 = (RL.l1 * RL.l1 + RL.l2 * RL.l2 + RL.l3 * RL.l3)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-x00*x00;//B0 = (RL.l5 * RL.l5 + RL.l6 * RL.l6 + RL.l7 * RL.l7)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-y00*y00;//C0 = (RL.l1 * RL.l5 + RL.l2 * RL.l6 + RL.l3 * RL.l7)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-x00*y00;//fx0 = sqrt((A0*B0-C0*C0)/B0);///*do*///{// FormRErrorEquations(RL,RM,RW);// RNbb = (~RM)*RM;// RNvv = (~RM)*RW;///* RV = (RNbb.Inv())*RNvv;*/// //RL.l1+=RV(0,0);RL.l2+=RV(1,0);RL.l3+=RV(2,0);RL.l4+=RV(3,0);// //RL.l5+=RV(4,0);RL.l6+=RV(5,0);RL.l7+=RV(6,0);RL.l8+=RV(7,0);// //RL.l9+=RV(8,0);RL.l10+=RV(9,0);RL.l11+=RV(10,0);x0 = (-1)*(RL.l1 * RL.l9 + RL.l2 * RL.l10 + RL.l3 * RL.l11)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11);y0 = (-1)*(RL.l5 * RL.l9 + RL.l6 * RL.l10 + RL.l7 * RL.l11)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11);A = (RL.l1 * RL.l1 + RL.l2 * RL.l2 + RL.l3 * RL.l3)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-x0*x0;B = (RL.l5 * RL.l5 + RL.l6 * RL.l6 + RL.l7 * RL.l7)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-y0*y0;C = (RL.l1 * RL.l5 + RL.l2 * RL.l6 + RL.l3 * RL.l7)/(RL.l9 * RL.l9 + RL.l10 * RL.l10 + RL.l11 * RL.l11)-x0*y0;/* fx = sqrt((A*B-C*C)/B);dfx = fx - fx0;fx0 = fx;Rn++;*///}/*while(abs(dfx)>0.01);*///}类qianfangjiaohui 的cpp文件代码粘贴如下:#include"StdAfx.h"#include"qianfangjiaohui.h"qianfangjiaohui::qianfangjiaohui(void){}qianfangjiaohui::~qianfangjiaohui(void){}void qianfangjiaohui::FormApproCoor(DLTCalculation &R){CMatrix A(3,3);CMatrix f(3,1);CMatrix X(3,1);for(int i=0;i<R.m_iUnKnownPointCount;i++){A(0,0) = R.LL.l1 + R.m_pUnKnownPoint[i].Lx * R.LL.l9;A(0,1) = R.LL.l2 + R.m_pUnKnownPoint[i].Lx * R.LL.l10;A(0,2) = R.LL.l3 + R.m_pUnKnownPoint[i].Lx * R.LL.l11;A(1,0) = R.LL.l5 + R.m_pUnKnownPoint[i].Ly * R.LL.l9;A(1,1) = R.LL.l6 + R.m_pUnKnownPoint[i].Ly * R.LL.l10;A(1,2) = R.LL.l7 + R.m_pUnKnownPoint[i].Ly * R.LL.l11;A(2,0) = R.RL.l1 + R.m_pUnKnownPoint[i].Rx * R.RL.l9;A(2,1) = R.RL.l2 + R.m_pUnKnownPoint[i].Rx * R.RL.l10;A(2,2) = R.RL.l3 + R.m_pUnKnownPoint[i].Rx * R.RL.l11;f(0,0) = R.LL.l4 + R.m_pUnKnownPoint[i].Lx;f(1,0) = R.LL.l8 + R.m_pUnKnownPoint[i].Ly;f(2,0) = R.RL.l4 + R.m_pUnKnownPoint[i].Rx;X = (-1)*(A.Inv())*f;R.m_pUnKnownPoint[i].X = X(0,0)/1000;R.m_pUnKnownPoint[i].Y = X(1,0)/1000;R.m_pUnKnownPoint[i].Z = X(2,0)/1000;}}void qianfangjiaohui::FormErrorEquations(DLTCalculation &R,CMatrix &N,CMatrix &Q){N.SetSize(4,3);Q.SetSize(4,1);double LA,RA;for(int i=0;i<R.m_iUnKnownPointCount;i++){LA=R.LL.l9*R.m_pUnKnownPoint[i].X+R.LL.l10*R.m_pUnKnownPoint[i].Y+R.LL.l11*R.m_pUnKnown Point[i].Z+1;RA=R.RL.l9*R.m_pUnKnownPoint[i].X+R.RL.l10*R.m_pUnKnownPoint[i].Y+R.RL.l11*R.m_pUnKnow nPoint[i].Z+1;N(0,0) = (-1) * (R.LL.l1 + R.LL.l9 * R.m_pUnKnownPoint[i].Lx) / LA;N(0,1) = (-1) * (R.LL.l2 + R.LL.l10 * R.m_pUnKnownPoint[i].Lx) / LA;N(0,2) = (-1) * (R.LL.l3 + R.LL.l11 * R.m_pUnKnownPoint[i].Lx) / LA;N(1,0) = (-1) * (R.LL.l5 + R.LL.l9 * R.m_pUnKnownPoint[i].Ly) / LA;N(1,1) = (-1) * (R.LL.l6 + R.LL.l10 * R.m_pUnKnownPoint[i].Ly) / LA;N(1,2) = (-1) * (R.LL.l7 + R.LL.l11 * R.m_pUnKnownPoint[i].Ly) / LA;N(2,0) = (-1) * (R.RL.l1 + R.RL.l9 * R.m_pUnKnownPoint[i].Rx) / RA;N(2,1) = (-1) * (R.RL.l2 + R.RL.l10 * R.m_pUnKnownPoint[i].Rx) / RA;N(2,2) = (-1) * (R.RL.l3 + R.RL.l11 * R.m_pUnKnownPoint[i].Rx) / RA;N(3,0) = (-1) * (R.RL.l5 + R.RL.l9 * R.m_pUnKnownPoint[i].Ry) / RA;N(3,1) = (-1) * (R.RL.l6 + R.RL.l10 * R.m_pUnKnownPoint[i].Ry) / RA;N(3,2) = (-1) * (R.RL.l7 + R.RL.l11 * R.m_pUnKnownPoint[i].Ry) / RA;Q(0,0) = (-1) * (R.LL.l4 + R.m_pUnKnownPoint[i].Lx);Q(1,0) = (-1) * (R.LL.l8 + R.m_pUnKnownPoint[i].Ly);Q(2,0) = (-1) * (R.RL.l4 + R.m_pUnKnownPoint[i].Rx);Q(3,0) = (-1) * (R.RL.l8 + R.m_pUnKnownPoint[i].Ry);}}void qianfangjiaohui::Adjust(DLTCalculation &R){double d1,d2,d3;double m;CMatrix N(4,3);CMatrix Q(4,1);CMatrix Nbb(3,3);CMatrix Nvv(3,1);CMatrix S(3,1);int n=0;FormApproCoor(R);for(int i=0;i<R.m_iUnKnownPointCount;i++){/* do*/{/*FormErrorEquations(R,N,Q);Nbb=(~N)*N;Nvv=(~N)*Q;S=(-1)*(Nbb.Inv())*Nvv;m=S(0,0);d1=S(0,0)-R.m_pUnKnownPoint[i].X;d2=S(1,0)-R.m_pUnKnownPoint[i].Y;d3=S(2,0)-R.m_pUnKnownPoint[i].Z;R.m_pUnKnownPoint[i].X=S(0,0);R.m_pUnKnownPoint[i].Y=S(1,0);R.m_pUnKnownPoint[i].Z=S(2,0);n++;*/}/*while(fabs(d1)>1||fabs(d2)>1||fabs(d3)>1);*/}}实验所需txt 文件粘贴如下:SuYongGang 010*******2015 05 01KnownPointKnownPointCount,10GCP1,1214.0000,1032.0000,1046.5180,1071.6652,9.201742,-9.672384,-2.726064 GCP2,1378.0000,508.0000,1167.8218,541.4734,8.653967,-8.226455,-5.483531 GCP3,605.0000,1527.0000,391.3034,1573.4119,6.175121,-11.003152,0.227490 GCP4,1468.0000,361.0000,1262.5994,388.2626,9.004163,-7.857839,-6.448011 GCP5,940.0000,1264.0000,719.0428,1310.4186,7.206690,-9.863228,-1.122442 GCP6,1204.0000,563.0000,990.1780,606.6536,7.986264,-8.928340,-5.054990 GCP7,554.0000,1158.0000,348.4338,1217.2070,5.888988,-11.267342,-1.584110 GCP8,1972.0000,1455.0000,1781.7030,1481.7072,10.951923,-5.749235,-0.276650 GCP9,1013.0000,739.0000,797.4695,790.9252,7.321597,-9.658292,-3.954598 GCP10,2814.0000,1057.0000,2745.6122,1035.4548,14.760180,-1.714839,-2.804178 END KnownPointUnknownPointUnknownPointCount,10ID,Lx,Ly,Lz,Rx,Ry,Rz1,1411.0000,319.0000,1209.0579,350.27772,1495.0000,297.0000,1296.0357,322.26193,1348.0000,475.0000,1140.2866,510.61094,2500.0000,717.0000,2380.9077,688.05625,342.0000,442.0000,165.1718,540.67196,2217.0000,954.0000,2059.9866,951.8440 7,1356.0000,578.0000,1147.8519,612.7434 8,1398.0000,574.0000,1190.8740,606.4662 9,1234.0000,1032.0000,1066.8420,1070.8535 10,1481.0000,577.0000, 1276.1857,604.2876 END UnknownPoint。