0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常用锐化算法及Sobel锐化的介绍

FPGA技术江湖 来源:FPGA技术江湖 作者:FPGA技术江湖 2022-05-05 11:05 次阅读

1. 图像锐化原理介绍

在增强图像之前一般会先对图像进行平滑处理以减少或消除噪声。图像的能量主要集中在低频部分,而噪声和图像边缘信息的能量主要集中在高频部分。因此,平滑处理会使原始图像的边缘和轮廓变得模糊。为了减少这类不利效果的影响,需要利用图像锐化技术,使图像的边缘变得清晰。图像锐化处理主要有两个目的:一是与图像平滑处理相反,增强图像边缘,使模糊的图像更加清晰,颜色变得鲜明突出,图像的质量有所改善,产生更适合人观察和识别的图像;二是经过锐化处理后,目标物体的边缘鲜明,以便于计算机提取目标物体的边界、对图像进行分割、目标区域识别、区域形状提取等,为图像理解和分析打下基础。 经过平滑处理的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变得清晰。微分运算是求信号的变化率,由傅立叶变换的微分性质可知,微分运算具有加强高频分量的作用。但需要注意的是,进行锐化处理的图像必须有较高的性噪比,否则锐化后图像性噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先消除或减轻噪声后再进行锐化处理,如图1所示。

8fa21f6c-cbf1-11ec-bce3-dac502259ad0.png

1 图像锐化示意图

物体的边缘是以图像局部特性不连续性的形式出现的,即边缘意味着一个区域的结束和另一个区域的开始。图像边缘有方向和幅度两个参数。通常,沿边缘走向的像素变化平缓,而垂直于边缘走向的像素变化剧烈。边缘一般有两类(图2所示):(1)阶跃状边缘,它两边的像素灰度值显著不同;(2)屋顶状边缘,它位于像素灰度值从增加到减少(或从减少到增加)的变化转折点。经典的边缘提取方法是考虑图像的每个像素在某个领域内的变化,利用边缘邻近一阶或二阶方向导数变化规律来检测边缘。图像灰度值的显著变化可以用一阶差分替代一阶微分的梯度来表示,分别以梯度向量的幅度和方向来表示。因此,图像中陡峭边缘的梯度值很大;灰度值变化平缓的地方,梯度值较小;灰度值相同的地方,梯度值为零。

下面开始介绍运用一阶微分和二阶微分运算来进行图像边缘检测的原理。

8fc7846e-cbf1-11ec-bce3-dac502259ad0.png

2 边缘类型

1.1.一阶微分边缘检测

一阶微分主要是指梯度模运算,图像的梯度模值包含了边界及细节信息。图像8fe77a80-cbf1-11ec-bce3-dac502259ad0.png在点90047982-cbf1-11ec-bce3-dac502259ad0.png处的梯度定义为:9024ab8a-cbf1-11ec-bce3-dac502259ad0.png由于数字图像是离散的,所以可以用差分来替代微分,即:90454a52-cbf1-11ec-bce3-dac502259ad0.png906a2656-cbf1-11ec-bce3-dac502259ad0.png  梯度的幅值即模值,为:90907de2-cbf1-11ec-bce3-dac502259ad0.png  梯度的方向为:90b805e2-cbf1-11ec-bce3-dac502259ad0.png  对图像f使用梯度模算子进行运算后,可产生一幅梯度图像g,图像g和图像f之间的像素关系为:90dfcf96-cbf1-11ec-bce3-dac502259ad0.png  其中G为梯度模算子。由于梯度图像g反映了图像f的灰度变化分布信息,因此可以对其进行某种适当的处理和变换,或将变换后的梯度图像和原图像组合作为f锐化后的图像。运用一阶微分运算的边缘检测算子包括Robert算子、Prewitt算子和Sobel算子等等,将在后续小节中对Robert和Sobel边缘检测算法的实现进行介绍。

1.2.二阶微分边缘检测

