获奖论文数码相机定位Word格式.docx
《获奖论文数码相机定位Word格式.docx》由会员分享,可在线阅读,更多相关《获奖论文数码相机定位Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
786;
(3)设计一种方法检验你们的模型,并对方法的精度和稳定性进行讨论;
建立用此靶标给出两部固定相机相对位置的数学模型和方法。
二、模型假设
假设:
1.数码相机成像原理符合小孔成像原理,不存在凸镜产生的图像形变。
2.原平面上的直线在像平面上的投影依然是直线。
3.在原平面上确定的两直线的交点在像平面上对应两直线的交点位置不变。
4.已知在原平面投影图形的边界线坐标。
5.两部照相机的光轴平行。
6.假设参考坐标系如下:
O点坐标(0,0,0)O’(0,0-1577)XOY平面平行像平面
三、符号说明
ai——以此为A’C’D’的x轴坐标分量
bi——以此为A’C’D’的y轴坐标分量
xi——以此为ACD的比例未知数
A’B’C’D’E’分别为原图中ABCDE在像平面上的投影点
ABCDE分别为实际所在平面中的点。
P1
(1),P1
(2)为点P1的x轴分量和y轴分量。
R1
(1),R1
(2)为点R1的x轴分量和y轴分量。
四、模型的建立与求解
模型分析:
模型所要做的是求出标靶平面上的特殊点的位置,进而推出两部相机之间的相对位置。
在整个模型中,由于是小孔成像原理,则空间中任意点与像平面中投影的连线必定过焦点,又因为焦点坐标(0,0,0)即为原点,由空间几何得知这样的直线上的点的坐标对应成比,因此通过已知的像平面上的点,则此投影点对应的空间中的实际坐标是关于一个未知数的函数,而我们知道3个已知的点便可以确定一个平面,那么未知的标靶平面是一个有3个未知数的函数,那么通过3个点之间的关系,解出3个点的实际未知后,标靶平面的方程便可以确定。
那么相机相对与标靶的位置就可以知道,那如果又多部相机,并且知道每部相机相对标靶的位置,那么相机之间的关系便可以简单求出。
在这些算法之前所要求的是标靶上特殊点的投影位置,由于图像关于原点投影出现远大近小,比例不能保持,但是由于直线的投影是直线,两条直线的交点只有一个,那么原平面中直线产生的交点,对应的直线的投影产生的交点也是一一对应的。
那么通过图形在靶标示意图的四周作圆的外切线,再在圆的内部作圆的内切线,这样圆的四个切点连线的交点就是圆的圆心
问题一分析与求解:
通过MATLIB载入图片后,求出图形的边界点
在任意两个图形的边界点数组weizhi1[];
weizhi2[]
在weizhi1[]选取第一个元素点R1,weizhi2[]中选取元素点R2所得的直线方程
将weizhi1[]weizhi2[]中的所有点带入方程如果
则为右或上切线
为左或下切线,根据上图选择所需要的切点如下:
以下是在图片平面上原点在左上顶点,横轴为Y,纵轴为X得到的坐标
A’与外包线的切点为依次为(149,331)(195,364)(230,315)(183,282)
C’与外包线的切点为依次为(176,652)(219,675)(251,634)(211,604)
D’与外包线的切点为依次为(471,597)(560,616)(535,584)(502,549)
E’与外包线的切点为依次为(467,295)(505,323)(537,282)(501,246)
平面直线方程:
P1,P2为两个已知点的坐标数组。
那么连列A’点的两个点得到一条直线。
另两点得到另一条直线,如果取得的点在A’的范围内得到的就是A’的圆心
取P1=(195,364)P2=(183,282)
得到方程1:
再取(149,331)(230,315)
得到方程2:
由方程1,方程2得:
A’的圆心得(189,323)
同理得到以下圆的圆心。
C’的圆心得(215,643)
D’的圆心得(497,289)
E’的圆心得(505,591)
通过转换后A’C’D’E’在世界坐标中的坐标为:
A’的圆心(195,189,-1577)
C’的圆心(169,-131,-1577)
D’的圆心(-113,223,-1577)
E’的圆心(-121,79,-1577)
问题3分析与求解:
由于计算机图片存储的像素的集合,因此将真实的图像离散化了,那么计算中必定会存在误差,因此建立以下模型检验数据的可靠性。
根据投影中直线对应直线,交点位置不变的性质。
那么有相同的交点的2组直线,他们在投影平面中的交点也是唯一确定的
那么以点C为对象,检验数据:
已知:
C’的圆心(169,-131,-1577),
以此求出切C’的切线所交的4个交点:
取P1=(219,675)P2=(506,616)
再取(176,652)(149,331)
交点(179,683)
同理得到可得另三个交点。
(248,612)
(173,616)
(253,664)
4个交点形成的四边形的对角线的交点是也是圆C的圆心。
取P1=(179,683)P2=(248,612)
得到方程3:
再取(173,616)(253,664)
得到方程4:
由方程3,方程4得:
交点坐标(218,643)
原方程所求的圆心坐标为(215,643),
由此可知模型存在误差,但误差较小可以接受。
问题4分析与求解:
同理在两部像素相同的相机拍摄的两幅图片中,对于标靶上确定的一点便可以求出两部相机的相对位置方法如下:
设:
已知的点X和它在相机A的参考系中的X在像平面上的点Xa’
在相机A的参考系中X点的位置为Xa;
那么得到向量
;
同理在相机B中得到向量
,若将向量
放入相机A的参考系中那么向量
减去向量
所得新的向量就是B相机相对A相机的位置。
具体计算方法如下:
计算机中显示的坐标转换为像平面的坐标后:
这里我们取A’C’D’的圆心;
C’的圆心(169,-31,-1577)
因为直线AA’,CC’,DD’过圆心因此由空间几何得知:
A点坐标x1*(195,189,-1577)
C点坐标x2*(169,-31,-1577)
D点坐标x3*(-113,223,-1577)
因为:
ACD在原平面中为一个直角三角形的三个顶点;
AC=DC=378;
所以:
带入空间2点之间的距离方程如下:
通过LINGO解得方程的解:
x1=-1.140540
x2=-1.161798
x3=-1.218892
同理,分别取A’C’E’;
C’D’E’改变等式右端带入相应线段的长度平方后得到的解分别为:
所得的解误差较小相对稳定,说明模型可用,数据可以参考。
由此组参数得到的ACD实际空间坐标依次为:
A(-222.4053,-215.56206,1798.63158)
C(-196.343862,36.015738,1832.155446)
D(137.734796,-271.812976,1922.192864)
ACD分别四舍五入取整得:
已知3点坐标得到3点式平面方程如下:
解得ACD所在平面方程为:
32721x+8682y-91816z-127327056=0;
相机a焦点O到A的向量
,相机b的焦点O’到A点的向量
,O点到O’的向量
因为相机ab,所视同一点,在空间参考系中位置不变,假设取相机a的参考系为恒定不变的空间参考系,空间两向量的相对位置是不变的,那么在AOO’三角形中
。
参考系不同但空间中两点AO’位置不发生变化即
不变,因此
就是在相机b的参考系中向量
如下图:
那么相机b到相机a的距离为
方向为
的方向
上图为相机b的参考系中3点的关系
上图在相机a参考系中3点的关系
五、模型的评价和推广
此模型主要算法较为简单,通过已知关系的标靶上的图形之间的关系,只要有3个已知点及他们距离的值,便可通过此模型求出标靶平面与像平面之间的位置关系,如果有多部相机亦可知道各个相机之间的位置关系。
通过这些关系,所的图像就不仅是二维的,通过3D软件的计算便可得到立体的三维模型。
而计算机通过此模型判断出标靶的位置后,如在机器人操作时,在各个移动部件上添加标靶,可使机器人自动完成某些特定动作时达到精确定位,在机器人移动过程中通过一个确定点的相对位置改变后,机器人可以判断当前物体相对自己的移动特性如:
方向,速度等。
在路面监视系统中运用此模型,亦可判断通过车辆的驾驶状况,如:
是否超速,是否越过停车线等。
但是模型也有局限,两部相机的光轴必须平行,在实际运用中限制较大。
推广:
本模型,通过使用MATLIB,LINGO等科学计算软件以及人为笔算,但计算过程不复杂,通过在一种计算机语言上把算法整合起来编译,通过一个程序载入图片完成计算效率会大幅提高,并且移植性好,可通过不同编译完成在许多不同平台上的应用,如:
计算机图片计算,三维模型读入计算机,路面监控,机器人研发以及应用。
如果解决光轴必须平行的限制条件,那么应用范围将更为广泛。
六、参考文献
[1]郝红伟,MATLAB6实例教程,中国电力出版社,2001年9月。
[2]主编赵静但琦,数学建模与数学实验(第3版),高等教育出版社,2008年1月。
七、附录
function[B2B3B4B5B6]=findIt
%本程序用于计算像图外包络线切点
%输出量:
keypoint:
切点坐标
%读位图
imdata=imread('
2008A.bmp'
);
imshow(imdata);
holdon;
%取边界线
B=bwboundaries(imdata);
N=length(B)-1;
edge(1,1)=B(3);
edge(1,2)=B(6);
edge(2,1)=B
(2);
edge(2,2)=B(5);
%沿x轴方向做切线
count=1;
form=1:
2
%计算切点
edge1=edge{1,m};
position1=[1m];
edge2=edge{2,m};
position2=[2m];
[v,p,k1,b1,k2,b2]=findPoint(edge1,position1,edge2,position2);
%记录切点
np=length(v);
keypoint(count:
(count+np-1),:
)=v;
position(count:
)=p;
count=count+np;
%画图
x=100:
600;
y1=k1*x+b1;
y2=k2*x+b2;
plot(y1,x,y2,x);
end
%沿y轴方向做切线
edge1=flipdim(edge{m,1},2);
position1=[m,1];
edge2=flipdim(edge{m,2},2);
position2=[m,2];
y=200:
800;
x1=k1*y+b1;
x2=k2*y+b2;
plot(y,x1,y,x2);
end
nPoint=length(keypoint);
count=ones(1,4);
nPoint
thisone=position(m,1)*10+position(m,2)
switchthisone
case11
B3.keypoint(count
(1),:
)=keypoint(m,:
count
(1)=count
(1)+1;
case12
B6.keypoint(count
(2),:
count
(2)=count
(2)+1;
case21
B2.keypoint(count(3),:
count(3)=count(3)+1;
case22
B5.keypoint(count(4),:
count(4)=count(4)+1;
end
B2.edge=B{2};
B3.edge=B{3};
B4.edge=B{4};
B5.edge=B{5};
B6.edge=B{6};
functionexitflag=isItkeypoint(edge1,edge2,k,b,flag)
exitflag='
'
;
s1=length(edge1);
s2=length(edge2);
s1
p=edge1(m,:
y1=k*p
(1)+b-p
(2);
if(y1*flag)>
exitflag='
Thisisnotthekeypoint.'
return;
s2
p=edge2(m,:
function[vertex,position,k1,b1,k2,b2]=findPoint(edge1,position1,edge2,position2)
%确定边界点的个数
ss1=length(edge1);
ss2=length(edge2);
%搜索切点
(ss1-1)
fort=1:
(ss2-1)
%取点
p1=edge1(m,:
p2=edge2(t,:
deltak=(p1-p2);
k=deltak
(2)/deltak
(1);
%斜率
b=-k*p1
(1)+p1
(2);
%常数
%验证所取是否左切点或上切点
exitflag1=isItkeypoint(edge1,edge2,k,b,1);
%判断终止条件
ifisempty(exitflag1)
vertex(count,:
)=p1;
position(count,:
)=position1;
count=count+1;
)=p2;
)=position2;
k1=k;
b1=b;
else
%验证所取是否右切点或下切点
exitflag2=isItkeypoint(edge1,edge2,k,b,-1);
ifisempty(exitflag2)
k2=k;
b2=b;
%ifcount>
4
%return;
%end