毕业设计(论文)-基于DSP的图像旋转.doc_第1页
毕业设计(论文)-基于DSP的图像旋转.doc_第2页
毕业设计(论文)-基于DSP的图像旋转.doc_第3页
毕业设计(论文)-基于DSP的图像旋转.doc_第4页
毕业设计(论文)-基于DSP的图像旋转.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于DSP的图像旋转1 概述DSP芯片是一种高性能的微处理器,其技术发展大大推动了数字信号技术的发展与应用,目前从工业系统到家电产品,从军事装备到生物医学仪器,无不融入了DSP技术。由于计算机处理能力的不断增强,数字图像处理学科在飞速发展的同时,也越来越广泛地向许多其他学科快速交叉渗透,使得图像作为信息获取以及信息的利用等方面的作用也变得越来越重要。21世纪是数字化的时代,数字信号处理由于运算速度快,具有可编程特性和接口灵活的特点,使得它在许多电子产品的研制、开发和应用中,发挥着重要的作用。随着越来越多的电子产品将数字信号处理(DSP)做为技术核心,DSP已经成为推动数字化进程的动力。作为数字化最重要的技术之一,DSP无论在其应用的深度还是广度,正在以前所未有的速度向前发展。近年来,DSP技术在我国也得到了迅速的发展,不论是在科学技术研究,还是在产品的开发等方面,在数字信号处理中,其应用越来越广泛,并取得了丰硕的成果。数字滤波占有极其重要的地位。数字滤波是语音和图像处理、模式识别、谱分析等应用中的一个基本处理算法。在许多信号处理应用中用数字滤波器替代模拟滤波器具有许多优势。数字滤波器容易实现不同的幅度和相位频率特性指标,克服了与模拟滤波器器件性能相关的电压漂移、温度漂移和噪声问题。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响外,还具有灵活性好的特点。用可编程DSP芯片实现数字滤波可通过修改滤波器的参数十分方便的改变滤波器的特性。几乎每一科学和工程领域例如声学、物理学、通信、数据通信、控制系统和雷达等都涉及信号。在许多应用中都希望根据期望的指标把一个信号的频谱加以修改、整形或运算。这些过程都可能包含衰减一个频率范围,阻止或隔离一些频率成分,用数字滤波器来实现这些功能是方便、有效、可行的。本文主要表述利用TI公司TMS320C55x芯片的资源特点,在设计中借助Code Composer Studio v3.3中以TMS320C55x芯片的汇编语言编程实现了数字图像的旋转,进行高效图像旋转的大规模数据调度,从而实现适用于图像的DSP实时图像旋转。2 设计任务及目的2.1设计任务 实现一路模拟视频信号的采集与显示; 实现单帧图像的旋转(90、180任选); 图像采用120*96点像素,由SDRAM中的722*228存储图像采样生成; 手动设置CMD文件,保证程序的正确运行。2.2 设计目的图像旋转是一种应用广泛的数字图像处理技术,随着应用水平的不断提高,对在嵌入式系统中实现高分辨率大图像旋转的需求也越来越高。如在航空领域的高分辨率数字地图图像的显示处理过程中,由于现有的显示芯片均不能支持图像旋转功能,就需要在资源有限的嵌入式平台上实现大幅面地图图像的实时旋转。采用DSP平台是一种实现方式,具体实现时需仔细考虑两个方面的问题,一是选用计算量小的旋转算法,二是充分发挥DSP平台强大的并行计算能力。通过本次DSP项目,掌握TMS320C5509芯片的特点,了解数字图像处理的原理,熟悉DSP命令及所用开发软件和工具箱的使用方法,学习巩固DSP基础知识。3 设计原理本图像旋转项目利用的是平面坐标点旋转变换原理,平面坐标点旋转变换即平面上绕它上面一点O整体旋转。坐标系原点的位置为左上,y轴向下为正方向,x轴向右为正方向,顺时针旋转角度为正,若任意一点A(ax,ay),按旋转中心点(x,y)旋转任意角度度后A(xA,yA)的坐标计算公式如下所示:xA=x+(ax-x)cosk-(ay-y)sinyA=y+(ax-x)sink+(ay-y)cos这就是平面坐标点旋转变换公式,其旋转角为,任何一个矢量的旋转都可以看成两个分量的各自旋转后,然后累加结果。至于旋转心不在原点上,可以把旋转心看成临时原点,进行相对量的旋转,然后再加上与真正原点的相对量即可。根据旋转变换公式,借助Code Composer Studio v3.3中以TMS320C55x芯片的汇编语言编程,来将图像像素点坐标变换到旋转后对应的坐标位置上,最后显示生成旋转后的图像。但由于变换过程中根据公式计算结果,部分像素点旋转变换后的坐标值为小数,必须对其四舍五入取整,故在图像旋转后部分旋转角度下图像的某些像素点会丢失,造成图像中有灰黑斑点,但在90,180情况下图像完全正常。由上所述,结合其他知识可编图像旋转程序如下:xData =(IMGWIDTH/2-1)+(long)(float)(x-(IMGWIDTH/2-1)*cos(theta)-(float)(i-(IMGHEIGHT/2-1)*sin(theta)+0.50);yData = (IMGHEIGHT/2-1)+(long)(float)(x-(IMGWIDTH/2-1)*sin(theta)+(float)(i-(IMGHEIGHT/2-1)*cos(theta)+0.50);yxDatayData = bufferi*xsample+xstart;/yIMGWIDTHIMGHEIGHT4 软件程序设计4.1 程序流程图图1 程序流程图4.2 初始化程序void CLK_init( unsigned int nPLL )/时钟初始化 ioport unsigned int *clkmd; clkmd=(unsigned int *)0x1c00; *clkmd =nPLL;/ 0x2033;/0x2413;/ 144MHz /2613void EMIF_init(void)/外部存储器接口 ioport unsigned int *CE21 = (unsigned int *)0x809;*CE21 =0x1fff;void TMCR_reset( void ) ioport unsigned int *TMCR_MGS3=(unsigned int *)0x07FE; ioport unsigned int *TMCR_MM =(unsigned int *)0x07FF; *TMCR_MGS3 =0x510; *TMCR_MM =0x000;void SDRAM_init( void )/定义SDRAM引脚,以及控制寄存器时,并进行初始化 ioport unsigned int *ebsr =(unsigned int *)0x6c00; ioport unsigned int *egcr =(unsigned int *)0x800; ioport unsigned int *emirst=(unsigned int *)0x801; ioport unsigned int *ce01 =(unsigned int *)0x803; ioport unsigned int *ce11 =(unsigned int *)0x806; ioport unsigned int *ce21 =(unsigned int *)0x809; ioport unsigned int *ce31 =(unsigned int *)0x80C; ioport unsigned int *sdc1 =(unsigned int *)0x80F; ioport unsigned int *init =(unsigned int *)0x812; ioport unsigned int *sdc2 =(unsigned int *)0x813; *ebsr = 0x221;/0xa01 *egcr = 0x200; *egcr = 0X220; *ce01 = 0X3000; *ce11 = 0X3fff; *ce21 = 0x1fff; *ce31 = 0x1000; *emirst = 0; *sdc1 = 0X5958; *sdc2 = 0X38F; *init = 0; 4.3 主程序ioport unsigned int * sysR = (unsigned int *)0x7fd;#define IDKCCMDRESET 2#define IDKCCMDCAPTURE 4#define IDKCCMDRESETRP 8#define IDKCCMDRESETWP 0x10#define IDKCCMDCOLOR 0x20#define IDKIMGREADY 2/ICETEK-TVP5150-E板控制寄存器定义#define IDKCCTRGR (*(unsigned short int *)0x601800)#define IDKCDATA (*(unsigned char *)0x601802)#define IDKCI2CR (*(unsigned short int *)0x601804)#define IDKCSTATUS (*(unsigned short int *)0x601806)#define I2C_REG (*(unsigned short int *)0x601804)#define CREG (*(unsigned short int *)0x400004)void Delay(unsigned int nTime);/延时void StartIIC(void);/启动I2C总线传输void StopIIC(void);/结束I2C总线传输void AckIIC(void);void WriteIIC(unsigned char data);/I2C总线传送控制字节void Init5150(void); /初始化ICETEK-TVP5150-E板void DelayMSEC(unsigned int nDelay);/延时void Close5150(void);/关闭ICETEK-TVP5150-E板#define VIDEOWIDTH 720/摄像头采集图像宽度#define VIDEOHEIGHT 288/摄像头采集图像高度#define IMGWIDTH 120/选取图像宽度#define IMGHEIGHT 120/选取图像高度#define XSTART 0/选取图像x方向起始点#define YSTART 0/选取图像y方向起始点#define XSAMPLE 6/x方向采集率#define YSAMPLE 2.4/y方向采集率#define IMGBUFFER 0x200000#define phi360/选择要旋转的角度#define theta (phi/180.0*acos(-1)/unsigned int *www;unsigned int buffer724,yIMGWIDTHIMGHEIGHT;FARPTR lpImage,pImage;main()long int i,j,x,xx;int c,xstart,ystart,xsample,ysample;unsigned char cWork,ccc;long xData,yData;pImage=lpImage=IMGBUFFER;xx=1;c=0;for ( j=0;jIMGWIDTH;j+ )把缓存清零for ( i=0;iIMGHEIGHT;i+ )yji=0;/y变量赋初值SDRAM_init();CLK_init(0x21f3);/设置DSP时钟CREG=1;/使能外部总线接口,选择储存器是SDRAMxsample=XSAMPLE;/横向抽样率ysample=YSAMPLE;/纵向抽样率xstart=XSTART;/起始象素ystart=YSTART;/起始行(*sysR)=2;Init5150();/初始化ICETEK-TVP5150-ECLK_init(0x22d3);/提高DSP运行速度(*sysR)=0;while(1)if(xx)/通过控制FIFO读取图像IDKCCTRGR=IDKCCMDRESET; /复位ICETEK-TVP5150-EDelay(16);IDKCCTRGR=0;Delay(16);IDKCCTRGR=IDKCCMDRESETWP;/复位FIFO写指针Delay(16);IDKCCTRGR=IDKCCMDCAPTURE; /开始采集图象Delay(20);IDKCCTRGR=0;Delay(20);x=0;IDKCCTRGR=IDKCCMDRESETRP;Delay(20);IDKCCTRGR=0;Delay(20);cWork=IDKCDATA;Delay(20);x=0;for ( i=0;i724;i+ )bufferi=0;for ( i=0;ic;i+ )cWork=IDKCDATA;/将数值存入变量for ( j=0;jVIDEOHEIGHT;j+ )cWork=IDKCDATA;cWork=IDKCDATA;for ( i=0;iVIDEOWIDTH;i+ )cWork=IDKCDATA;bufferi=cWork;/将像素存入buffer缓存far_poke(lpImage+,cWork);/向扩展存储器地址写入一个整数if ( x=ystart &(j%ysample=0) )/ 抽样生成120x96尺寸图象for ( i=0;i= 0)&(xData = 0)&(yData = (IMGHEIGHT -1)yxDatayData = bufferi*xsample+xstart;/将抽样后的图像存入缓存yx+;ccc=IDKCSTATUS;x=0;/ BREAK POINT 在此加软件断点void StartIIC(void)I2C_REG = 0x05;/*00100101:sda,scl = 1 */DelayMSEC(1);I2C_REG = 0x04;/*00100100:sda= 0,scl = 1 */DelayMSEC(1);void StopIIC(void)I2C_REG = 0x024;/*00100101:sda = 0,scl = 1 */DelayMSEC(1);I2C_REG = 0x025;/*00100101:sda,scl = 1 */DelayMSEC(1);void AckIIC(void)I2C_REG = 0x020;/*00100101:sda=z,scl = 0 */I2C_REG = 0x022;/*00100101:sda=z,scl = 0 */DelayMSEC(1);I2C_REG = 0x026;/*00100101:sda=z,scl = 1 */DelayMSEC(1);I2C_REG = 0x022;/*00100101:sda=z,scl = 0 */DelayMSEC(1);I2C_REG = 0x021;/*00100101:sda=1,scl = 0 */DelayMSEC(1);void WriteIIC(unsigned char data)unsigned char BitCounter = 8;unsigned char Temp;unsigned int reg_val;reg_val = 0x020;I2C_REG = 0x20;/*SCL 置低 sda 置低*/DelayMSEC(1);/*延时*/doTemp = data;reg_val &= 0x0fffffffb;I2C_REG = reg_val;/*SCL 置低*/DelayMSEC(1);/*延时*/if(Temp&0x80)=0x80)reg_val |= 0x01;/*如果最高位是1*/elsereg_val &= 0x0fffffe;I2C_REG = reg_val;/*设置SDA*/DelayMSEC(1);/*延时*/reg_val |= 0x004;I2C_REG = reg_val;/*SCL 置高*/DelayMSEC(1);/*延时*/Temp = data1;data = Temp;BitCounter -;while(BitCounter);reg_val &= 0x0fffffffb;I2C_REG = reg_val;/*SCL 置低*/DelayMSEC(3);/*延时*/void Init5150(void) /使用TVP5150作为图像解码芯片,IIC总线控制StartIIC();WriteIIC(0x0ba);AckIIC();WriteIIC(0x03);AckIIC();WriteIIC(0x08f);AckIIC();WriteIIC(0x06);/ y onlyAckIIC();WriteIIC(0x010);AckIIC();StopIIC();DelayMSEC(10);void DelayMSEC(unsigned int nDelay)unsigned int i,k;for ( i=0;i DARAM;存放程序代码 .vectors: VECT .trcinit: DARAM .gblinit: DARAM frt: DARAM .cinit: DARAM;存放程序中的变量初值和常量 .pinit: DARAM .sysinit: DARAM .bss: SDRAM;为程序中的全局和静态变量保留存储空间 .far: DARAM2;为程序中用far声明的全局和静态变量保留空间 .const: DARAM2;存放程序中的字符常量、浮点常量和用const声明的变量 .switch: DARAM2;存放程序中switch语句的跳转地址表 .sysmem: DARAM2;用于程序中的malloc、calloc和realoc函数动态分配存储空间(C语言的堆) .cio: DARAM2 .MEM$obj: DARAM2 .sysheap: DARAM2 .sysstack DARAM2 .stack: DARAM2;为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果(C语言的栈) .image: SDRAM5 程序调试运行5.1 程序测试流程图图2 程序测试流程图5.2 程序测试 配置CCS 3.3软件,芯片选择C5509A XDS510 Emulator,安装好驱动程序后连接到ICETEK DSP教学试验箱,打开目标程序工程文件。 编译已经编写成功的程序,编译成功后在合适位置添加软件断点,如图3所示:图3 添加程序断点 导入并执行.out文件,采集图像,如图4所示:图4 执行.out文件 设置旋转后图像参数,如图5:图5 设置参数 显示旋转后图像,并修改不同旋转角度,并记录结果如下:图6 原图图7 顺时针旋转90度图8 逆时针旋转90度图9 顺时针旋转180度修改旋转角度,调整图像旋转,然后观察旋转后生成的图像,并用其与原图像相比。从

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论