二阶微分定义为90fb11ac-cbf1-11ec-bce3-dac502259ad0.png。考虑坐标旋转变换,设P点旋转前坐标为91186ebe-cbf1-11ec-bce3-dac502259ad0.png,顺时针旋转θ°后得913784fc-cbf1-11ec-bce3-dac502259ad0.png,如图3所示,则有: 915784e6-cbf1-11ec-bce3-dac502259ad0.png图3 坐标旋转变换9175747e-cbf1-11ec-bce3-dac502259ad0.png9196fb08-cbf1-11ec-bce3-dac502259ad0.png91bbfd0e-cbf1-11ec-bce3-dac502259ad0.png  函数8fe77a80-cbf1-11ec-bce3-dac502259ad0.png91f7b33a-cbf1-11ec-bce3-dac502259ad0.png的一阶偏导数为921a29a6-cbf1-11ec-bce3-dac502259ad0.png  函数8fe77a80-cbf1-11ec-bce3-dac502259ad0.png924b8ffa-cbf1-11ec-bce3-dac502259ad0.png的一阶偏导数为926be1ce-cbf1-11ec-bce3-dac502259ad0.png  函数8fe77a80-cbf1-11ec-bce3-dac502259ad0.png91f7b33a-cbf1-11ec-bce3-dac502259ad0.png的二阶偏导数为92acd116-cbf1-11ec-bce3-dac502259ad0.png  函数8fe77a80-cbf1-11ec-bce3-dac502259ad0.png924b8ffa-cbf1-11ec-bce3-dac502259ad0.png的二阶偏导数为930d8344-cbf1-11ec-bce3-dac502259ad0.png  将函数8fe77a80-cbf1-11ec-bce3-dac502259ad0.png91f7b33a-cbf1-11ec-bce3-dac502259ad0.png924b8ffa-cbf1-11ec-bce3-dac502259ad0.png的二阶偏导数相加得93588a74-cbf1-11ec-bce3-dac502259ad0.png  由此可见,二阶微分具有各向同性、旋转不变性的特征,从而满足不同走向的图像边缘的锐化要求。 由于数字图像是离散的,所以可以用差分来替代微分,即: 9378ba24-cbf1-11ec-bce3-dac502259ad0.png93928878-cbf1-11ec-bce3-dac502259ad0.png93b18458-cbf1-11ec-bce3-dac502259ad0.png  后续小节将要介绍的Laplacian边缘检测算法正是基于二阶微分运算。

1.3.一阶微分与二阶微分边缘检测对比

一阶微分和二阶微分运算都可以用来检测图像边缘,但它们对边缘的检测原理和检测效果是有差异的,如下所示: (1)对于突变型的细节,通过一阶微分的极值点和二阶微分的过零点均可以检测出来,如图4所示。

93d33a9e-cbf1-11ec-bce3-dac502259ad0.png

图4 突变型细节

(2)对于细线型的细节,通过一阶微分的过零点和二阶微分的极值点均可以检测出来,如图5所示。

93f364fe-cbf1-11ec-bce3-dac502259ad0.png

图5 细线型细节

(3)对于渐变型的细节,一般情况下突变幅度小、定位难、不易检测,但二阶微分的信息比一阶微分的信息多,如图6所示。

94113754-cbf1-11ec-bce3-dac502259ad0.png

图6 渐变型细节

从图像的景物细节的灰度分布特性可知,有些灰度变化特性一阶微分的描述不是很明确,为此,采用二阶微分能够获得更丰富的景物细节。

2.Sobel边缘检测与锐化的实现

2.1.Sobel边缘检测算法理论

Robert算子只采用梯度微分锐化图像,会让噪声、条纹得到增强,而Sobel边缘检测算子则在一定程度上解决了这个问题,它是一种先求平均、再求微分、最后求梯度的算子,其算子形式如下所示。显然,Sobel算子只考虑了源像素点周围8个相邻像素点的水平和垂直方向的像素突变,而没有加入源像素点灰度值的计算。

9431b330-cbf1-11ec-bce3-dac502259ad0.png

945e0886-cbf1-11ec-bce3-dac502259ad0.png

Sobel算子的水平和垂直模板如图12所示,分别对水平边缘和垂直边缘的影响最大。

94803046-cbf1-11ec-bce3-dac502259ad0.png

图12 Sobel算子模板

Sobel算子在一个方向求微分,而在另一个方向求平均,因而对噪声相对不敏感,具有抑制噪声的作用。由于像素平均相当于对图像进行低通滤波,所以Sobel算子对边缘的定位不如Robert算子。但与Robert算子相比,Sobel算子有一定的抗干扰性,图像效果比较干净。 利用算子模板可求得水平和垂直方向的梯度94a132aa-cbf1-11ec-bce3-dac502259ad0.png94c175b0-cbf1-11ec-bce3-dac502259ad0.png,再通过梯度合成便可获得边缘检测结果94e8f5c2-cbf1-11ec-bce3-dac502259ad0.png,如下所示:

95066f9e-cbf1-11ec-bce3-dac502259ad0.png

有时,为了简化运算,可以用下面式子来近似替代。

9526fad4-cbf1-11ec-bce3-dac502259ad0.png

Sobel边缘检测的过程如图13所示,获得了比较粗的边界,但边缘定位精度不够高,,有时可能对非边缘像素的响应大于某些边缘处的响应或者响应差别不是很大,造成漏检或误检。当对精度要求不是很高时,是一种较为常用的边缘检测方法。将边缘检测结果与原图叠加便可以得到锐化后的图像,如图14所示。

9542d93e-cbf1-11ec-bce3-dac502259ad0.png

图13 Sobel边缘检测

