MATLAB--数字图像处理 图像锐化

作业 专栏收录该内容
30 篇文章 15 订阅

一、实验名称

图像锐化

二、实验目的

1.熟悉MATLAB软件的使用。
2.掌握图像锐化的原理及数学运算。
3.于MATLAB环境下编程实现对图片锐化。

三、实验内容

    利用图像基于单方向梯度算子,Robert算子,Sobel算 子,Pritt算 子, Laplacian算子,多方向模板,LoG算子编写matlab增强程序;最后,显示边缘图像和锐化增强图像,并对这些仿真结果所呈现的边缘提取和增强效果进行对比分析。

四、实验仪器与设备

Win10 64位电脑
MATLAB2017a

五、实验原理

    1.Sobel算子是像素图像边缘检测中最重要的算子之一。在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值。在图像的任何一点使用此算子,将会产生该点对应的梯度矢量或是其法矢量。
    2.Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析,由于Robert算子通常会在图像边缘附近的区域内 产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。
    3.Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。
    4. Laplacian算子是n维欧几里得空间中的一个二阶微分算子,定义为梯度grad()的散度div()。因此如果f是二阶 可微的实函数,则f的laplacian算子定义为:
        (1) f的拉普拉斯算子也是笛卡尔坐标系xi中的所有非混合二阶偏导数求和:
        (2) 作为一个二阶 微分算子,拉普拉斯算子把C函数映射到C函数,对于k ≥ 2。

六、实验过程及代码

Sobel算子

 I=imread('a3.jpg'); %读取图像
I1=rgb2gray(I); %将彩色图变成灰色图
subplot(131),imshow(I1),title('原图');

model=[-1,0,1;
       -2,0,2;
       -1,0,1];
[m,n]=size(I1);
I2=double(I1);

for i=2:m-1
    for j=2:n-1
        I2(i,j)=I1(i+1,j+1)+2*I1(i+1,j)+I1(i+1,j-1)-I1(i-1,j+1)-2*I1(i-1,j)-I1(i-1,j-1);
    end
end
subplot(132),
imshow(I2),title('边缘提取后的图像');
I2 = I2 + double(I1);
subplot(133),
imshow(uint8(I2)),title('锐化后的图像');

Robert算子

 I=imread('a3.jpg'); %读取图像
I1=rgb2gray(I); %将彩色图变成灰色图
subplot(131),imshow(I1),title('原图');
model=[0,-1;1,0];
[m,n]=size(I1);
I2=double(I1);
for i=2:m-1
    for j=2:n-1
        I2(i,j)=I1(i+1,j)-I1(i,j+1);
    end
end
subplot(132),imshow(I2),title('边缘提取后的图像');
I2 = I2 + double(I1);

subplot(133),
imshow(uint8(I2)),title('锐化后的图像');

Prewitt算子

 I=imread('a3.jpg');
I1=rgb2gray(I); %将彩色图变成灰色图
subplot(131);
imshow(I1),title('原图');
model=[-1,0,1;
-1,0,1;
-1,0,1];
[m,n]=size(I1);
I2=I1;
for i=2:m-1
for j=2:n-1
tem=I1(i-1:i+1,j-1:j+1);
tem=double(tem).*model;

I2(i,j)=sum(sum(tem));
end
end
subplot(132),
imshow(uint8(I2)),title('边缘提取后的图像');
I2=I2+I1;
subplot(133),
imshow(I2),title('图像锐化')

laplacian算子

I=imread('a3.jpg'); 
I1=mat2gray(I);%实现图像矩阵的归一化操作
[m,n]=size(I1);
newGrayPic=I1;%为保留图像的边缘一个像素
LaplacianNum=0;%经Laplacian算子计算得到的每个像素的值
LaplacianThreshold=0.2;%设定阈值
for j=2:m-1 %进行边界提取
    for k=2:n-1
        LaplacianNum=abs(4*I1(j,k)-I1(j-1,k)-I1(j+1,k)-I1(j,k+1)-I1(j,k-1));
        if(LaplacianNum > LaplacianThreshold)
            newGrayPic(j,k)=255;
        else
            newGrayPic(j,k)=0;
        end
    end
end
I2=rgb2gray(I); %将彩色图变成灰色图
subplot(131),imshow(I2),title('原图');
subplot(132),
imshow(newGrayPic);
title('Laplacian算子的处理结果')
t=I1+newGrayPic;
subplot(133),imshow(t),title('图像锐化后')

Log算子

 t=imread('a3.jpg');
t=rgb2gray(t);
[m,n]=size(t);
subplot(1,3,1),imshow(t),title('原图')
tt=t;
model=[0,0,1,0,0; 
 0,1,2,1,0;
1,2,-16,2,1;
0,0,1,0,0;
0,1,2,1,0;]


for i=3:m-2
for j=3:n-2
    tem=double(t(i-2:i+2,j-2:j+2)).*model;
    x=sum(sum(tem));
   tt(i,j)=x;
end
end

subplot(1,3,2),imshow(tt),title('log提取边缘后')
t_1=double(tt)+double(t);
subplot(1,3,3),imshow(uint8(t_1)),title('log锐化后')

七、实验结果与分析

Sobel算子
在这里插入图片描述
在这里插入图片描述
Robert算子

在这里插入图片描述
在这里插入图片描述

Prewitt算子

在这里插入图片描述
在这里插入图片描述

laplacian算子

在这里插入图片描述
在这里插入图片描述

Log算子
在这里插入图片描述
在这里插入图片描述
总结
    图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。我的理解:图像锐化就是通过使得图像的边缘更加突出,可以是原图与原图的高频部分叠加而成。
    Sobel算法与Priwitt算法的思路相同,属于同一类型,因此处理效果基本相同。Roberts算法的模板为2*2,提取信息较弱。单方向锐化经过处理之后,也可以对边界进行增强。Laplacian算子对噪声比较敏感,Laplacian算子有一个缺点是它对图像中的某些边缘产生双重响应。所以图像一般先经过平滑处理,通常把Laplacian算子和平滑算子结合起来生成一个新的模板-Log算子。

八、实验总结及心得体会

    通过此次实验,自己学习了图像锐化的几种算子。开始的时候,不懂每个算子的来源,后面看了老师的推导过程后,发现其实锐化就是先对图像进行差分(类似求导),再叠加到原图上。这里主要的问题就是对算子的差分原理的验证,然后在MATLAB上机过程中,没有注意到数据类型的限制,导致数据上溢。

更多

获取更多资料、代码,微信公众号:海轰Pro
回复 海轰 即可

评论 5 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

海轰Pro

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值