当前位置:文档之家› DSP实习报告模板

DSP实习报告模板

DSP应用技术实习报告课程课题:基于DSP的键盘控制数字图像处理方式及LCD显示专业班级:电子信息科学与技术学生姓名:指导教师:邹修国李林徐友杨红兵完成时间:一、课程内容:✧掌握直方图统计的原理和程序设计✧了解边缘检测的算法和用途✧了解锐化的算法和用途✧了解取反的算法和用途✧掌握直方图均衡化增强的原理和程序设计✧了解液晶显示器的显示控制原理及编程方法✧了解键盘的使用原理及编程方法二、设计功能及工作原理能够实现功能:✓数字图像直方图统计✓数字图像边缘检测(Sobel算子)✓数字图像的锐化(LAPLACE算子)✓数字图像的取反✓数字图像直方图均衡化增强通过键盘的输入可以控制图像处理的方式,并且LCD显示何种处理方式。

工作原理:◆灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标表示的是该灰度出现的频率。

◆边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,也包括方向的确定。

大多数使用基于方向导数掩模求卷积的方法。

◆图像的锐化处理就是使模糊的图像变得更加清晰起来,拉普拉斯锐化法属于常用的一种微分锐化方法。

◆求反处理的图像与原来的图像黑白颠倒,取得类似照片底片的效果。

◆直方图增强的方法就是压缩直方图中比例少的像素所占用的灰度范围,多出来的灰度空间按照统计比例分配给直方图中比例高的像素使用。

三、设计过程1.各种功能工程的分别建立:✓数字图像直方图统计✓数字图像边缘检测(Sobel算子)✓数字图像的锐化(LAPLACE算子)✓数字图像的取反✓数字图像直方图均衡化增强✓键盘输入✓液晶显示器控制显示2.将各个功能模块进行组合:1)打开键盘输入的工程文件,浏览key.c文件内容;2)打开数字图像直方图统计的工程文件,将Histo.c主函数内的处理部分的代码复制到key.c文件的case1语句后;3)打开数字图像边缘检测的工程文件,将Image.c主函数内的处理不放入内的代码复制到key.c文件的case2语句后;4)打开数字图像锐化的工程文件,将Image.c主函数内的处理不放入内的代码复制到key.c文件的case3语句后;5)打开数字图像取反的工程文件,将Image.c主函数内的处理不放入内的代码复制到key.c文件的case4语句后;6)打开数字图像直方图均衡化增强的工程文件,将Histo.c主函数内的处理不放入内的代码复制到key.c文件的case5语句后;7)内存空间的修改,打开cmd代码,做以下修改-w-stack 1000-heap 1000-sysstack 1000-l rts55x.lib以及DARAM2: o=0x8100, l=0x300008)打开液晶显示的工程文件,利用字模显示工具分别对所需要显示的字进行字模显示,得到扫描代码,对原有工程文件主函数进行修改,再对key,c的主函数进行添加和修改。

9)编译并下载程序10)打开观察窗口进行窗口设各项参数设置,分别打开三个,一个用于原图显示,一个用于直方图显示,一个用于处理后图像显示。

进行断点调试,观察图像变化,以及LCD显示。

