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

一、实验名称

图像锐化

二、实验目的

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上机过程中,没有注意到数据类型的限制,导致数据上溢。
haihong.png

你可能感兴趣的:(MATLAB--数字图像处理 图像锐化)