95639c96-cbf1-11ec-bce3-dac502259ad0.png

图14 Sobel锐化

2.2.Sobel边缘检测Matlab实现

前面已经对Sobel边缘检测算法进行了介绍,现在基于Matlab软件对其进行仿真。创建函数Sobel_Edge_Detector用于实现Sobel算子对图像进行边缘检测,相关的matlab代码如下所示(详见Sobel_Edge_Detector.m)。

% 灰度图像Sobel边缘检测算法实现

% IMG为输入的灰度图像

% Q为输出的灰度图像

function Q = Sobel_Edge_Detector(IMG)

[h,w] = size(IMG); % 获取图像的高度h和宽度w

Q = zeros(h,w); % 初始化Q为全0的h*w大小的图像

% -------------------------------------------------------------------------

% Wx Wy Pixel

% [ -1 -2 -1 ] [ +1 0 -1] [ P1 P2 P3]

% [ 0 0 0 ] [ +2 0 -2] [ P4 P5 P6]

% [ +1 +2 +1 ] [ +1 0 -1] [ P7 P8 P9]

Wx = [-1,-2,-1;0,0,0;1,2,1]; % Weight x

Wy = [1,0,-1;2,0,-2;1,0,-1]; % Weight y

IMG = double(IMG);

for i = 1 : h

forj = 1 : w

if(i<2 || i>h-1 || j<2 || j>w-1)

Q(i,j)= 0; % 边缘像素不处理

else

%Gx = sum(Wx.*IMG(i-1:i+1,j-1:j+1),'all');

Gx= Wx(1,1)*IMG(i-1,j-1) + Wx(1,2)*IMG(i-1,j) + Wx(1,3)*IMG(i-1,j+1) +...

Wx(2,1)*IMG(i ,j-1)+ Wx(2,2)*IMG(i ,j) + Wx(2,3)*IMG(i ,j+1) +...

Wx(3,1)*IMG(i+1,j-1)+ Wx(3,2)*IMG(i+1,j) + Wx(3,3)*IMG(i+1,j+1);

%Gy = sum(Wy.*IMG(i-1:i+1,j-1:j+1),'all');

Gy= Wy(1,1)*IMG(i-1,j-1) + Wy(1,2)*IMG(i-1,j) + Wy(1,3)*IMG(i-1,j+1) +...

Wy(2,1)*IMG(i ,j-1)+ Wy(2,2)*IMG(i ,j) + Wy(2,3)*IMG(i ,j+1) +...

Wy(3,1)*IMG(i+1,j-1)+ Wy(3,2)*IMG(i+1,j) + Wy(3,3)*IMG(i+1,j+1);

%Q(i,j) = sqrt(Gx^2 + Gy^2);

Q(i,j)= abs(Gx) + abs(Gy);

end

end

end

Q=uint8(Q);

上述Matlab代码中需要注意以下几点:

(1)函数输入IMG是uint8数据类型的图像,而计算时存在负数和小数,需要用浮点数来表示,所以将IMG由uint8数据类型转为double数据类型;

(2)对图像边缘的像素不进行处理,直接输出0;

(3)将函数输出Q由double数据类型转为uint8数据类型。

接下来编写顶层M文件,相关的Maltab代码如下所示(详见Sobel_Sharpen_Test.m),Sobel锐化处理流程如图15所示。

clear all;

close all;

clc;

% -------------------------------------------------------------------------

% Read PC image to Matlab

IMG1 = imread('../../0_images/Lenna.jpg'); % 读取jpg图像

IMG1 = rgb2gray(IMG1);

subplot(131);imshow(IMG1);title('【1】原图');

% -------------------------------------------------------------------------

IMG2 = Sobel_Edge_Detector(IMG1);

subplot(132);imshow(IMG2);title('【2】Sobel边缘检测结果');

% -------------------------------------------------------------------------

IMG3 = IMG1 + IMG2;

subplot(133);imshow(IMG3);title('【3】Sobel锐化图像');

958320f2-cbf1-11ec-bce3-dac502259ad0.png

图15 Sobel锐化处理流程

执行顶层M文件可得到图16所示的结果,其中【2】是进行Sobel边缘检测得到的效果图,可以看出Sobel算子对边缘有较强的响应,与Robert算子相比,对边缘的响应更加强烈,得到的边缘更加宽;【3】是原图与边缘检测结果叠加后的效果图,相比原图,边缘和细节更加突出,但图像有些失真。

95a20db4-cbf1-11ec-bce3-dac502259ad0.png

图16 Sobel边缘检测与锐化

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4601

    浏览量

    92670
  • 边缘检测
    +关注

    关注

    0

    文章

    92

    浏览量

    18202
  • sobel
    +关注

    关注

    0

    文章

    12

    浏览量

    7898

