资源描述:
《图像锐化算法实现.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、南京信息工程大学实验(实习)报告实验(实习)名称图像锐化算法实现实验(实习)日期*****得分指导教师***学院****专业****年级*班次*姓名***学号***********一、实验目的:1.了解图像锐化的目的和意义,巩固所学的图像锐化的理论知识和相关算法;2.掌握微分算子对图像锐化的方法;3.熟练掌握空域中常用的锐化滤波器;4.利用MATLAB程序进行图像锐化(要求:不得调用Matlab自带的图像函数,但可以调用其它数学函数),观察图像锐化的效果。二、实验内容:1.读入一幅灰度图像2.分别利用Roberts、Prewitt和Sobel边缘检
2、测算子,对一幅灰度数字图像(cameraman.tif)进行边缘检测,显示处理前图像和检测的边缘图3.根据获得的梯度图,分别采用5种锐化输出处理方式,显示锐化输出前后的图像三、实验要求:1.用Matlab语言进行编程,实现上述功能,并尽量使得程序具有通用性,3种算子3个.m文件。2.撰写实验报告并附上所用程序和结果。四、实验代码及实验结果1.roberts算子clear;clc;I=imread('cameraman.tif');[x,y]=size(I);J=double(I);fori=1:x-1%注意i的范围是1到x-1而不是到xforj=1
3、:y-1a=J(i+1,j+1)-J(i,j);b=J(i+1,j)-J(i,j+1);J1(i,j)=abs(a)+abs(b);%直接以梯度值代替%辅以门槛判断ifabs(a)+abs(b)>150J2(i,j)=J1(i,j);elseJ2(i,j)=I(i,j);end%给边缘规定一个特定的灰度级ifabs(a)+abs(b)>150J3(i,j)=255;elseJ3(i,j)=I(i,j);end%给背景规定特定的灰度级ifabs(a)+abs(b)>150J4(i,j)=J1(i,j);elseJ4(i,j)=0;end%二值图像if
4、abs(a)+abs(b)>100J5(i,j)=255;elseJ5(i,j)=0;endendendJ1=uint8(J1);J2=uint8(J2);subplot(2,3,1);imshow(I);title('原图');subplot(2,3,2);imshow(J1);title('roberts算子1');subplot(2,3,3);imshow(J2);title('roberts算子2');subplot(2,3,4);imshow(J3);title('roberts算子3');subplot(2,3,5);imshow(J4
5、);title('roberts算子4');subplot(2,3,6);imshow(J5);title('roberts算子5');2.prewitt算子clear;clc;I=imread('cameraman.tif');[m,n]=size(I);J=double(I);forx=2:m-1fory=2:n-1a=J(x+1,y-1)-J(x-1,y-1)+J(x+1,y)-J(x-1,y)+J(x+1,y+1)-J(x-1,y+1);b=J(x-1,y+1)-J(x-1,y-1)+J(x,y+1)-J(x,y-1)+J(x+1,y+1)
6、-J(x+1,y-1);J1(x,y)=abs(a)+abs(b);ifabs(a)+abs(b)>160J2(x,y)=J1(x,y);elseJ2(x,y)=I(x,y);endifabs(a)+abs(b)>160J3(x,y)=255;elseJ3(x,y)=I(x,y);endifabs(a)+abs(b)>160J4(x,y)=J1(x,y);elseJ4(x,y)=0;endifabs(a)+abs(b)>160J5(x,y)=255;elseJ5(x,y)=0;endendendJ1=uint8(J1);J2=uint8(J2);s
7、ubplot(2,3,1);imshow(I);title('原图');subplot(2,3,2);imshow(J1);title('prewitt算子1');subplot(2,3,3);imshow(J2);title('prewitt算子2');subplot(2,3,4);imshow(J3);title('prewitt算子3');subplot(2,3,5);imshow(J4);title('prewitt算子4');subplot(2,3,6);imshow(J5);title('prewitt算子5');3sobel算子cle
8、ar;clc;I=imread('cameraman.tif');[m,n]=size(I);J=double(I);fo