《DSP应用系统(三级)项目设计说明书基于DSP的形状识别.doc》由会员分享,可在线阅读,更多相关《DSP应用系统(三级)项目设计说明书基于DSP的形状识别.doc(12页珍藏版)》请在三一办公上搜索。
1、信息与电气工程学院DSP应用系统(三级)项目设计说明书(2013/2014学年第二学期)题 目 : 基于DSP的形状识别 专业班级 : 电子信息1101 学生姓名 : 指导教师 :设计周数 : 2周 设计成绩 : 2014年7月11日目 录1 项目设计目的及任务22 项目设计内容2 2.1 项目设计原理2 2.1.1 数字图像信号处理2 2.1.2 TMS320VC5509芯片介绍4 2.1 程序代码53 项目设计心得104 参考文献101 项目设计目的(1) 通过DSP实验箱,读取一幅图像或者一路模拟视频信号的采集与显示;(2) 掌握形式识别的原理;(3) 掌握DSP实验箱环境与程序设计;(
2、4) 基于实验箱环境编写形状识别程序,对规则形状进行识别2 项目设计内容 2.1 项目设计原理 2.1.1 数字图像信号处理(1) 数字图像直方图统计:灰度直方图是数字图像处理中一个最简单、最有用的工具,它描述了一幅图像的灰度级内容。任何一幅图像的直方图都包括了可观的信息,某些类型的图像可由其直方图完全描述。灰度直方图是灰度值的函数, 描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标是该灰度出现的频率(像素个数与图像像素总数之比)。程序流程图:图1 直方统计流程图(2)数字图像边缘检测:图像的边缘是图像的最基本特征。所谓边缘(或边沿)是指其周围像素灰度有阶跃变化或屋顶
3、变化的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间、基元与基元之间。因此,它是图像分割所依赖的重要特征。物体的边缘是由灰度不连续性所反映的。 经典的边缘提取方法是考察图像的每个像素在某个邻域内灰度的变化,利用边缘临近一阶或二阶方向导数变化规律,用简单的方法检测边缘。这种方法称为边缘检测局部算子法。边缘的种类可以分为两种:一种称为阶跃性边缘,它两边的像素的灰度值有着显著的不同;另一种称为屋顶状边缘, 它位于灰度值从增加到减少的变化转折点。 如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级的变化带。对于这种变化最有用的两个特征是灰度的变化率和方向,它们分别以梯
4、度向量的幅度和方向来表示。边缘检测算子检查每个像素的邻域并对灰度变化率进行量化, 也包括方向的确定。大多数使用基于方向导数掩模求卷积的方法。(3)Sobel边缘算子:在边沿检测中,常用的一种模板是Sobel算子。Sobel 算子有两个,一个是检测水平边沿的;另一个是检测垂直平边沿的。与和相比,Sobel算子对于象素的位置的影响做了加权,因此效果更好。Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边沿的 ,另一个是检测垂直平边沿的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的
5、幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性Sobel算子的处理方法。由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已
6、在数学上证明当像素点满足正态分布时所求解是最优的。Sobel 算子是一个离散微分算子(discrete differentiation operator)。它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。下图所示的两个卷积核形成了 sobel 算子,图像中的每个点都用这两个核做卷积,一个核对通常的垂直边缘相应最大,而另一个对水平边缘相应最大。两个卷积的最大值作为该点的输出位。运算结果是一幅边缘幅度图像。图2 sobel边缘算子程序流程图:图3 边缘检测流程图 2.1.2 TMS320VC5509芯片介绍DSP定点数字信号处理器(DSP)是基于DSP TMS320C55x代CPU处理
7、器核心。的C55x DSP架构通过增加并行性和减少功耗总重点实现了高性能和低功耗。支持的CPU内部总线结构,是由一个程序读取的数据总线,三总线,两个数据写入总线,和更多的公交车专用外设和DMA活动。这些巴士提供表演三数据的能力在一个周期内读取和写入两数据。同时,DMA控制器进行了两个数据传输周期独立的CPU活动。提供两个CPU的C55x乘累加(MAC)单元,每个具有17位17位乘法的一个周期。特征:*高性能,低功耗,定点数字信号处理器TMS320C55x* 6.94-ns指令周期时间为144 MHz的时钟速率在1.6 V*一个/两个指令(S)每个周期执行*双乘法器达288000000乘累加每秒
8、(MMACS)*两个算术/逻辑单元(ALU)*三内部数据、操作数读公交车和两个内部数据/操作数写入总线* 128K的16位的芯片上的RAM,由: *64K字节的双端口存储器(区)8块4K16位 *192k字节的单一访问RAM(SARAM)24块4K16位 *64K字节的一个等待状态的片上ROM(32K16位) *816位最大可寻址的外部存储空间(同步动态随机存储器)*16位外部并行总线内存支持*外部存储器接口(EMIF)与GPIO功能和无缝接口*异步静态存储器(SRAM)*异步存储器*同步动态随机存取存储器(SDRAM)* 16位并行增强的主机接口(HPI)与GPIO功能*六装置的功能结构域可
9、编程低功耗控制*在芯片扫描为基础的仿真逻辑*片上外设 2.2 程序代码 Image.c#include#define IMAGEWIDTH 80#define IMAGEHEIGHT 80#define MODEGRAYBAR 0#define MODEGRAY 1#define MODEPHOTO1 2#define MODEPHOTO2 3#define MODEPHOTO3 4#define MODEPHOTO4 5#define MODEPHOTO5 6#define MODEPHOTO6 7float fHistogram256;void InitImage(unsigned int
10、 nMode,unsigned char *pImage,int nWidth,int nHeight);unsigned char dbImageIMAGEWIDTH*IMAGEHEIGHT;unsigned char dbTargetImageIMAGEWIDTH*IMAGEHEIGHT;float circularity(unsigned char *pImage,unsigned char *pImage0,int nWidth,int nHeight,float fHisto256);float L,S,circularity0;/* 直方图统计实验程序 */int main()In
11、itImage(MODEPHOTO1,dbImage,IMAGEWIDTH,IMAGEHEIGHT);/BreakPointSobel(IMAGEWIDTH,IMAGEHEIGHT); identification(MODEPHOTO1);InitImage(MODEPHOTO2,dbImage,IMAGEWIDTH,IMAGEHEIGHT);/BreakPointSobel(IMAGEWIDTH,IMAGEHEIGHT); identification(MODEPHOTO2);InitImage(MODEPHOTO3,dbImage,IMAGEWIDTH,IMAGEHEIGHT);/Brea
12、kPointSobel(IMAGEWIDTH,IMAGEHEIGHT);identification(MODEPHOTO3);InitImage(MODEPHOTO4,dbImage,IMAGEWIDTH,IMAGEHEIGHT);/BreakPointSobel(IMAGEWIDTH,IMAGEHEIGHT); identification(MODEPHOTO4);InitImage(MODEPHOTO5,dbImage,IMAGEWIDTH,IMAGEHEIGHT);/BreakPointSobel(IMAGEWIDTH,IMAGEHEIGHT);identification(MODEPH
13、OTO5);InitImage(MODEPHOTO6,dbImage,IMAGEWIDTH,IMAGEHEIGHT);/BreakPointSobel(IMAGEWIDTH,IMAGEHEIGHT);identification(MODEPHOTO6);while (1);/BreakPointfloat circularity(unsigned char *pImage,unsigned char *pImage0,int nWidth,int nHeight,float fHisto256) int i,j; unsigned int uWork; unsigned char *pWork
14、,*pWork0; for ( i=0;i256;i+ ) fHistoi=0.0f;pWork=pImage0;for ( i=0;inHeight;i+ ) for ( j=0;jnWidth;j+,pWork+ )uWork=(unsigned int)(*pWork);fHistouWork+;L=fHisto255;for ( i=0;i256;i+ )fHistoi=0.0f;pWork0=pImage;for ( i=0;inHeight;i+ ) for ( j=0;j59&circularity063&circularity096&circularity097) printf
15、(trianglen); InitImage.c#include#define MODEGRAYBAR 0#define MODEGRAY 1#define MODEPHOTO1 2#define MODEPHOTO2 3#define MODEPHOTO3 4#define MODEPHOTO4 5#define MODEPHOTO5 6#define MODEPHOTO6 7#define MODEBLOCK 6#define MODEINCLINE 7#define MODEFPHOTO 8#define GRAYBARLEVEL 16void ReadImage(unsigned ch
16、ar *pImage,char *cFileName,int nWidth,int nHeight);void InitImage(unsigned int nMode,unsigned char *pImage,int nWidth,int nHeight)switch ( nMode )case MODEPHOTO1:ReadImage(pImage,.circle1.bmp,nWidth,nHeight);break;case MODEPHOTO2:ReadImage(pImage,.squarence1.bmp,nWidth,nHeight);break;case MODEPHOTO3
17、:ReadImage(pImage,.triangle1.bmp,nWidth,nHeight);break;case MODEPHOTO4:ReadImage(pImage,.squarence2.bmp,nWidth,nHeight);break;case MODEPHOTO5:ReadImage(pImage,.triangle2.bmp,nWidth,nHeight);break;case MODEPHOTO6:ReadImage(pImage,.circle2.bmp,nWidth,nHeight);break;void ReadImage(unsigned char *pImage
18、,char *cFileName,int nWidth,int nHeight)int j;unsigned char *pWork;FILE *fp;if ( fp=fopen(cFileName,rb ) )fseek(fp,1078L,SEEK_SET);pWork=pImage+(nHeight-1)*nWidth;for ( j=0;jnHeight;j+,pWork-=nWidth )fread(pWork,nWidth,1,fp);fclose(fp); Sobel.c#define IMAGEWIDTH 80#define IMAGEHEIGHT 80#include exte
19、rn unsigned char dbImageIMAGEWIDTH*IMAGEHEIGHT;extern unsigned char dbTargetImageIMAGEWIDTH*IMAGEHEIGHT;int mi,mj,m_nWork1,m_nWork2;unsigned int m_nWork,*pWork;unsigned char *pImg1,*pImg2,*pImg3,*pImg;unsigned int x1,x2,x3,x4,x5,x6,x7,x8,x9;void Sobel(int nWidth,int nHeight)int i;pImg=dbTargetImage;
20、for ( i=0;iIMAGEWIDTH;i+,pImg+ )(*pImg)=0;(*pImg)=0;pImg1=dbImage;pImg2=pImg1+IMAGEWIDTH;pImg3=pImg2+IMAGEWIDTH;for ( i=2;inHeight;i+ )pImg+;x1=(*pImg1); pImg1+; x2=(*pImg1); pImg1+;x4=(*pImg2); pImg2+; x5=(*pImg2); pImg2+;x7=(*pImg3); pImg3+; x8=(*pImg3); pImg3+;for ( mi=2;minWidth;mi+,pImg+,pImg1+
21、,pImg2+,pImg3+ )x3=(*pImg1); x6=(*pImg2); x9=(*pImg3); m_nWork1=abs(x7+x8+x8-x2-x2-x3);m_nWork2=abs(x3+x6+x6-x4-x4-x7);if (m_nWork1255 )m_nWork1=255;(*pImg)=m_nWork1;x1=x2; x2=x3;x4=x5; x5=x6;x7=x8; x8=x9;(*pImg)=0; pImg+;程序运行结果:circularity0=59.205189.circlecircularity0=63.320961.squarencecircularit
22、y0=96.094772.trianglecircularity0=63.429848.squarencecircularity0=96.553711.trianglecircularity0=59.391403.circle3 项目设计总结或结论本学期学习DSP的时间很短,芯片设计掌握的深度不够,但通过此次课程设计,却改变了很多, 首先,对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次,软件方面,在程序的设计,程序的调试方面都学到了很多东西。通过认真的查阅资料和应用网络教程,完成了课程设计题目,用时挺长的,做的过程中遇到了许多大大小小的问题和困难,一开始感到无从下手,通过
23、查阅各种资料视频,自己的学习思考终于才有了思路。虽然完成了本次课程设计,但是很多的地方考虑的还是不够周全,有时不能很好的表达自己的思想。课程设计也告诉我还有许多东西需要学习。在大学课堂的学习只是纯理论的专业知识,而我们应该把所学的用到现实生活中去,此次的图像识别设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应社会激烈的竞争。在这次的DSP课程设计过程中,无论是在理论学习阶段,还是在设计的选题、资料查询和撰写的每一个环节,我都得到到了许多人的悉心的指导和帮助。学习DSP要有一定的基础:电子技术方面要有数字电路和模拟电路等方面的理论基础,特别是数字电路;编程语言要求C语言。
24、设计的时间花的算不算多,不是从百度里找就是从老师给的资料里一个一个拼凑起来。这次的设计是基于一定的模版才设计出来的,好多不懂,都是从头学。我要感谢授课的各位老师,正是由于你们的传道、授业、解惑,让我学到了专业知识,并从你们身上学到了如何求知治学、如何为人处事。我也会珍惜以后每一次学习的机会。4 参考文献1周霖,李枫.DSP算法设计与系统方案J.国防工业出版社,2007,7.2赵红怡.DSP技术与应用实例(第三版)M.电子工业出版社,20012,5.3郭文强,侯永严.数字图像处理J.西安电子科技大学出版社,2009,5.项目设计评 语项目设计成 绩指导教师(签字) 年 月 日注:此表必须在同一页面。