3.主要的代码主函数main(){int dbScanCode,i;PLL_Init(20);SDRAM_init();InitCTR();TurnOnLCD(); // 打开显示LCDCLS(); // 清除显示内存CTRLCDCMDR=LCDCMDSTARTLINE; // 设置显示起始行Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for (;;){CTRLCDCMDR=LCDCMDPAGE; // 设置操作页=0Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS; // 起始列=0Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);dbScanCode=GetKey();dbScanCode&=0x0ff;if(dbScanCode==SCANCODE_9) break;switch(dbScanCode){case 1:CTRLR=0x1;CTRLR=0x40;for ( i=0;i<50;i++ ){CTRLCDRCR=ledkey[1][i]; // 屏幕左侧第1至8行第i列赋值 port8002=0; // (赋值后当前操作列自动加1,所以不需设置)Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}Delay(512);InitImage(MODEGRAYBAR,dbImage,IMAGEWIDTH,IMAGEHEIGHT);Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);InitImage(MODEGRAY,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);InitImage(MODEPHOTO1,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);InitImage(MODEPHOTO2,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);InitImage(MODEPHOTO3,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);InitImage(MODEPHOTO4,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);break;case 2:CTRLR=0x2;CTRLR=0x40;for ( i=0;i<50;i++ ){CTRLCDRCR=ledkey[2][i]; // 屏幕左侧第1至8行第i列赋值 port8002=0; // (赋值后当前操作列自动加1,所以不需设置)Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}Delay(512);InitImage(MODEGRAYBAR,dbImage,IMAGEWIDTH,IMAGEHEIGHT);Sobel(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEGRAY,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Sobel(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO1,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint Sobel(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO2,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint Sobel(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO3,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Sobel(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO4,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Sobel(IMAGEWIDTH,IMAGEHEIGHT);break;case 3:CTRLR=0x4;CTRLR=0x40;for ( i=0;i<50;i++ ){CTRLCDRCR=ledkey[3][i]; // 屏幕左侧第1至8行第i列赋值port8002=0; // (赋值后当前操作列自动加1,所以不需设置)Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}Delay(512);InitImage(MODEGRAYBAR,dbImage,IMAGEWIDTH,IMAGEHEIGHT);Laplace(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEGRAY,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Laplace(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO1,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint Laplace(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO2,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint Laplace(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO3,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint Laplace(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO4,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPointLaplace(IMAGEWIDTH,IMAGEHEIGHT);break;case 4:CTRLR=0x0;CTRLR=0x48;for ( i=0;i<50;i++ ){CTRLCDRCR=ledkey[4][i]; // 屏幕左侧第1至8行第i列赋值port8002=0; // (赋值后当前操作列自动加1,所以不需设置)Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}Delay(512);InitImage(MODEGRAYBAR,dbImage,IMAGEWIDTH,IMAGEHEIGHT);Reverse(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEGRAY,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPoint Reverse(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO1,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint Reverse(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO2,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint Reverse(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO3,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint Reverse(IMAGEWIDTH,IMAGEHEIGHT);InitImage(MODEPHOTO4,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint Reverse(IMAGEWIDTH,IMAGEHEIGHT);break;case 5:CTRLR=0x0;CTRLR=0x50;for ( i=0;i<50;i++ ){CTRLCDRCR=ledkey[5][i]; // 屏幕左侧第1至8行第i列赋值port8002=0; // (赋值后当前操作列自动加1,所以不需设置)Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}Delay(512);InitImage(MODEGRAYBAR,dbImage,IMAGEWIDTH,IMAGEHEIGHT);Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1); Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);InitImage(MODEGRAY,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPointHistogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);InitImage(MODEPHOTO1,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPointHistogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);InitImage(MODEPHOTO2,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPointHistogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);InitImage(MODEPHOTO3,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPointHistogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);InitImage(MODEPHOTO4,dbImage,IMAGEWIDTH,IMAGEHEIGHT); //BreakPointHistogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);while(1);break;case 6:for ( i=0;i<50;i++ ){CTRLCDRCR=ledkey[6][i]; // 屏幕左侧第1至8行第i列赋值port8002=0; // (赋值后当前操作列自动加1,所以不需设置)Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}Delay(512);CTRLR=0x0;CTRLR=0x60;break;case 7:for ( i=0;i<50;i++ ){CTRLCDRCR=ledkey[7][i]; // 屏幕左侧第1至8行第i列赋值port8002=0; // (赋值后当前操作列自动加1,所以不需设置)Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}Delay(512);CTRLR=0x8;CTRLR=0x40;break;case 8:for ( i=0;i<50;i++ ){CTRLCDRCR=ledkey[8][i]; // 屏幕左侧第1至8行第i列赋值 port8002=0; // (赋值后当前操作列自动加1,所以不需设置)Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}Delay(512);CTRLR=0x10;CTRLR=0x40;break;}Delay(16);}CloseCTR();exit(0);}void Histogram(unsigned char *pImage,int nWidth,int nHeight,float fHisto[256]) {int i,j;unsigned int uWork;unsigned char *pWork;for ( i=0;i<256;i++ ) fHisto[i]=0.0f;pWork=pImage;for ( i=0;i<nHeight;i++ ){for ( j=0;j<nWidth;j++,pWork++ ){uWork=(unsigned int)(*pWork);fHisto[uWork]++;}}uWork=nWidth*nHeight;for ( i=0;i<256;i++ ){fHisto[i]/=uWork;fHisto[i]*=100;}}void Enhance(unsigned char *pImage,unsigned char *pImage1,int nWidth,int nHeight,float fHisto[256],float fHisto1[256]){int i,j;unsigned int uWork;unsigned char *pWork,*pWork1;for ( i=0;i<256;i++ )fHisto1[i]=fHisto[i]/100;for ( i=1;i<256;i++ )fHisto1[i]+=fHisto1[i-1];for ( i=0;i<256;i++ )lut[i]=fHisto1[i]*256;for ( i=0;i<256;i++ )if ( lut[i]>=256 )lut[i]=255;pWork=pImage; pWork1=pImage1;for ( i=0;i<nHeight;i++ )for ( j=0;j<nWidth;j++,pWork++,pWork1++ )(*pWork1)=lut[(*pWork)];}字显示部分的修改代码unsigned char ledkey[10][50]={{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00}, //0{0xFC,0x00,0x20,0x00,0x20,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0xFC ,0x00,0x84,0x00,0x00,0x00,0x4C,0x00,0x92,0x00,0x92,0x00,0x64,0x00,0x00,0x00,0x0 4,0x00,0x04,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x 78,0x00,0x00,0x00}, //1{0x4C,0x00,0x92,0x00,0x92,0x00,0x64,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x84 ,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x94,0x00,0x94,0x00,0x6C,0x00,0x0 0,0x00,0xFC,0x00,0x94,0x00,0x94,0x00,0x84,0x00,0x00,0x00,0xFC,0x00,0x80,0x00,0x 80,0x00,0x80,0x00}, //2{0x00,0x00,0xFC,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0xF8,0x00,0x2C ,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x24,0x00,0x24,0x00,0x18,0x00,0x0 0,0x00,0xFC,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0xF8,0x00,0x2C,0x00,0x F8,0x00,0x00,0x00},{0xF8,0x00,0x14,0x00,0x14,0x00,0x34,0x00,0xC8,0x00,0x00,0x00,0xFC,0x00,0x94 ,0x00,0x94,0x00,0x84,0x00,0x00,0x00,0x7C,0x00,0x80,0x00,0x7C,0x00,0x00,0x00,0x0 0,0x00,0xFC,0x00,0x94,0x00,0x94,0x00,0x84,0x00,0xF8,0x00,0x14,0x00,0x14,0x00,0x 34,0x00,0xC8,0x00},{0x00,0x00,0xFC,0x00,0x94,0x00,0x94,0x00,0x84,0x00,0xFC,0x00,0x08,0x00,0x10 ,0x00,0x20,0x00,0xFC,0x00,0xFC,0x00,0x20,0x00,0x20,0x00,0xFC,0x00,0x00,0x00,0x0 0,0x00,0xF8,0x00,0x2C,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x08,0x00,0x10,0x00,0x 20,0x00,0xFC,0x00},{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00},{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00},{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}四、设计工程的仿真图形1. 数字图像直方图统计2. 数字图像边缘检测(Sobel)3. 数字图像锐化4.数字图像的取反5. 数字图像直方图均衡化增强五、对设计工程总结与评价经过仿真该系统能够完成预定的任务,我们的设计作品成功完成。

相关主题