《DSP嵌入式图像处理设计.docx》由会员分享,可在线阅读,更多相关《DSP嵌入式图像处理设计.docx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计报告(数字图像综合设计)题 目 嵌入式DSP图像处理 专业、学号 电信 授课班号 学生姓名 屠东浪 指导教师 霍冠英 摘要针对现在的过程检测的实时需求,设计出一种成本低,功能始终的图像处理采集系统。该系统以DSP为核心并配上外围电路实现图像处理功能,在加上多种通讯接口设计的图像传输通道,然后摄像头用于采集图像数据。最后基于DSP嵌入式操作系统设计了一种图像处理方法,在系统中实现了图像中值滤波、图像边缘检测。实验表明,该系统能够很好地解决在线处理功能的实时问题,图像处理的准确率也满足了过程检测系统的要求,而且实现简单,成本比较低,特别适合对于功耗、体积要求较严格的过程检测系统。关键词 :
2、DSP 图像处理系统 中值滤波 边缘检测目 录第一章 课程设计的任务和目的5第二章 课程设计设备第三章 硬件功能描述第四章 软件安装及其开发流程介绍第五章 程序设计模块 5.1图像采集、显示模块 5.2图像处理模块第六章 心得体会16第七章 参考文献17一、 课程设计的任务和目的(1) 掌握Code Composer Studio2.2 的安装和配置,熟悉TMS320C6000软件开发过程:创建工程和管理工程、编译和调试、使用观察窗口、了解图形功能(实验书P40-45);(2) 了解边缘检测的算法和用途,利用Sobel 算子进行边缘检测,实现基于Sobel算子的边缘检测方法(实验书P106-1
3、08) ; (3) 在(2)的基础上,修改核心代码,调试实现基于Prewitt算子的边缘检测方法;(4) 在边缘检测前,加中值滤波,去除噪声,进一步提高Prewitt算子边缘检测的效果(选做)二、 课程设计设备(1) 计算机一台(2) ICETEK-DM642-P4 实验箱三、 硬件功能描述ICETEK-DM642-P4 评估板上的 DSP 芯片通过 64bit 的EMIF 接口或 8/16bit 的3 路视频口连接板上外围设备。SDRAM、Flash、FPGA 和UART 每一个设备占用其中的一个接口。EMIF接口也连接扩展背板接口,扩展背板接口用来连接背板。评估板上的视频解码器和编码器连接
4、到视频端口和扩展连接器上。评估板上的4 个解码器 和 1 个编码器符合标准规范。评估板上的 AIC23B 多媒体编解码器允许DSP 进行模拟音频信号的输出和接收。I2C 总线用来控制编解码器端口,McASP 接口被用来控制数据。模拟信号通过 3 个 3.5mm 的音频插座进行输入输出,其相应的分别是(从下到上)直接输出(line output)、麦克风输入(microphone input)和直接输入(line input)。编解码器可以选择麦克风输入或直接输入作为主动输入,模拟输出被指定为直接输出接口。McASP 接口可以通过软件重新设定成为一个扩展接口。可编程逻辑门阵列又被称为 FPGA,
5、基于FPGA 上扩展了用户 I/O 口,硬盘接口,主要是给用户用来做二次开发。评估板还包括四个用户指示灯,用户可以利用这些指示灯进行交互式的反馈试验。这些指示灯是通过读写CPLD 寄存器(0x900C0000)来进行控制的。 尽管当ICETEK-DM642-P4 评估板插在PCI 插槽上使用时,PC 总线会给评估板供电,评估板上仍设计有+5V 输入电源作为独立的器件为评估板供电。评估板上的配电系统为DSP 内核提供+1.4V 的电压,为DSP 的I/O 接口提供+3.3V 的电压。在评估板电源供给正常之前,评估板保持复位状态。评估板上还设计有电源芯片为编码器和解码器提供+1.8V 电压。Cod
6、e Composer Studio 与评估板通过 14 针或60 针的扩展JTAG 端口进行连接通信。 ICETEK-DM642-P4评估板由TI 公司的CCS 软件工具进行开发。Code Composer Studio 与 ICETEK-DM642-P4 评估板通过JTAG 扩展仿真接口进行连接通信。您可根据实验系统安装说 明来安装CCS 软件。这个过程将安装所有的开发工具、文档和驱动程序。 ICETEK-DM642-P4 评估板四、 软件安装及其开发流程介绍(1) 掌握Code Composer Studio2.21 的安装和配置。(2) 了解DSP 开发系统和计算机与目标系统的连接方法。
7、(3) 了解Code Composer Studio2.21 软件的操作环境和基本功能,了解TMS320C6000 开发过程。 学习创建工程和管理工程的方法。 了解基本的编译和调试功能。 学习使用观察窗口。 了解图形功能的使用。 (4)开发TMS320C6000 应用系统一般需要以下几个调试工具来完成:软件集成开发环境(Code Composer Studio2.21):完成系统的软件开发,进行软件和硬件仿真调试。它也是硬件调试的辅助手段;开发系统(ICETEK 5100 USB):实现硬件仿真调试时与硬件系统的通信,控制和读取硬件系统的状态和数据。评估模块(ICETEK-DM642-P4等)
8、:提供软件运行和调试的平台和用户系统开发的参照。(5)Code Composer Studio2.21 主要完成系统的软件开发和调试。它提供一整套的程序编制、维护、编译、调试环境,能将汇编语言和C 语言程序编译连接生成 COFF (公共目标文件)格式的可执行文件,并能将程序下载到目标DSP 上运行调试。(6)用户系统的软件部分可以由Code Composer Studio 建立的工程文件进行管理,工程文件一般包含以下几种文件:源程序文件:C 语言或汇编语言文件(*.ASM 或*.C)、头文件(*.H)、命令文件(*.CMD)、库文件(*.LIB,*.OBJ)。(6)开发流程:实验准备设置 Co
9、de Composer Studio2.2 在硬件仿真(Emulator)方式下运行请参照第二部分,第二章操作。启动Code Composer Studio2.2双击桌面上“CCS 2(C6000)”,启动Code Composer Studio2.2;如果无法进入CCS软件,请参照第二部分,第三章操作,排除问题。创建新的工程文件:选择菜单“Project”的“New ”项;在“Project Creation”对话框中,在“Project”项 输 入 USECCS ; 单 击 “Location ” 项 末 尾 的 浏 览 按 钮 , 改 变 目 录 到C:ICETEK-DM642-P4La
10、b501-USECCS,单击“OK”;单击“完成”;这时建立的是一个空的工程文件;展开主窗口左侧工程管理窗口中“Projects ”下新建立的 “USECCS .pjt ”,其中各项均为空。提示:如果要创建文件库,只需在建立新工程时,将“Project”中的选项更改为Library(.Lib)即可在工程文件中添加程序文件:选择菜单“Project”的“Add Files to Project”项;在“Add Files to Project”对话框中选择文件目录为Lab501-USECCS,改变文件类型为“C Source Files(*.c;*.ccc)”,选择显示出来的文件“volum.c
11、 ”;重复上述各步骤,添加 volume.cmd 、load.asm 、vectors.asm 文件到 USECCS 工程中(如没有找到相应的文件,请选择改变文件类型来找);添加C:tiC6000cgtoolslibrts6400.lib。 选择菜单“Project”的“Rebuild All”项;注意编译过程中 CCS 主窗口下部的“Build提示窗中显示编译信息,最后将给出错误和警告的统计数。基本调试功能:执 行 FileLoad Program , 在 随 后 打 开 的 对 话 框 中 选 择 刚 刚 建 立 的Lab501-USECCSDebugUSECCS.out 文件。2.在项目
12、浏览窗口中,双击 volume.c 激活这个文件,移动光标到 main()行上,右击鼠标选择Toggle Breakpoint 或按F9 设置断点。3.选择 DebugRun 或按F5 运行程序,程序会自动停在main()函数头上。 按F10 执行到write_buffer()函数上。 再按F8,程序将转到write_buffer 函数中运行。 此时,为了返回主函数,按shift-F7 完成write_buffer 函数的执行。 再次执行到write_buffer 一行,按F10 执行程序,对比与F8 执行 的不同五、 程序设计模块5.1图像采集、显示模块 /* * Copyright 200
13、3 by Texas Instruments Incorporated. * All rights reserved. Property of Texas Instruments Incorporated. * Restricted rights to use, duplicate or disclose this code are * granted through contract. * */* (#) DDK 1.10.00.23 07-02-03 (ddk-b12) */#include #include #include #include #include #include #inc
14、lude #include #include #include #include #include #include tvp5150a.h#include #include vcapparams.h#include vdisparams.h #include ICETEK-DM642-PCI.h/extern unsigned char nMemTemp720;/extern unsigned char imgHistoHISTOHIGH*HISTOWIDTH;extern Int EXTERNALHEAP;extern unsigned char nMemTemp720*3;extern u
15、nsigned int m_nOffset1,m_nOffset2,m_nOffset3;/* heap IDs defined in the BIOS configuration file */* * = main = */main() /*/ /* open CSL DAT module for fast copy */ /*/ CSL_init(); CACHE_clean(CACHE_L2ALL, 0, 0); /CACHE_setL2Mode(CACHE_256KCACHE); CACHE_setL2Mode(CACHE_0KCACHE); CACHE_enableCaching(C
16、ACHE_EMIFA_CE00); CACHE_enableCaching(CACHE_EMIFA_CE01); DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D); ICETEKDM642PCIBoardInit(); /* * = tskVideoLoopback = * video loopback function. */Int frames = 0;void tskVideoLoopback() Int i; unsigned int m_nID;/ int m_nWork; Int status; FVID_Handle disChan;
17、FVID_Frame *disFrameBuf; Int numLinesDis = EVMDM642_vDisParamsChan.imgVSizeFld1; Int numLinesCap = EVMDM642_vCapParamsChan.fldYStop1 - EVMDM642_vCapParamsChan.fldYStrt1+1; Int numLines = (numLinesDis numLinesCap) ? numLinesCap : numLinesDis; FVID_Handle capChan; Int numPixels = EVMDM642_vCapParamsCh
18、an.fldXStop1 - EVMDM642_vCapParamsChan.fldXStrt1+1; FVID_Frame *capFrameBuf; Int capLinePitch = EVMDM642_vCapParamsChan.fldXStop1 - EVMDM642_vCapParamsChan.fldXStrt1+1; Int disLinePitch = EVMDM642_vDisParamsChan.imgHSizeFld1; mInitVPort(); numLines *= 2; /* both fields */ /*/ /* allocate both captur
19、e and display frame buffers */ /* in external heap memory */ /*/ EVMDM642_vCapParamsChan.segId = EXTERNALHEAP; EVMDM642_vDisParamsChan.segId = EXTERNALHEAP; EVMDM642_vDisParamsSAA7105.hI2C = EVMDM642_I2C_hI2C; EVMDM642_vCapParamsTVP5150A.hI2C = EVMDM642_I2C_hI2C; /*/ /* initialization of capture dri
20、ver */ /*/ mSet5150Ready(TRUE,FALSE,FALSE,FALSE);/ 使能视频通道1,接下来将发送配置命令 capChan = FVID_create(/VP0CAPTURE/A/0, / 初始化与通道1相连的VPort口 IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan, NULL);/ 通道1: /VP0CAPTURE/A/0/ 通道2: /VP0CAPTURE/B/0/ 通道3: /VP1CAPTURE/A/0/ 通道4: /VP1CAPTURE/B/0 /*/ /* initialization of d
21、isplay driver */ /*/ disChan = FVID_create(/VP2DISPLAY, IOM_OUTPUT, &status, (Ptr)&EVMDM642_vDisParamsChan, NULL); /*/ /* configure video encoder & decoder */ /*/ FVID_control(disChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, (Ptr)&EVMDM642_vDisParamsSAA7105); FVID_control(capChan, VPORT_CMD_EDC_BASE + EDC_
22、CONFIG, (Ptr)&EVMDM642_vCapParamsTVP5150A); /*/ /* start capture & display operation */ /*/ FVID_control(disChan, VPORT_CMD_START, NULL); FVID_control(capChan, VPORT_CMD_START, NULL); /*/ /* request a frame buffer from display & capture driver */ /*/ FVID_alloc(disChan, &disFrameBuf); FVID_alloc(cap
23、Chan, &capFrameBuf); frames +; while ( 1 ) for ( i = 0; i frame.iFrm.y1+i*capLinePitch,nMemTemp,numPixels);DAT_wait(m_nID);/ICETEKDM642PCIStatistic();if ( i144 & iframe.iFrm.y1+i*disLinePitch,numPixels);/*ICETEKDM642PCIHistogram(); DAT_copy2d(DAT_1D2D, imgHisto, disFrameBuf-frame.iFrm.y1+410*720+30,
24、 HISTOWIDTH,HISTOHIGH,720); */ DAT_wait(DAT_XFRID_WAITALL); FVID_exchange(capChan, &capFrameBuf); FVID_exchange(disChan, &disFrameBuf); frames +; void prdFrameCount()EVMDM642_rset(EVMDM642_LED, frames);frames = 0; 5.2图像处理模块 Sobel边缘检测#pragma CODE_SECTION(ICETEKDM642PCISobel,.text1)void ICETEKDM642PCI
25、Sobel(unsigned char x)unsigned int m_nID; m_nID=DAT_copy(x+180,cLines+m_nOffset3,MWIDTH);pImg1=cLines; pImg1+=m_nOffset1;pImg2=cLines; pImg2+=m_nOffset2;pImg3=cLines; pImg3+=m_nOffset3;x1=(*pImg1); pImg1+; x2=(*pImg1); pImg1+;x4=(*pImg2); pImg2+; x5=(*pImg2); pImg2+;x7=(*pImg3); pImg3+; x8=(*pImg3);
26、 pImg3+;for ( mi=0;miMWIDTH;mi+,pImg1+,pImg2+,pImg3+ )x3=(*pImg1); x6=(*pImg2); x9=(*pImg3);m_nWork1=x7+x8+x8-x2-x2-x3;m_nWork2=x3-x4-x4+x6+x6-x7; /sobel算子边缘检测/m_nWork1=x7+x8-x2-x3;m_nWork2=x3-x4+x6-x7;/Prewitt算子边缘检测if ( m_nWork1255 )m_nWork2=255;else if ( m_nWork20)m_nWork2=0;xmi+180=m_nWork2;x1=x2
27、; x2=x3;x4=x5; x5=x6;x7=x8; x8=x9;xmi=0;m_nWork=m_nOffset1; m_nOffset1=m_nOffset2;m_nOffset2=m_nOffset3; m_nOffset3=m_nWork; 中值滤波#pragma CODE_SECTION(GetMiddleValue,.text1)unsigned char GetMiddleValue()int i,j;cBuffer0=x1; cBuffer1=x2; cBuffer2=x3;cBuffer3=x4; cBuffer4=x5; cBuffer5=x6;cBuffer6=x7; c
28、Buffer7=x8; cBuffer8=x9;for ( i=0;i8;i+ )for ( j=i;jcBufferj )cWork=cBufferi;cBufferi=cBufferj;cBufferj=cWork;return cBuffer5;#pragma CODE_SECTION(ICETEKDM642PCIMedianFilter,.text1)void ICETEKDM642PCIMedianFilter(unsigned char x)unsigned int m_nID; m_nID=DAT_copy(x+180,cLines+m_nOffset3,MWIDTH);/DAT
29、_wait(m_nID);/pImg1=nMemTemp;/pImg3=cLines; pImg3+=m_nOffset3;/for ( mi=0;mi720;mi+,pImg1+,pImg3+ )/(*pImg3)=(*pImg1);pImg1=cLines; pImg1+=m_nOffset1;pImg2=cLines; pImg2+=m_nOffset2;pImg3=cLines; pImg3+=m_nOffset3;x1=(*pImg1); pImg1+; x2=(*pImg1); pImg1+;x4=(*pImg2); pImg2+; x5=(*pImg2); pImg2+;x7=(
30、*pImg3); pImg3+; x8=(*pImg3); pImg3+;for ( mi=2;miMWIDTH;mi+,pImg1+,pImg2+,pImg3+ )x3=(*pImg1); x6=(*pImg2); x9=(*pImg3);xmi+180=GetMiddleValue();x1=x2; x2=x3;x4=x5; x5=x6;x7=x8; x8=x9;xmi=0;m_nWork=m_nOffset1; m_nOffset1=m_nOffset2;m_nOffset2=m_nOffset3; m_nOffset3=m_nWork;六、 心得体会为期两周的课程设计结束了,这次的课程
31、设计给我们很大的收获,使我们对DSP嵌入式相关的基本知识有了进一步的提高,并在实践中对各种概念有了进一步的深化,开始的时候总觉得很简单的课程设计,因为软件部分确实不是很难的,所以在做硬件部分的时候都没有认真做,后来做起来才知道不是那么简单。程序的设计思想的精巧的重要性,是不管怎么说都不为过的,好的设计可以让大家很快的明白你的思想,而且很方便的来实现它。此次课程设计的主要目的是完成对图像的一些基本处理,比如图像的采集、显示、图像的滤波、图像的边缘检测等。尤其是图像滤波处理,图像在生成和传输过程中常受到各种嗓声的干扰和影响,使图像质量下降。为了抑制噪声改善图像质量,必须对图像进行去噪(中值滤波)处
32、理。通常,将数字图像的平滑技术划分为两类。一类是全局处理,即对噪声图像的整体或大的块进行校正得到平滑图像。但这类方法需要知道信号和噪声的统计模型,且运算量较大。另一类平滑技术是对噪声图像使用局部算子。当对某一像素进行平滑处理时,仅对它的局部小邻域的一些像素加以运算,其优点是计算效率高,而且可以多个像素并行处理,因此可以实现实时或者准实时处理。图像平滑处理实现包括平滑非线性滤波器(统计排序滤波器)和平滑线性滤波器(均值滤波)。随着科技的进步和社会的发展,数字视频图像的采集、存储、处理及传输技术在最近几年得到了广泛的应用,各类图像采集及处理系统已经逐渐深入到人们生活的各个方面与图像处理卡等传统图像处理系统相比,DSP嵌入式图像处理系统具有体积小、成本低、可靠性高等优点,在智能交通、远距离监控、计算机视觉等领域应用广泛。七、 参考文献1ICETEK-DM642-P4 实验指导书2陈峰编著,基于Blackfin DSP的数字图像处理,电子工业出版社,20093余成波.数字图象处理及MATLAB实现.重庆大学出版社,2007.8