图像锐化算法实现 下载本文

内容发布更新时间 : 2024/11/17 19:24:16星期一 下面是文章的全部内容请认真阅读。

南京信息工程大学实验(实习)报告

实验(实习)名称 图像锐化算法实现 实验(实习)日期 ***** 得分 指导教师 *** 学院 **** 专业 **** 年级 * 班次 * 姓名 *** 学号 ***********

一、实验目的:

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;