东南大学系统实验(DSP)实验报告_第1页
东南大学系统实验(DSP)实验报告_第2页
东南大学系统实验(DSP)实验报告_第3页
东南大学系统实验(DSP)实验报告_第4页
东南大学系统实验(DSP)实验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

系统实验(DSP)实验报告实验题目=1\*GB2⑴图像的锐化处理(高通滤波处理)处理模板如下:对应数学表达式:=2\*GB2⑵图像的边缘检测的梯度分别为:总梯度幅度实验原理为了更加通俗地描述图像处理方法,这里引入模板的概念。模板就是一个矩阵,模板大小通常为22、33,模板也好比一个窗口,将模板窗口覆盖在图像上,窗口覆盖到的象素就是将要处理的象素,而象素所对应的模板矩阵元素的值就是加权值,模板运算就是将模板矩阵元素与对应的象素值相乘并求和。如下图所示,模板为33大小,对应到图像上窗口亦为33大小,窗口中有九个象素与模板相对应。模板第一行与、与、与图像模板示意图相对应,模板第二、三行依此类推。根据模板运行规则,33模板对应的表达式数学为:=1\*GB2⑴、图像的锐化处理锐化式可以用模板表示为:对应的数学表达式是:=2\*GB2⑵、图像的边界检测边界特点:沿边界走向特性变化比较缓慢,垂直于边界走向特性变化比较剧烈。间接检测:特性不连续性,检测梯度。二维图象的总梯度定义为:为了处理方便,也可采用如下定义:或总梯度简化为。常用检测方法如下:=1\*GB3①梯度法其梯度幅度为=2\*GB3②Roberts梯度=3\*GB3③平面拟合算子=4\*GB3④算子实验内容=1\*GB2⑴图像的锐化处理(高通滤波处理)C语言方法程序int*buffer_red_org,*buffer_green_org,*buffer_blue_org;int*buffer_red,*buffer_green,*buffer_blue;staticRead_RGB_Image();voidmain(){buffer_red_org=(int*)0x00010000;buffer_green_org=(int*)0x00020000;buffer_blue_org=(int*)0x00030000;buffer_red=(int*)0x00040000;buffer_green=(int*)0x00050000;buffer_blue=(int*)0x00060000;ImageWidth=250;ImageHeight=200;Read_RGB_Image("Fish250_200_RGB_CCS");ImageAcute(buffer_red,buffer_red_org);ImageAcute(buffer_green,buffer_green_org);ImageAcute(buffer_blue,buffer_blue_org);//ImageAcuteSub(ImageWidth,ImageHeight,buffer_red,buffer_red_org);//ImageAcuteSub(ImageWidth,ImageHeight,buffer_green,buffer_green_org);//ImageAcuteSub(ImageWidth,ImageHeight,buffer_blue,buffer_blue_org);}ImageAcute(int*buffer,int*buffer_org){inti;intx,y;intr;floata=0.25;i=ImageWidth+1;for(y=1;y<ImageHeight;y++) for(x=1;x<ImageWidth;x++){r=(1+4*a)*buffer_org[i]-a*(buffer_org[i-1]+buffer_org[i-ImageWidth]+buffer_org[i+1]+buffer_org[i+ImageWidth]);if(r>255)r=255;if(r<0)r=0;buffer[i++]=r;}}staticRead_RGB_Image(char*FileName){inti;intx,y;unsignedcharr,g,b,temp;FILE*fp;i=0; if(fp=fopen(FileName,"rb+")) {puts("readingdata\n"); for(y=0;y<ImageHeight;y++) for(x=0;x<ImageWidth;x++){fread(&r,sizeof(r),1,fp);fread(&g,sizeof(g),1,fp);fread(&b,sizeof(b),1,fp);fread(&temp,sizeof(temp),1,fp);buffer_red_org[i]=r;buffer_red[i]=r;buffer_green_org[i]=g;buffer_green[i]=g;buffer_blue_org[i]=b;buffer_blue[i]=b;i++;}fclose(fp);}elseputs("can'topenthefile\n");}程序说明图像锐化处理过程是对原图处理然后把处理后的新值赋给新图,这里是对buffer_red_org,buffer_green_org,buffer_blue_org处理,然后把处理后的值赋给buffer_red,buffer_green,buffer_blue。所以设置函数参数时需要把buffer_org和buffer同时作为函数参数。对图像模板进行处理时要考虑到边界问题,以图像的第一行第一列和最后一行最后一列的像素作为中心点时,不存在完整的3*3图像模板,所以我采取了对图像第一行第一列和最后一行最后一列像素不处理的措施。所以程序的循环体为for(y=1;y<ImageHeight;y++)for(x=1;x<ImageWidth;x++)即x,y都是从1开始计数到ImageHeight-1和ImageWidth-1结束。按处理公式编写C语言公式:r=(1+4*a)*buffer_org[i]-a*(buffer_org[i-1]+buffer_org[i-ImageWidth]+buffer_org[i+1]+buffer_org[i+ImageWidth]);这里对buffer_org数组的寻址进行了处理,即f(x-1)相当于buffer_org[i-1],f(y-1)相当于buffer_org[i-ImageWidth]。最后得出的要赋给新图的r值经过计算有可能大于255或小于0,但是图像像素的值只能在0到255之间,所以要进行限幅,当r>255时r=255,当r<0时,r=0。最后把r值赋给处理后的图像buffer。运行结果原图:处理后的新图:对比可以看出处理后的图的边界更清晰,原图比处理后的图模糊。汇编语言方法程序.mmregs.def_ImageAcuteSub.text_ImageAcuteSub:addt0,ar0add#1,ar0addt0,ar1add#1,ar1sub#1,t1movt1,hi(ac3)sub#1,t0mpyt0,ac3movac3,t0sub#1,t0movt0,brc0rptbENDmov#0,ac0add*ar1-<<#1,ac0add*ar1,ac1sub#249,ar1add*ar1,ac1add#251,ar1add*ar1,ac1add#249,ar1add*ar1,ac1sub#249,ar1subac1<<#-2,ac0mov#255,ac1cmpac0<ac1,TC1bccLIMIT,TC1mov#255,ac0LIMIT:mov#0,ac1cmpac0>ac1,TC2bccEND,TC2mov#0,ac0END:movac0,*ar0+RET程序说明同样对边界进行舍弃处理,所以图像处理的起点设为ImageWidth+1。即实现ar0=ar0+ImageWidth+1,ar1=ar1+ImageWidth+1.为了减少循环体的使用把原来的两重循环体合并为一个循环体,即把原来的for(y=1;y<ImageHeight;y++)for(x=1;x<ImageWidth;x++)合并为for(i=ImageWidth+1,i<(ImageWidth-1)*(ImageHeight-1),i++),所以赋给循环次数brc0的值为(t0-1)*(t1-1)-1.循环体内部即对计算公式进行处理,ac0,ac1分别记录和的值然后把ac1-ac0的值赋给ac0,其中相当于2*,相当于,用ac0<<#1实现乘以2,用ac1<<#-2实现除以4.最后结果要进行限幅,即限制在0到255之间,如果ac0>255,ac0=255,如果ac0<0,ac0=0.最后把ac0赋给要处理的图像的地址ar0指向的单元,同时ar0地址自增1,即ar0+,同时要确保在循环体结束时ar1地址自增1.运行结果原图:处理后的图:同样,对比可以看出处理后的图的边界更清晰,原图比处理后的图模糊。跟C语言处理的结果一样。=2\*GB2⑵图像的边缘检测C语言方法程序intImageWidth,ImageHeight;staticRead_Grey_Image();int*buffer_grey,*buffer_org;externintThreshold;voidmain(){buffer_grey=(int*)0x00010000;buffer_org=(int*)0x00020000;ImageWidth=150;ImageHeight=180;Threshold=120;Read_Grey_Image("Zebra150_180_grey_CCS",buffer_grey);Read_Grey_Image("Zebra150_180_grey_CCS",buffer_org);ImageEdge(buffer_grey);//ImageEdgeSub(ImageWidth,ImageHeight,buffer_grey,buffer_org);}ImageEdge(int*buffer){inti;intx,y;unsignedchardelta_x;unsignedchardelta_y;unsignedchardelta;i=ImageWidth+1;for(y=1;y<ImageHeight;y++) for(x=1;x<ImageWidth;x++){delta_x=(buffer_org[i-ImageWidth+1]+buffer_org[i+1]+buffer_org[i+ImageWidth+1]-buffer_org[i-ImageWidth-1]-buffer_org[i-1]-buffer_org[i+ImageWidth-1])/3;delta_y=(buffer_org[i-ImageWidth-1]+buffer_org[i-ImageWidth]+buffer_org[i-ImageWidth+1]-buffer_org[i+ImageWidth-1]-buffer_org[i+ImageWidth]-buffer_org[i+ImageWidth+1])/3;delta=abs(delta_x)+abs(delta_y);if(delta>=Threshold)buffer[i++]=255;elsebuffer[i++]=0;}}staticRead_Grey_Image(char*FileName,int*buffer){inti;intx,y;unsignedcharr;FILE*fp;i=0; if(fp=fopen(FileName,"rb+")) {puts("readingdata\n"); for(y=0;y<ImageHeight;y++) for(x=0;x<ImageWidth;x++){fread(&r,sizeof(r),1,fp);buffer[i++]=r;} fclose(fp);}elseputs("can'topenfile\n");}程序说明把门限Threshold设置为全局变量,用extern说明为全局变量,方便在汇编程序中调用Threshold。同样,图像边缘检测过程也是对原图处理然后把处理后的新值赋给新图,这里是对buffer_org,处理,然后把处理后的值赋给buffer_grey。由于这两个变量是在main函数外定义的ImageEdge()函数可以调用,所以不需要把buffer_org也当做ImageEdge()的参数。同样,对图像模板进行处理时要考虑到边界问题,所以程序的循环体为for(y=1;y<ImageHeight;y++)for(x=1;x<ImageWidth;x++)即x,y都是从1开始计数到ImageHeight-1和ImageWidth-1结束。按处理公式编写C语言公式:delta_x=(buffer_org[i-ImageWidth+1]+buffer_org[i+1]+buffer_org[i+ImageWidth+1]-buffer_org[i-ImageWidth-1]-buffer_org[i-1]-buffer_org[i+ImageWidth-1])/3;delta_y=(buffer_org[i-ImageWidth-1]+buffer_org[i-ImageWidth]+buffer_org[i-ImageWidth+1]-buffer_org[i+ImageWidth-1]-buffer_org[i+ImageWidth]-buffer_org[i+ImageWidth+1])/3;delta=abs(delta_x)+abs(delta_y);这里对buffer_org数组的寻址进行了处理,即f(x-1)相当于buffer_org[i-1],f(y-1)相当于buffer_org[i-ImageWidth]。最后把运算结果delta和Threshold比较,大于Threshold把255赋给buffer,小于Threshold把0赋给buffer。运行结果原图:处理后的图:对比两图发现处理后的图把原图的边缘检测了出来。汇编语言方法程序.mmregs.def_ImageEdgeSub.bssTEMP,1.text.bss_Threshold,1.global_Threshold.bssx,1.bssy,1_ImageEdgeSub:amov#x,xar5amov#y,xar6mov#3,*ar5amov#_Threshold,xar4mov*ar4,ac2mov#1,t3addt0,ar0add#1,ar0addt0,ar1add#1,ar1sub#1,t1movt1,hi(ac3)sub#1,t0,t2mpyt2,ac3movac3,t2sub#1,t2movt2,brc0mov#4095,ac3mov#15,brc1rptbENDmov#0,ac0sub#149,ar1add*ar1,ac0add#150,ar1add*ar1,ac0add#150,ar1add*ar1,ac0sub#302,ar1sub*ar1,ac0add#150,ar1sub*ar1,ac0add#150,ar1sub*ar1,ac0absac0,ac0movac0,*ar6mov#0,ac0add*ar1+,ac0add*ar1+,ac0add*ar1,ac0sub#302,ar1sub*ar1+,ac0sub*ar1+,ac0sub*ar1,ac0absac0,ac0add*ar6,ac0add#150,ar1rptblocalDIVI

温馨提示

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

评论

0/150

提交评论