系统实验(DSP)--图像的锐化处理、图像的边缘检测
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP 实验报告
一、 图像的锐化处理(高通滤波处理)
1、 实验原理
处理模板如下:
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡--+--=004100
ααα
ααM 25.0=α
对应数学表达式:
()[])1,(),1()1,(),1(),(41),(++++-+--+=y x f y x f y x f y x f y x f y x g αα
2、 C 程序及运行结果
程序:
Acute_RGB_Image(int *buffer)
{
int x,y;
for (y=0;y for (x=0;x { buffer[y*ImageWidth+x]=2*buffer[y*ImageWidth+x]-(buffer[y*ImageWidth+x-1]+b uffer[(y-1)*ImageWidth+x]+buffer[y*ImageWidth+x+1]+buffer[(y+1)*ImageWidth+x])/4; if(buffer[ImageWidth*y+x]>255) buffer[ImageWidth*y+x]=255; else if (buffer[ImageWidth*y+x]<0) buffer[ImageWidth*y+x]=0; } } 运行结果: 锐化前锐化后 分析:从上面两幅图可以看出锐化后的图像轮廓变得明显,且噪声变得强烈。 3、汇编程序及运行结果 程序: ImageAcuteSub(ImageWidth,ImageHeight,buffer_red); ImageAcuteSub(ImageWidth,ImageHeight,buffer_green); ImageAcuteSub(ImageWidth,ImageHeight,buffer_blue); .mmregs .def _ImageAcuteSub .text _ImageAcuteSub: mov t0,brc1 ;IMAGE WIDTH mov t1,brc0 ;IMAGE HEIGHT rptb y_loop rptb x_loop mov *ar0(#1),ac1;f(x+1,y) add *ar0(#-1),ac1 ;f(x-1,y) add *ar0(#-250),ac1 ;f(x,y-1) add *ar0(#250),ac1 ;f(x,y+1) sfts ac1,#-2 mov *ar0<<#1,ac0;2f(x,y) sub ac1,ac0 bcc branch1,ac0<0 sub #255,ac0,ac1 bcc branch2,ac1>0 mov ac0,*ar0+ b x_loop branch1: mov #0,*ar0+ b x_loop branch2: mov #255,*ar0+ x_loop: nop y_loop: nop RET 运行结果: 锐化前 锐化后 分析:可以看出汇编的结果和C 程序的结果是一致的。 二、 图像的边缘检测 1、 实验原理 方向方向和y x 的梯度分别为: ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---=∆10110110131x f ⎥⎥⎥⎦ ⎤⎢⎢⎢⎣⎡---=∆11100011131y f 总梯度幅度 y x f f f ∆+∆=∆[]13||(1 ,1)(1,)(1,1)(1,1)(1,)(1,1)x f f x y f x y f x y f x y f x y f x y ∆=+-+++++-------+[])1,1()1,()1,1()1,1()1,()1,1(||3 1 ++-+-+---++-+--=∆y x f y x f y x f y x f y x f y x f f y ⎩⎨⎧≥∆=else T f if y x g 01),( 实验中的阈值设为120。 2、 C 程序及运行结果 程序: Edge_Grey_Image() { int x,y; int delta_x,delta_y; for (y=0;y for (x=0;x { delta_x=abs(buffer_grey[ImageWidth*(y-1)+x+1]+buffer_grey[ImageWidth*y+x +1]+buffer_grey[ImageWidth*(y+1)+x+1]-buffer_grey[ImageWidth*(y-1)+x-1]-b uffer_grey[ImageWidth*y+x-1]-buffer_grey[ImageWidth*(y+1)+x-1])/3; delta_y=abs(buffer_grey[ImageWidth*(y-1)+x-1]+buffer_grey[ImageWidth*(y-1)+x]+buffer_grey[ImageWidth*(y-1)+x+1]-buffer_grey[ImageWidth*(y+1)+x-1]-buffer_grey[ImageWidth*(y+1)+x]-buffer_grey[ImageWidth*(y+1)+x+1])/3; if((delta_x+delta_y)>=Threshhold) buffer_org[ImageWidth*y+x]=255; else buffer_org[ImageWidth*y+x]=0; } }