DSP实习报告模板.docx

上传人:b****8 文档编号:12853018 上传时间:2023-06-08 格式:DOCX 页数:23 大小:412.50KB
下载 相关 举报
DSP实习报告模板.docx_第1页
第1页 / 共23页
DSP实习报告模板.docx_第2页
第2页 / 共23页
DSP实习报告模板.docx_第3页
第3页 / 共23页
DSP实习报告模板.docx_第4页
第4页 / 共23页
DSP实习报告模板.docx_第5页
第5页 / 共23页
DSP实习报告模板.docx_第6页
第6页 / 共23页
DSP实习报告模板.docx_第7页
第7页 / 共23页
DSP实习报告模板.docx_第8页
第8页 / 共23页
DSP实习报告模板.docx_第9页
第9页 / 共23页
DSP实习报告模板.docx_第10页
第10页 / 共23页
DSP实习报告模板.docx_第11页
第11页 / 共23页
DSP实习报告模板.docx_第12页
第12页 / 共23页
DSP实习报告模板.docx_第13页
第13页 / 共23页
DSP实习报告模板.docx_第14页
第14页 / 共23页
DSP实习报告模板.docx_第15页
第15页 / 共23页
DSP实习报告模板.docx_第16页
第16页 / 共23页
DSP实习报告模板.docx_第17页
第17页 / 共23页
DSP实习报告模板.docx_第18页
第18页 / 共23页
DSP实习报告模板.docx_第19页
第19页 / 共23页
DSP实习报告模板.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DSP实习报告模板.docx

《DSP实习报告模板.docx》由会员分享,可在线阅读,更多相关《DSP实习报告模板.docx(23页珍藏版)》请在冰点文库上搜索。

DSP实习报告模板.docx

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

-stack1000

-heap1000

-sysstack1000

-lrts55x.lib

以及DARAM2:

o=0x8100,l=0x30000

8)打开液晶显示的工程文件,利用字模显示工具分别对所需要显示的字进行字模显示,得到扫描代码,对原有工程文件主函数进行修改,再对key,c的主函数进行添加和修改。

9)编译并下载程序

10)打开观察窗口

进行窗口设各项参数设置,分别打开三个,一个用于原图显示,一个用于直方图显示,一个用于处理后图像显示。

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

3.主要的代码

◆主函数

main()

{

intdbScanCode,i;

PLL_Init(20);

SDRAM_init();

InitCTR();

TurnOnLCD();//打开显示

LCDCLS();//清除显示内存

CTRLCDCMDR=LCDCMDSTARTLINE;//设置显示起始行

Delay(LCDDELAY);

CTRLCDCR=0;

Delay(LCDDELAY);

for(;;)

{

CTRLCDCMDR=LCDCMDPAGE;//设置操作页=0

Delay(LCDDELAY);

CTRLCDCR=0;

Delay(LCDDELAY);

CTRLCDCMDR=LCDCMDVERADDRESS;//起始列=0

Delay(LCDDELAY);

CTRLCDCR=0;

Delay(LCDDELAY);

dbScanCode=GetKey();

dbScanCode&=0x0ff;

if(dbScanCode==SCANCODE_9)break;

switch(dbScanCode)

{

case1:

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;

case2:

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;

case3:

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);//BreakPoint

Laplace(IMAGEWIDTH,IMAGEHEIGHT);

break;

case4:

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;

case5:

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);//BreakPoint

Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);

Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);

Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);

InitImage(MODEPHOTO1,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint

Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);

Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);

Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);

InitImage(MODEPHOTO2,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint

Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);

Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);

Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);

InitImage(MODEPHOTO3,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint

Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);

Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);

Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);

InitImage(MODEPHOTO4,dbImage,IMAGEWIDTH,IMAGEHEIGHT);//BreakPoint

Histogram(dbImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram);

Enhance(dbImage,dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram,fHistogram1);

Histogram(dbTargetImage,IMAGEWIDTH,IMAGEHEIGHT,fHistogram1);

while

(1);

break;

case6:

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;

case7:

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;

case8:

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);

}

 

voidHistogram(unsignedchar*pImage,intnWidth,intnHeight,floatfHisto[256])

{

inti,j;

unsignedintuWork;

unsignedchar*pWork;

for(i=0;i<256;i++)fHisto[i]=0.0f;

pWork=pImage;

for(i=0;i

{

for(j=0;j

{

uWork=(unsignedint)(*pWork);

fHisto[uWork]++;

}

}

uWork=nWidth*nHeight;

for(i=0;i<256;i++)

{

fHisto[i]/=uWork;

fHisto[i]*=100;

}

}

 

voidEnhance(unsignedchar*pImage,unsignedchar*pImage1,intnWidth,intnHeight,floatfHisto[256],floatfHisto1[256])

{

inti,j;

unsignedintuWork;

unsignedchar*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

for(j=0;j

(*pWork1)=lut[(*pWork)];

}

◆字显示部分的修改代码

unsignedcharledkey[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,0x04,0x00,0x

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2