成像制导物理仿真实验报告.docx
- 文档编号:6868862
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:12
- 大小:522.73KB
成像制导物理仿真实验报告.docx
《成像制导物理仿真实验报告.docx》由会员分享,可在线阅读,更多相关《成像制导物理仿真实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
成像制导物理仿真实验报告
成像制导物理仿真
实验报告
02020402班
李勃040563
高东军040560
周翔040580
马骏040567
姬雪娇040561
2008年1月8日
一.实验目的
1.了解电视成像制导系统的原理。
2.掌握图像预处理的几种常用算法。
3.编写实现一种图像跟踪的方法。
二.实验内容
1.学会正确使用本实验系统,同时学会对算法部分的编程。
2.查阅图像处理的相关资料,对目标识别和跟踪算法中的几个步骤进行
改进,编写出改进的图像制导算法,并用不同干扰物检测图像跟踪算
法的优劣。
三、实验报告
a)设计算法原理
对图像的处理算法设计:
滤波->二值化->计算形心->跟踪算法
●滤波:
采用窗口为3*3的中值滤波方法
●二值化:
采用固定阀值方法对图像进行二值化处理,同时统计所有目标像素的位置信息,为计算形心做准备。
●对目标像素序列的X和Y坐标分别排序并取中值,作为目标形心。
为了尽可能地减少运算量和保证计算的实时性,我们在设计对所有目标像素进行排序并求取中值的算法时使用了一种变通快速的方法:
先计算目标像素的总数,并将所有目标像素向XY两轴投影,也就是分别统计XY两轴上各刻度所占有的目标像素个数;然后从坐标轴的一头,逐个刻度的累加各刻度的投影数,当累加到目标像素总数的一半时,该刻度值就是所求的中值。
实验证明,这样的方法大大减少了对大量数据排序的运算量,提高了运算速度。
算法中没有采用边缘检测的方法,而是使用了和面积相关的较简便的形心计算方法,在试验中同样取得了较满意的效果。
b)程序代码
//图像处理
/******
*
*选择图像处理方式
*/
voidCImageTrackerView:
:
ProcChoose(BYTE*data,intsize)
{
for(inti=0;i iPixel[i]=*(data+i*3);//获取象素值 } FutureImageProc();//使用扩展跟踪算法 iTargetPosX=CPTargetPos.x-VideoFrmCen.x;//目标横向偏移 iTargetPosY=VideoFrmCen.y-CPTargetPos.y;//目标纵向偏移 iTProcRun=iTNow-iTProcStart;//图像处理运行时间 iProcFrm++;//图像处理帧数 //视频窗口中心灰度 iVideoFrmCenGray=*(data+3*((VideoFrmCen.x-VideoFrmOrg.x)+(VideoFrmPoint.y-VideoFrmCen.y)*IMAGEW)); //锁定框中心灰度 iLockFrmCenGray=*(data+3*((LockFrmCen.x-VideoFrmOrg.x)+(VideoFrmPoint.y-LockFrmCen.y)*IMAGEW)); //目标占视频窗口相对大小 fTargetPercent=float(float(iTargetArea)/float(IMAGES)*100); } * *目标识别,捕获(修正)算法 */ voidCImageTrackerView: : ImageCap() { //修正形心,获取目标位置 CPTargetPos.x=int(float(CPTargetPos.x))+VideoFrmOrg.x;//获取目标位置X CPTargetPos.y=VideoFrmPoint.y-CPTargetPos.y;//获取目标位置Y //ErrorTip if(CPTargetPos.x MessageBox("错误: 目标位置判断超出边界: X方向"); } if(CPTargetPos.y MessageBox("错误: 目标位置判断超出边界: Y方向"); } if((CPTargetPos.x<=(VideoFrmOrg.x+(int(float(LockFrmWidth)/2)+5))) ||(CPTargetPos.y<=(VideoFrmOrg.y+(int(float(LockFrmHeight)/2)+10))) ||(CPTargetPos.x>=(VideoFrmPoint.x-(int(float(LockFrmWidth)/2)+5))) ||(CPTargetPos.y>=(VideoFrmPoint.y-(int(float(LockFrmHeight)/2)+10))) ) { iTargetInFlag=0;//出现次数归零 bTargetInFlag=FALSE;//目标未捕获 LockFrmWidth=30; LockFrmHeight=30; LockFrmCen=VideoFrmCen; } else{ iTargetInFlag++; bTargetInFlag=TRUE;//目标捕获 LockFrmWidth=30; LockFrmHeight=35; LockFrmCen=CPTargetPos; } //Refreshtheview实现一次显示一个锁定框 LockFrmRect.top=LockFrmCen.y-(int(0.5*LockFrmHeight)); LockFrmRect.bottom=LockFrmCen.y+(int(0.5*LockFrmHeight)); LockFrmRect.left=LockFrmCen.x-(int(0.5*LockFrmWidth)); LockFrmRect.right=LockFrmCen.x+(int(0.5*LockFrmWidth)); this->InvalidateRect(LockFrmRect,TRUE); } /****** * *目标跟踪算法 */ voidCImageTrackerView: : ImageTrack() { //控制变量输出 if(bTargetInFlag==TRUE)//目标进入视场,关闭S搜索 { if(iTargetInFlag>2){ bSearchFlag=FALSE; } //垂直方向根据目标相对距离给出控制电压 DUpDown=DUpDown+short((LockFrmCen.y-VideoFrmCen.y)); if((DUpDown>DURim)&&(DUpDown { DirectorUpDownOut(DUpDown);//摄像头上下运动输出 } elseif((DUpDown DUpDown=DUpDown+short((LockFrmCen.y-VideoFrmCen.y)); } elseif((DUpDown>DDRim)&&(((LockFrmCen.y-VideoFrmCen.y))>0)){ DUpDown=DUpDown+short((LockFrmCen.y-VideoFrmCen.y)); } //左右方向根据目标相对距离给出控制电压 DLeftRight=DLeftRight+short((VideoFrmCen.x-LockFrmCen.x)); if((DLeftRight { DirectorLeftRightOut(DLeftRight);//摄像头左右运动输出 } elseif((DLeftRight>DLRim)&&(((LockFrmCen.x-VideoFrmCen.x)/10)>0)){ DLeftRight=DLeftRight+short((LockFrmCen.x-VideoFrmCen.x)/10); } elseif((DLeftRight DLeftRight=DLeftRight+short((LockFrmCen.x-VideoFrmCen.x)/10); } } else {//无目标出现,启动S搜索 if(bSearchFlag==FALSE){ DUpDown=DDRim; DLeftRight=DLRim; } bSearchFlag=TRUE; DirecterS(); } } /****** *目标识别,捕获,跟踪算法(扩展算法) */ //中值滤波->二值化->捕获形心->跟踪算法 voidCImageTrackerView: : FutureImageProc() { unsignedinti,j,k,p; unsignedinttemp[9],t,tx,ty; unsignedintIX[IMAGEW]={0},IY[IMAGEH]={0}; //用于存储分别向XY两轴投影的目标像素数量 //3*3中值滤波 for(i=1;i<(IMAGEW-1);i++) { for(j=1;j<(IMAGEH-1);j++) { temp[0]=iPixel[(j-1)*IMAGEW+i-1]; temp[1]=iPixel[(j-1)*IMAGEW+i]; temp[2]=iPixel[(j-1)*IMAGEW+i+1]; temp[3]=iPixel[(j)*IMAGEW+i-1]; temp[4]=iPixel[(j)*IMAGEW+i]; temp[5]=iPixel[(j)*IMAGEW+i+1]; temp[6]=iPixel[(j+1)*IMAGEW+i-1]; temp[7]=iPixel[(j+1)*IMAGEW+i]; temp[8]=iPixel[(j+1)*IMAGEW+i+1]; for(k=0;k<8;k++) { for(p=8;p>k;p--) { if(temp[p] { t=temp[p]; temp[p]=temp[p-1]; temp[p-1]=t; } } } iPixel[j*IMAGEW+i]=temp[4]; } } //二值化,目标像素统计 p=-1; for(i=0;i { for(j=0;j { if(iPixel[j*IMAGEW+i]>iGateValue)//固定阀值算法 { iPixel[j*IMAGEW+i]=255; } else { iPixel[j*IMAGEW+i]=0; p++;IX[i]++;IY[j]++;//将目标像素的数量分别向XY轴投影 } } } if(p==-1)//目标未出现时跳转 { tx=0; ty=0; gotoperr; } //计算形心 j=0; for(i=0;i { j+=IX[i]; if(j>=p/2) {tx=i; break; } } j=0; for(i=0;i { j+=IY[i]; if(j>=p/2) {ty=i; break; } } perr: CPTargetPos.x=tx;//相对视频窗口坐标X CPTargetPos.y=ty;//相对视频窗口坐标Y ImageCap();//捕获修正 ImageTrack();//跟踪算法 } c)静态实验结果及分析 通过在本机编写程序模拟实验算法,对静态图片进行处理,测试实验算法效果。 加载图片 输出结果,白色十字为形心(阀值为70) 加入白噪声干扰 输出结果,白色十字为形心(阀值为100) 加入其他目标干扰 输出结果,白色十字为形心(阀值为70) 结果分析: 虽然没有进行边缘检测,但在适当的阀值下,我们设计的图像处理算法完全可以很好的识别目标,并较为有效的抵抗多种干扰。 尤其在多目标干扰时,在干扰目标面积较小的情况下,抗干扰效果明显。 d)实际系统运行结果 在实际物理仿真系统中加载算法后,系统工作正常,目标捕获正常,目标跟踪正常,处理速度基本满足要求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成像 制导 物理 仿真 实验 报告