计算机科学与技术专业综合实习报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机科学与技术专业综合实习报告题目:图像轮廓跟踪算法设计与实现学生:别佳学号:051006301指导教师:郑小东日期:2008年11月16日2目录一:实践目标....................................................................................3二:图像轮廓跟踪算法原理............................................................3三:开发工具....................................................................................3四:数据结构描述............................................................................31:链码.................................................................................................32:链码方向的旋转............................................................................43:链码的寻址....................................................................................44:图像矩阵........................................................................................4五:算法描述....................................................................................4六:程序运行结果............................................................................7七:问题与不足................................................................................8八:老师评语....................................................................................93图像轮廓跟踪算法设计与实现一:实践目标1:设计图像轮廓跟踪算法,并寻找图像的轮廓。2:以矩阵为例,寻找矩阵的边界。验证轮廓跟踪算法设计。二:图像轮廓跟踪算法原理1:利用区域边界点搜索区域轮廓的方法。原理是从某一边界点出发,通过沿着一个方向(顺时针)不断搜索下一个轮廓点的方法,得到区域的完整轮廓。轮廓跟踪算法的关键是寻找下一个边界点2:寻找下一个边界点的方法:①按照水平向右的方向逐行寻找第一个值为1的起始点(如果第一行中第一个起始点没有找到,则从第二行、第三行…开始寻找直到找到第一个起始点)。②将水平向右的方向逆时针旋转145°。再按照每次顺时针旋转45°寻找其周围的像素点是否存在,如果不存在继续旋转45°;如果存在,当它的值为0时继续旋转45°,如果为1时,则此点位边界点,停止旋转。③记录进入该边界点的方向,再按照逆时针旋转145°。再按照每次顺时针旋转4寻找此周围的像素点是否存在,如果不存在继续旋转45°;如果存在,当它的值为0时继续旋转45°,如果为1时,则此点位边界点,停止旋转。④继续③,直到最后一个边界点为第一个起始点,则算法结束。三:开发工具MicrosoftVisualC++四:数据结构描述1:链码、链码将中心像素邻域内的8个点逆时针方向编码,其对应编码与方向编码完全相同。324*05571642:链码方向的旋转从上图可以看出,方向按逆时针旋转45度,链码值加1,若链码值大于7时,则其以8取模就可以得到正确的链码。若取相反的方向,可以对链码值加4得到,给链码值加8可以回到原方向。3:链码的寻址通过中心像素临近像素的过程,叫做链码的寻址。链码的寻址是通过中心像素坐标加上偏移向量表来实现的。这个过程经常借助偏移向量来实现的。下图为获得中心像素的偏移向量表,表中按照链码的顺序给出了八方向的X,Y偏移量,偏移向量表可利用二维数组directData[8][2]来实现。偏移向量表(directData[8][2])链码01234567X偏移110-1-1-101Y偏移0-1-1-10-1114:图像矩阵用二维矩阵Image[N][N]来表示图像。五:算法描述1:初始矩阵如图所示,以方框内部的像素点为起始边界点。52:起始点为中心像素点,搜索边界点搜索过程如下图63:搜索到符合条件的像素点,令代表此像素点的值为7(为边界点)然后以此像素点为新的起始点重新搜索。74:当搜索回到第一个起始点,算法结束。如下图六:程序运行结果8七:问题与不足1:仅对单区域进行跟踪,没能实现多个区域的跟踪。解决方法:①用一个一维数组来表示已访问的区域。②当对一个区域搜索完成以后,检索数组。③对没有访问的区域进行轮廓跟踪。直到所有区域访问完成。2:如果起始点为第一行(最后一行)、第一列(最后一列)中的元素,由于它不能构成八邻域。则算法条件不满足。解决方法:可在整个矩阵中增加两行(分别作为第一行、最后一行)、两列(第一列、最后一列)。参考文献注:1、计算机数据与图形处理;化学工业出版社;贾志刚2、计算机图形学理论与实践;北京航空航天大学出版社;李春雨3:数字图像处理开发入门与编程实践;电子工业出版社;左飞,万晋森,刘航9八:老师评语10九:部分代码#includeiostream.h#defineN7intImage[N][N]={{0,0,0,1,1,0,0},{0,0,1,0,1,1,0},{0,0,1,1,1,1,0},{0,1,1,1,1,1,0},{0,0,1,1,1,1,0},{0,0,0,1,0,1,0},{0,0,0,0,0,0,0}};//图像矩阵intmain(intargc,char*argv[]){inti,j,k,m;intdirectData[8][2]={{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1},{0,1},{1,1}};//链码向量表intx,y;//某一边界点的位置(坐标值)intnx,ny;//搜索到的轮廓点的值intF_x,F_y;//起始点的坐标intindex;intstartindex;//起始链码cout原图像endl;for(i=0;iN;i++){for(j=0;jN;j++){coutImage[i][j];}coutendl;}for(i=0;iN;i++){for(j=0;jN;j++){11if(Image[i][j]==1){x=F_x=j;y=F_y=i,k=0;break;}}if(k==0)break;}index=0;do//轮廓跟踪算法//循环搜索下一边界点,直到回到起始点{m=0;//对边界点进行搜索时,用来判断是否为第一个搜索到的1(边界点)startindex=index+3+8;//对此边界点周围进行搜索时的起始链码for(i=0;i=7;i++){index=(startindex-i)%8;//进入搜索到的该轮廓点的链码nx=x+directData[index][0];ny=y+directData[index][1];//得到搜索的轮廓点在矩阵中的位置if(Image[ny][nx]==1)//判断矩阵元素值为一,如果是,则为找到的边界点.令该边界点在矩阵中的元素值为7{Image[ny][nx]=7;m=1;//表示此次循环结束.x=nx;y=ny;//保存搜索到的边界点坐标值}if(m==1)break;//搜索结束,跳出循环。}}while(x!=F_x||y!=F_y);cout轮廓为:endl;for(i=0;iN;i++){for(j=0;jN;j++){if(Image[i][j]==7)cout*;elsecout;}coutendl;}12return0;}

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功