基于5509A DSP的双目摄像头远程物体定位.docx
- 文档编号:29915352
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:18
- 大小:161.91KB
基于5509A DSP的双目摄像头远程物体定位.docx
《基于5509A DSP的双目摄像头远程物体定位.docx》由会员分享,可在线阅读,更多相关《基于5509A DSP的双目摄像头远程物体定位.docx(18页珍藏版)》请在冰豆网上搜索。
基于5509ADSP的双目摄像头远程物体定位
研究生课程考试成绩单
(试卷封面)
院系
工学院
专业
农业生物环境与能源工程
学生姓名
胡古月
学号
2014112034
课程名称
嵌入式系统
授课时间
2014年09月至2015年01月
周学时
32
学分
2
简
要
评
语
考核论题
嵌入式系统技术综述或应用设计
总评成绩
(含平时成绩)
备注
任课教师签名:
日期:
基于5509ADSP的双目摄像头远程物体定位
作者:
胡古月
指导老师:
刘龙申
摘要:
利用双目定位原理,实现物体远程定位。
本文主要讲通过双目定位原理,获得物体图像,再通过5509ADSP经过图像处理得到物体的三维坐标,并在5509ADSP数字信号处理箱的LCD显示器显示三维坐标并进行对比分析。
关键字:
双目定位;5509A;DSP;图像处理;
Binocularcameraremoteobjectlocatingbasedon5509ADSP
Tutor:
HuGuyue
Teacher:
LiuLongshen
Abstract:
Usingbinocularpositioningprincipletorealizetheremoteobjectlocalization.Thispapermainlydescribesgettingtheimageoftheobjectthroughthebinocularpositioningprinciple,andgettingthe3Dcoordinatesofobjectsthroughthe5509ADSPthroughimageprocessing,anddisplayingthe3DcoordinatesontheLCDdisplay5509ADSPdigitalsignalprocessingboxandmakingcomparativeanalysis.
Keywords:
binocularpositioning;5509A;DSP;imageprocessing;
引言
双目立体视觉定位是视觉定位中一种特殊的方法。
它模仿人的双眼,利用两个摄像机同时采集视频/图像。
由于两个摄像机位置不同,采集的图像存在视差,利用这一视差可以直接获取空间物体的深度信息。
传统的双目立体视觉都是依靠PC机来实现的。
在实际的定位应用中,往往需要系统具有很大的灵活性和可靠性,但是PC机体积大、稳定性差、维护成本高,随着嵌入式系统的发展,它能够满足视频/图片处理的高效、稳定和便携的要求,因为本文通过DSP嵌入式系统实现双目物体远程定位,DSP实验箱采用TMS320VC5509A主处理芯片,双核结构,处理速度快。
1.研究内容、设计功能及工作原理
1.1研究内容
本文主要研究的内容有以下四个方面:
掌握双目定位原理;
了解照相机工作的基本知识以及相关参数;
掌握双目定位图像处理的算法程序;
掌握液晶显示器的显示控制原理及编程方法;
1.2设计功能
能够实现功能:
对两摄像头采集到的图像分析处理;
得到空间某一目标物体的三维坐标;
物体移动时,对其进行跟踪(有待提高);
在LCD屏幕上显示目标物体距离空间原点(两摄像头中点)的三维坐标;
1.3工作原理
双目定位原理:
双目立体视觉是通过使用两个摄像头充当人的双目来对特定的物体进行定位。
双目定位过程中,两个摄像头在同一平面上,并且光轴互相平行,就像是人对物体上一个特征点,用两部固定于不同位置的摄像头摄得物体的像,分别获得该点在两部相机像平面上的坐标。
只要知道两个摄像头精确的相对位置,就可用几何的方法得到该目标物体在固定一部相机的坐标系中的坐标,即确定了该目标物体的位置。
LCD原理:
液晶显示模块的访问、控制是由5509ADSP对扩展接口的操作完成。
控制口的寻址:
命令控制接口的地址为0x602800,数据控制接口的地址为0x602801和0x600802,辅助控制接口的地址为0x600801。
液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的像素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。
2.设计过程
2.1本实验过程中必须保证:
(1)两个观察的摄像头必须相同(像素,焦距等);
(2)两个观察的摄像头在三维系统中观察方向相同,且成一条水平直线。
(3)两者均可观察到所要定位物体,即中心目标的运动必须保证两摄像头均能够观察到。
2.2系统流程图
2.3坐标系统建立
双目定位坐标系
如图,C1、C2为两架摄像头,O1、O2分别为两个摄像头的中心坐标,b为两摄像头距离,X1Y1Z1、X2Y2Z2分别为以O1、O2为中心所建立的三维坐标系。
其中两X1、X2表示两个摄像头水平摆放,并且在同一直线上,我们称作两个摄像头的X轴;Y1、Y2表示两摄像头在竖直方向平行,我们称作两个摄像头的Y轴;Z1、Z2表示两摄像头在垂直摄像头平面方向平行,我们称作两摄像头的Z轴。
在这里我们选取两摄像头中心点O为三维坐标系中心,那么索要定位物体P的坐标可以表示为P(x,y,z)。
由先前的保证3可知,物体必定为呈现在两摄像头的观察平面上,那么它同时属于O1、O2两个坐标系,坐标分别为P1、P2,那么它在O1、O2的坐标系中的坐标可以表示为P1(x1,y1,z1)以及P2(x2,y2,z2)。
O1、O2为C1、C2在观察平面上的中心点。
观察平面的二维坐标系建立以O1、O2为中心(O1(0,0)、O2(0,0)),横轴为u纵轴为v,那么P1、P2在2个观察平面的坐标可以表示为P1(u1,v1)、P2(u2,v2)。
2.4双目定位公式推导
根据射影几何学的相关知识,得到
u1=f*x1/(z1*Ax)
u2=f*x2/(z2*Ax)
综上所述,由于O1、O2坐标系的相关关系,我们得到
P2(x2,y2,z2)=P1(x1+b,y1,z1)
那么就有
u1=f*x1/(z1*Ax)
u2=f*(x1+b)/(z1*Ax)
解方程得z1=b*f/[Ax*(u2-u1)]
x1=b*u1/(u2-u1)
由于
v1=f*y1/(z1*Ay)将z1=b*f/[Ax*(u2-u1)]代入得y1=b*(Ay*v1)/[Ax*(u2-u1)]
由于一般来讲,摄像头的Ax=Ay,所以化简为y1=b*v1/(u2-u1)
一般来说F=f/Ax=f/Ay,得到双目定位公式如下:
x1=b*u1/(u2-u1)
y1=b*v1/(u2-u1)
z1=b*F/(u2-u1)
其中,Ax,Ay为摄像头的行间距以及列间距,其代表像素的数目;
f为摄像头焦距,即透镜的光心到光聚集之焦点的距离,简单的说焦距是焦点到面镜
的顶点之间的距离;
F为摄像头标定符合焦距,是摄像头的既定参数,由具体的摄像头来决定。
2.5LCD显示器
打开液晶显示的工程文件,利用字模显示工具分别对所需要显示的字进行字模显示,得到扫描代码,对原有工程文件主函数进行修改,再对key,c的主函数进行添加和修改。
2.6编译并下载程序
主要的代码
(1)LCD显示部分代码,其余代码见工程文件
第一行显示“距离中点”,在此仅放“距”
CTRLCDCMDR=LCDCMDPAGE;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
for(i=0;i<32;i++)
{
if(i==16)
{
CTRLCDCMDR=LCDCMDPAGE+1;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
CTRLCDLCR=ju[i];//屏幕左侧第1至8行第i列赋值
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
第二行左区显示“前”
CTRLCDCMDR=LCDCMDPAGE;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
for(i=0;i<32;i++)
{
if(i==16)
{
CTRLCDCMDR=LCDCMDPAGE+3;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
CTRLCDLCR=qian[i];//屏幕左侧第1至8行第i列赋值Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
第三行右区显示“右”
CTRLCDCMDR=LCDCMDPAGE+4;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
for(i=0;i<32;i++)
{
if(i==16)
{
CTRLCDCMDR=LCDCMDPAGE+5;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
CTRLCDRCR=you[i];//屏幕左侧第1至8行第i列赋值
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
(2)双目测距算法(仅给出第一组两幅图像算法,第二组一样)
//第一组图像
InitImage(MODEPHOTO1,dbImage,IMAGEWIDTH,IMAGEHEIGHT);
buff=0;
for(i=0;i<20000;i++)
{
if((*(dbImage+i))>buff)
{
buff=(*(dbImage+i));
buff_zb=i;
}
}
zuo_x=200-buff_zb%200;
zuo_y=100-buff_zb/200;
InitImage(MODEPHOTO2,dbImage,IMAGEWIDTH,IMAGEHEIGHT);
buff=0;
for(i=0;i<20000;i++)
{if((*(dbImage+i))>buff)
{
buff=(*(dbImage+i));
buff_zb=i;
}
}
you_x=200-buff_zb%200;
you_y=100-buff_zb/200;
sjx=3.45/((65.0+(zuo_x+you_x)*0.0258)/70.0-0.9914);
sjxx=(int)sjx;
qian=sjxx/1000;
bai=(sjxx-qian*1000)/100;
shi=(sjxx-qian*1000-bai*100)/10;
ge=(sjxx-qian*1000-bai*100-shi*10);
Show2(qian,2,20);
Show2(bai,2,28);
Show2(shi,2,36);
Show2(ge,2,44);
sjxx=sjxx/3*you_y*0.02586-350;
sjxx=(int)sjxx;
if(sjxx<0)
{
sjxx=-sjxx;
CTRLCDCMDR=LCDCMDPAGE+4;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
for(i=0;i<32;i++)
{
if(i==16)
{
CTRLCDCMDR=LCDCMDPAGE+5;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
CTRLCDLCR=left[i];//屏幕左侧第1至8行第i列赋值Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
}
qian=sjxx/1000;
bai=(sjxx-qian*1000)/100;
shi=(sjxx-qian*1000-bai*100)/10;
ge=(sjxx-qian*1000-bai*100-shi*10);
Show2(qian,4,20);
Show2(bai,4,28);
Show2(shi,4,36);
Show2(ge,4,44)
sjx=3.45/((65.0+(zuo_y+you_y)*0.0258)/70.0-0.92758);
sjxx=(int)sjx/2;
if(sjxx<0)
{
sjxx=-sjxx;
CTRLCDCMDR=LCDCMDPAGE+6;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
for(i=0;i<32;i++)
{
if(i==16)
{
CTRLCDCMDR=LCDCMDPAGE+7;//设置操作页=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
CTRLCDLCR=xia[i];//屏幕左侧第1至8行第i列赋值
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
}
}
qian=sjxx/1000;
bai=(sjxx-qian*1000)/100;
shi=(sjxx-qian*1000-bai*100)/10;
ge=(sjxx-qian*1000-bai*100-shi*10);
Show2(qian,6,20);
Show2(bai,6,28);
Show2(shi,6,36);
Show2(ge,6,44);
Show函数见工程文件
(3)字显示部分的添加代码
unsignedcharju[]={0x00,0x3E,0x22,0xE2,0x22,0x3E,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,0x40,0x7F,0x20,0x3F,0x11,0x11,0x00,0x7F,0x42,0x42,0x42,0x42,0x42,0x43,0x40,0x00};
unsignedcharli[]={
0x00,0x04,0x04,0xF4,0x84,0xCC,0xAD,0x96,0x94,0xAC,0xCC,0x84,0xF4,0x06,0x04,0x00,0x00,0x00,0xFE,0x02,0x1A,0x16,0x12,0x13,0x12,0x16,0x1A,0x72,0x82,0x7E,0x00,0x00};
unsignedcharzhong[]={0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00};
unsignedchardian[]={0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x3F,0x24,0x24,0x24,0xF4,0x24,0x00,0x00,0x00,0x00,0x40,0x30,0x07,0x12,0x62,0x02,0x0A,0x12,0x62,0x02,0x0F,0x10,0x60,0x00,0x00};
Unsignedcharqian[]={0x08,0x08,0xE8,0xA8,0xA9,0xAE,0xEA,0x08,0x08,0xC8,0x0C,0x0B,0xEA,0x08,0x08,0x00,0x00,0x00,0x7F,0x04,0x24,0x44,0x3F,0x00,0x00,0x1F,0x40,0x80,0x7F,0x00,0x00,0x00};
unsignedcharyou[]={0x08,0x08,0x08,0x88,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x04,0x02,0x01,0x00,0x7F,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00};
unsignedcharshang[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00};
unsignedcharleft[]={0x08,0x08,0x08,0x08,0x08,0xC8,0x3F,0x0A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x40,0x20,0x50,0x4C,0x43,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00};
unsignedcharxia[]={0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x22,0x62,0xC2,0x82,0x02,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00};
3.设计工程的仿真图形
3.1两组摄像头拍摄的图片(已经过处理,背景变灰,目标物体变亮)
第一组
第二组
3.2经算法计算后LCD显示的两组照片中目标物体的三维坐标
对比分析:
用照相机拍摄第一组照片时,目标物体就放在了水平面,距离两摄像头中点偏左方一点,故实验结果显示的“左”“上”距离接近于0基本正确。
在拍第二组两张照片时,目标物体也在水平面(相对于第一次前移了一点),所以实验结果“右”“上”接近于0基本正确,“前”的距离变大也正确。
综上,本次实验的数据基本正确,达到了预期效果。
但失误的一点是拍照时没有改变物体的Z坐标,稍有缺憾,使数据缺乏说服力。
4、总结与评价
经过测试该系统能够完成预定的任务,设计方案成功完成。
本文利用双目定位原理,用摄像机得到物体的两张图片,通过DSP图像检测处理分别得到物体在两个摄像机坐标系的三维坐标进行对比分析,并在DSP实验箱的LCD显示器上显示出来。
参考文献
[1]BertolottiIC,HuTT.Modulardesignofanopen-source,networkedembeddedsystem[J].
COMPUTERSTANDARDS&INTERFACES.2015,37:
41-52.
[2]DunbarC,QuG.DesigningTrustedEmbeddedSystemsfromFiniteStateMachines[J].ACM
TRANSACTIONSONEMBEDDEDCOMPUTINGSYSTEMS.2014,13(5):
155-164.
[3]戴明桢,周建江.TMS320C54xDSP结构原理及应用.北京航空航天大学出版社.2008,(11).
[4]汪倩倩,申忠宇,张亮.基于双目视觉模型的彩色目标实时检测与定位[J].南京师范大学
学报,2008,8
(1):
18-23.
[5]李瑞峰,李庆喜.机器人双目视觉系统的标定与定位算法[J].哈尔滨工业大学学报,2007,
39(11):
1719-2722.
[6]薛文风.三维空间坐标的旋转算法[J].电脑编程技术与维护,1995,6:
59-60.
[7]教学实验系统实验指导书.瑞泰创新.
[8]罗文,王莉娜,等.基于GPRS的嵌入式系统远程监控和升级[J].计算机技术与应用,2010,(5):
159-162.
[9]HuangJ,BarnerS,etal.Aframeworkforreliability-aware embeddedsystem designonmulti
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于5509A DSP的双目摄像头远程物体定位 基于 5509 DSP 双目 摄像头 远程 物体 定位
![提示](https://static.bdocx.com/images/bang_tan.gif)