南京信息工程大学实验(实习)报告
实验(实习)名称 图像锐化算法实现 实验(实习)日期 ***** 得分 指导教师 *** 学院 **** 专业 **** 年级 * 班次 * 姓名 *** 学号 ***********
一、实验目的:
1.了解图像锐化的目的和意义,巩固所学的图像锐化的理论知识和相关算法; 2.掌握微分算子对图像锐化的方法; 3.熟练掌握空域中常用的锐化滤波器;
4.利用MATLAB程序进行图像锐化(要求:不得调用Matlab自带的图像函数,但可以调用其它数学函数),观察图像锐化的效果。
二、实验内容:
1. 读入一幅灰度图像
2. 分别利用Roberts、Prewitt 和Sobel 边缘检测算子,对一幅灰度数字图像
(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);
for i=1:x-1%注意i的范围是1到x-1而不是到x for j=1:y-1
a=J(i+1,j+1)-J(i,j); b=J(i+1,j)-J(i,j+1);
J1(i,j)=abs(a)+abs(b);%直接以梯度值代替 %辅以门槛判断
if abs(a)+abs(b) >150 J2(i,j)=J1(i,j); else
J2(i,j)=I(i,j); end
%给边缘规定一个特定的灰度级 if abs(a)+abs(b) >150 J3(i,j)=255; else
J3(i,j)=I(i,j); end
%给背景规定特定的灰度级 if abs(a)+abs(b) >150 J4(i,j)=J1(i,j); else
J4(i,j)=0; end
%二值图像
if abs(a)+abs(b) >100 J5(i,j)=255; else
J5(i,j)=0; end end end
J1=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);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); for x=2:m-1 for y=2:n-1
a=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)-J(x+1,y-1); J1(x,y)=abs(a)+abs(b);
if abs(a)+abs(b) >160 J2(x,y)=J1(x,y); else
J2(x,y)=I(x,y); end
if abs(a)+abs(b) >160 J3(x,y)=255; else
J3(x,y)=I(x,y); end
if abs(a)+abs(b) >160 J4(x,y)=J1(x,y); else
J4(x,y)=0; end
if abs(a)+abs(b) >160 J5(x,y)=255; else
J5(x,y)=0; end end end
J1=uint8(J1); J2=uint8(J2);
subplot(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算子
clear; clc;
I=imread('cameraman.tif'); [m,n]=size(I); J=double(I); for x=2:m-1 for y=2:n-1
a=J(x+1,y-1)-J(x-1,y-1)+2*J(x+1,y)-2*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)+2*J(x,y+1)-2*J(x,y-1)+J(x+1,y+1)-J(x+1,y-1); J1(x,y)=abs(a)+abs(b);
if abs(a)+abs(b) >160 J2(x,y)=J1(x,y); else
J2(x,y)=I(x,y); end
if abs(a)+abs(b) >160 J3(x,y)=255; else
J3(x,y)=I(x,y); end
if abs(a)+abs(b) >160 J4(x,y)=J1(x,y); else
J4(x,y)=0; end
if abs(a)+abs(b) >160 J5(x,y)=255; else
J5(x,y)=0;