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

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

3天内不再提示

Sobel边缘检测与锐化的实现

新机器视觉 来源:疯狂的FPGA 作者:疯狂的FPGA 2022-03-21 13:17 次阅读

1.图像锐化原理介绍

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

fdeb1c94-a8d3-11ec-952b-dac502259ad0.png

图1 图像锐化示意图

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

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

fdff7a40-a8d3-11ec-952b-dac502259ad0.png

图2 边缘类型

1.1.一阶微分边缘检测

一阶微分主要是指梯度模运算,图像的梯度模值包含了边界及细节信息。图像fe1138de-a8d3-11ec-952b-dac502259ad0.png在点fe1b9f22-a8d3-11ec-952b-dac502259ad0.png处的梯度定义为:

fe28fce4-a8d3-11ec-952b-dac502259ad0.png

由于数字图像是离散的,所以可以用差分来替代微分,即:

fe38438e-a8d3-11ec-952b-dac502259ad0.png
fe4efcf0-a8d3-11ec-952b-dac502259ad0.png

梯度的幅值即模值,为:

fe5d2ffa-a8d3-11ec-952b-dac502259ad0.png

梯度的方向为:

fe720114-a8d3-11ec-952b-dac502259ad0.png

对图像f使用梯度模算子进行运算后,可产生一幅梯度图像g,图像g和图像f之间的像素关系为:

fe85113c-a8d3-11ec-952b-dac502259ad0.png

其中G为梯度模算子。由于梯度图像g反映了图像f的灰度变化分布信息,因此可以对其进行某种适当的处理和变换,或将变换后的梯度图像和原图像组合作为f锐化后的图像。运用一阶微分运算的边缘检测算子包括Robert算子、Prewitt算子和Sobel算子等等,将在后续小节中对Robert和Sobel边缘检测算法的实现进行介绍。

1.2.二阶微分边缘检测

二阶微分定义为fe91029e-a8d3-11ec-952b-dac502259ad0.png考虑坐标旋转变换,设P点旋转前坐标为fea66bac-a8d3-11ec-952b-dac502259ad0.png,顺时针旋转θ°后得febc81bc-a8d3-11ec-952b-dac502259ad0.png,如图3所示,则有:

fecc416a-a8d3-11ec-952b-dac502259ad0.png

图3 坐标旋转变换

fee3ad46-a8d3-11ec-952b-dac502259ad0.png
fef868da-a8d3-11ec-952b-dac502259ad0.png
ff061796-a8d3-11ec-952b-dac502259ad0.png

函数fe1138de-a8d3-11ec-952b-dac502259ad0.pngff2da216-a8d3-11ec-952b-dac502259ad0.png的一阶偏导数为

ff3953d6-a8d3-11ec-952b-dac502259ad0.png

函数fe1138de-a8d3-11ec-952b-dac502259ad0.pngff680406-a8d3-11ec-952b-dac502259ad0.png的一阶偏导数为

ff7c299a-a8d3-11ec-952b-dac502259ad0.png

函数fe1138de-a8d3-11ec-952b-dac502259ad0.pngff2da216-a8d3-11ec-952b-dac502259ad0.png的二阶偏导数为

ffb0b6ce-a8d3-11ec-952b-dac502259ad0.png

函数fe1138de-a8d3-11ec-952b-dac502259ad0.pngff680406-a8d3-11ec-952b-dac502259ad0.png的二阶偏导数为

ffe3903a-a8d3-11ec-952b-dac502259ad0.png

将函数fe1138de-a8d3-11ec-952b-dac502259ad0.pngff2da216-a8d3-11ec-952b-dac502259ad0.pngff680406-a8d3-11ec-952b-dac502259ad0.png的二阶偏导数相加得

002b47c2-a8d4-11ec-952b-dac502259ad0.png

后续小节将要介绍的Laplacian边缘检测算法正是基于二阶微分运算。

由此可见,二阶微分具有各向同性、旋转不变性的特征,从而满足不同走向的图像边缘的锐化要求。由于数字图像是离散的,所以可以用差分来替代微分,即:

003cac56-a8d4-11ec-952b-dac502259ad0.png
004f7160-a8d4-11ec-952b-dac502259ad0.png
00619f3e-a8d4-11ec-952b-dac502259ad0.png

后续小节将要介绍的Laplacian边缘检测算法正是基于二阶微分运算。

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

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

006dec30-a8d4-11ec-952b-dac502259ad0.png

图4 突变型细节

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

0085e056-a8d4-11ec-952b-dac502259ad0.png

图5 细线型细节

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

009e909c-a8d4-11ec-952b-dac502259ad0.png

图6 渐变型细节

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

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

2.1.Sobel边缘检测算法理论

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

00af36ea-a8d4-11ec-952b-dac502259ad0.png

00bc1856-a8d4-11ec-952b-dac502259ad0.png

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

00cef516-a8d4-11ec-952b-dac502259ad0.png

图12 Sobel算子模板

