MATLAB–数字图像处理 图像锐化(原理篇)

MATLAB–数字图像处理 图像锐化(原理篇)「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」 前言 图像锐化(原理篇)        图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图

「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

前言

Hello!小伙伴!

非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~

 

自我介绍 ଘ(੭ˊᵕˋ)੭

昵称:海轰

标签:程序猿|C++选手|学生

简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python

学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!

图像锐化(原理篇)

       图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算,其实这里用的是差分)就可以使图像变得清晰。        图像中边缘的定义是什么?在图像处理中认为,灰度值变化剧烈的地方就是边缘。变化剧烈程度,数学上就是函数的一阶导数。假设下面第一张图是图像的灰度函数,可以看出,中间变化较快的地方应该是图像的边缘。第二张图是图一的一阶导数,由数学知识可知,一阶导数的极值就是那个变化最快的点–边缘。第三张图是图一的二阶导数,二阶导数为0时,可以看出是图像的边缘处。所以,对于确定图像的边缘,我们只需要找到一阶导数为极值点或者二阶导数为0的位置就行(二阶导数为0不一定为边缘点 比如一副颜色相同的图像 其一阶导数 二阶导数都是0 没有边缘)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

       那为什么用差分来寻找边缘呢对于连续的函数来说,一阶导数就是直接求导,二阶同理。但是,图像本质是一个二维矩阵,离散型的。是无法求导的。这时候,就需要用到差分这个概念了。实在理解不到的话,可以认为:连续型函数是求导(求微分),离散型函数则是求差分。

一阶导数、二阶导数差分的证明

在这里插入图片描述

图像上差分的求法

在这里插入图片描述

常用一阶微分算子证明

在这里插入图片描述

二阶算子证明

在这里插入图片描述

图像锐化

概念: 图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。

我的理解: 图像锐化就是通过使得图像的边缘更加突出,可以是原图与原图的高频部分叠加而成。

Sobel算子

 I=imread('a2.jpg'); %读取图像
I1=rgb2gray(I); %将彩色图变成灰色图
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
figure,
imshow(I2),title('边缘提取后的图像');
I2 = I2 + double(I1);
figure,
imshow(uint8(I2)),title('锐化后的图像');

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

Robert算子

 I=imread('a2.jpg'); %读取图像
I1=rgb2gray(I); %将彩色图变成灰色图
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
figure,imshow(I2),title('边缘提取后的图像');
I2 = I2 + double(I1);

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

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

Prewitt算子

 I=imread('a2.jpg'); 
I1=rgb2gray(I); %将彩色图变成灰色图
subplot(1,2,1);
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).*double(model);
      
        I2(i,j)=sum(sum(tem));
          
         end
end

figure,
imshow(uint8(I2)),title('边缘提取后的图像');

效果图 在这里插入图片描述 laplacian算子

 I=imread('C:\Users\LiCongliang\Desktop\数字图像处理\数字图像处理第五次作业\tea.png'); 
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); %将彩色图变成灰色图
imshow(I2),title('原图');
figure,
imshow(newGrayPic);
title('Laplacian算子的处理结果')

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

今天的文章MATLAB–数字图像处理 图像锐化(原理篇)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/18180.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注