原文标题:常用锐化算法及Sobel锐化的介绍

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    求教求教,红外图像锐化

    求教关于数字图像处理方面,尤其是图像锐化方面的大神呢。有重谢的啦
    发表于 04-01 16:36

    DSP c6722 图像锐化

    求LOG算子,canny算子 ,Roberts算子,梯度算子锐化程序。跪谢
    发表于 05-12 10:14

    基于FPGA的图像拉普拉斯锐化处理

    时,此中心像素的灰度应被进一步提高,以此实现图像的锐化处理。2.2拉普拉斯(laplace)算子最常用的无方向性的二阶差分算子,其模板有3*3、5*5和7*7等多种形式。。例如,以3*3算子为例,1~8
    发表于 07-08 18:15

    8168采集图像直接播放锐化严重该怎么办?

    我们的设备 采集和编码解码后 图像正常但是采集后 经过一次dup 一次swms 在播放后 发现图像锐化严重 尤其是物体边缘 非常的模糊 噪点很多如何解决这种问题?为什么出现此问题?
    发表于 08-26 13:50

    源码交流=图像处理 实现图像去噪、滤波、锐化、边缘检测

    均衡化、锐化、边缘检测【处理效果】NO.1:原图NO.2:去噪之后的图像NO.3:锐化之后的图像NO.4:直方图均衡之后的图像NO.5:Prewitt边缘检测之后的图像NO.6:Roberts边缘检测
    发表于 04-01 19:03

    锐化图像的MATLAB实现

    锐化图像的MATLAB实现
    发表于 05-06 13:14

    基于拉普拉斯算法的图像锐化算法实现

    该文提出了一种基于拉普拉斯算法的图像锐化方法,并在DSP上实现其算法。首先研究拄普拉斯算子锐化图像的基本原理,并推导出图像锐化的拉普拉斯算子
    发表于 10-12 16:22 79次下载
    基于拉普拉斯<b class='flag-5'>算法</b>的图像<b class='flag-5'>锐化</b><b class='flag-5'>算法</b>实现

    JAVA教程之模糊与锐化

    JAVA教程之模糊与锐化,很好的JAVA的资料,快来学习吧
    发表于 04-11 17:28 7次下载

    基于DSP_FPGA的红外图像锐化算法的实现

    基于DSPFPGA的红外图像锐化算法的实现,感兴趣的可以看看。
    发表于 08-29 15:31 8次下载

    基于CORDIC的高速Sobel算法实现

    为提高图像边缘检测的处理速度,提出一种基于CORDIC的高速Sobel算法实现。
    的头像 发表于 10-05 09:54 3541次阅读
    基于CORDIC的高速<b class='flag-5'>Sobel</b><b class='flag-5'>算法</b>实现

    NVIDIA紧急放出GeForce 445.78版修复驱动 解决开启图像锐化之后导致DX11游戏无法正常启动问题

    NVIDIA日前放出了GeForce 445.75版显卡驱动,正式支持新一代深度学习抗锯齿技术DLSS 2.0,但也不下心引发了一个大大的Bug,开启图像锐化(Image Sharpening)之后会导致DX11游戏无法正常启动。
    的头像 发表于 03-26 13:52 1.3w次阅读

    如何使用DSP和FPGA实现红外图像锐化算法的实现

    为了改善红外图像的成像质量,根据红外图像的特点,提出了一种改进的拉普拉斯锐化算法——受限拉普拉斯锐化算法,并采用DSP+FPGA的架构进行实时处理。对普通拉氏
    发表于 01-25 16:04 6次下载
    如何使用DSP和FPGA实现红外图像<b class='flag-5'>锐化</b><b class='flag-5'>算法</b>的实现

    基于扩展相位拉伸变换的血管造影图像锐化

    针对目前传统血管造影图像锐化増强后大量细小血管变得模糊不清或丢失,甚至增强图像中血管周围产生大量背景噪声,提岀一种相位拉伸核函数,形成基于扩展相位拉伸变换的血管造影图像増强算法。该算法将Sˆ型群延迟
    发表于 04-21 14:00 7次下载
    基于扩展相位拉伸变换的血管造影图像<b class='flag-5'>锐化</b>

    Sobel边缘检测与锐化的实现

    效果的影响,需要利用图像锐化技术,使图像的边缘变得清晰。图像锐化处理主要有两个目的:一是与图像平滑处理相反,增强图像边缘,使模糊的图像更加清晰,颜色变得鲜明突出,图像的质量有所改善,产生更适合人观察
    的头像 发表于 03-21 13:17 2815次阅读

    图像锐化Sobel、Laplacian算子基础知识介绍

    Sobel 算子是一种用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导
    的头像 发表于 09-13 09:52 1262次阅读
    图像<b class='flag-5'>锐化</b>的<b class='flag-5'>Sobel</b>、Laplacian算子基础知识<b class='flag-5'>介绍</b>