Sobel算子在一个方向求微分,而在另一个方向求平均,因而对噪声相对不敏感,具有抑制噪声的作用。由于像素平均相当于对图像进行低通滤波,所以Sobel算子对边缘的定位不如Robert算子。但与Robert算子相比,Sobel算子有一定的抗干扰性,图像效果比较干净。

利用算子模板可求得水平和垂直方向的梯度00e4d0fc-a8d4-11ec-952b-dac502259ad0.png00f39e3e-a8d4-11ec-952b-dac502259ad0.png,再通过梯度合成便可获得边缘检测结果0104abd4-a8d4-11ec-952b-dac502259ad0.png,如下所示:

01182e8e-a8d4-11ec-952b-dac502259ad0.png

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

0126967c-a8d4-11ec-952b-dac502259ad0.png

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

0138bd02-a8d4-11ec-952b-dac502259ad0.png

图13 Sobel边缘检测

015010ce-a8d4-11ec-952b-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大小的图像

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

%WxWyPixel

% [-1-2-1][+10-1][P1P2P3]

% [000][+20-2][P4P5P6]

% [+1+2+1][+10-1][P7P8P9]

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锐化图像');

0167cb60-a8d4-11ec-952b-dac502259ad0.png

图15 Sobel锐化处理流程

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

017f89c6-a8d4-11ec-952b-dac502259ad0.png

图16 Sobel边缘检测与锐化

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

文章出处:【微信公众号:机器视觉智能检测】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红


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

    关注

    23

    文章

    4456

    浏览量

    90759
  • 图像
    +关注

    关注

    2

    文章

    1063

    浏览量

    40041
  • 检测
    +关注

    关注

    5

    文章

    4085

    浏览量

    90746

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

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于FPGA的Sobel边缘检测工作原理

    Sobel 边缘检测的工作原理是检测图像在水平和垂直方向上的梯度变化。为此,将两个卷积滤波器应用于原始图像,然后组合这些卷积滤波器的结果以确定梯度的大小。
    发表于 12-14 11:34 1120次阅读

    关于图像边缘检测器的VHDL的实现该怎么下手,求大神指教!

    准备要做一个以VHDL实现图像边缘检测器,用的是sobel算子,不怎么会写VHDL的代码,请各路大神指教,感激不尽!
    发表于 12-02 18:58

    基于FPGA的Sobel边缘检测实现

    我们在此基础上修改,从而实现,基于FPGA的动态图片的Sobel边缘检测、中值滤波、Canny算子边缘
    发表于 08-29 15:41

    基于FPGA的边缘检测Sobel算法

    转帖摘要: 针对嵌入式软件无法满足数字图像实时处理速度问题,提出用硬件加速器的思想,通过FPGA实现Sobel边缘检测算法。通过乒乓操作、并行处理数据和流水线设计,大大提高算法的处理速
    发表于 11-29 08:57

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

    之后的图像NO.7:Sobel边缘检测之后的图像【改进分析】暂无【源码下载】https://www.lanzous.com/iajjk5i密码:8czs【程序展示】% 功能:MATLAB实现
    发表于 04-01 19:03

    Labview图像处理——边缘检测

    边缘的灰度值过度较为明显,梯度算子可以得到较好的边缘检测结果。边缘提取其实也是一种滤波,不同的算子有不同的提取效果。比较常用的方法有三种,Sobel
    发表于 12-01 12:16

    边缘检测的几种微分算子

    一、边缘检测边缘检测的几种微分算子:一阶微分算子:Roberts、Sobel、Prewitt二阶微分算子:Laplacian、Log/Mar
    发表于 07-26 08:29

    【米尔MYS-8MMX开发板免费试用】-VI.Sobel边缘检测(ZMJ)

    【米尔MYS-8MMX开发板】-VI.Sobel边缘检测(ZMJ)1.功能简介本案例使用 GStreamer API 通过 ARM Cotrex-A53 从 USB 摄像头获取 MJPEG 格式视频
    发表于 09-10 15:41

    迅为iTOP-RK3568开发板Sobel 算子边缘检测

    ,是最为常用的边缘检测算子,但是得到的边缘较粗,可能出现伪边缘。 cv2.Sobel 函数功能: 使用
    发表于 09-18 10:27

    sobel_FPGA l边缘检测

    sobel_FPGA l边缘检测.源代码。
    发表于 05-03 16:42 9次下载

    基于CORDIC的高速Sobel算法实现

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

    FPGA图像处理的Sobel边缘检测

    Sobel边缘检测 Sobel边缘检测原理教材网上一大堆,核心为卷积处理。
    的头像 发表于 03-22 09:45 2666次阅读
    FPGA图像处理的<b class='flag-5'>Sobel</b><b class='flag-5'>边缘</b><b class='flag-5'>检测</b>

    Sobel算子原理介绍与实现方法

    索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量S
    的头像 发表于 07-21 17:27 9349次阅读

    SpinalHDL里如何实现Sobel边缘检测

    书接上文,趁着今天休假,采用SpinalHDL做一个小的demo,看看在SpinalHDL里如何优雅的实现Sobel边缘检测
    的头像 发表于 08-26 08:59 1019次阅读

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

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