• 【图像边缘检测】基于matlab灰度图像的积累加权边缘检测【含Matlab源码 2010期】


    一、基于灰度图像的积累加权边缘检测方法简介

    1 引言
    在图像分割中,边缘检测方法是人们研究得最多的方法,它试图通过检测包含不同区域的边缘来解决图像分割问题。图像的大部分主要信息都存在于图像的边缘中,主要表现为图像局部特征的不连续性,是图像中灰度变化比较剧烈的地方,亦即通常所说的信号发生奇异变化的地方。奇异信号沿边缘走向的灰度变化剧烈,通常将边缘划分为阶跃状和屋顶状两种类型。阶跃边缘中边缘两边的灰度值有明显的变化;而屋顶状边缘中边缘位于灰度增加与减少的交界处。在数学上可利用灰度的导数来刻画边缘点的变化,对阶跃边缘、屋顶状边缘分别求其一阶、二阶导数。可见,对阶跃边缘点其灰度变化曲线的一阶导数在边缘点达到极大值,二阶导数在边缘点与零交叉。对屋顶状边缘点,其灰度变化曲线的一阶导数在边缘点与零交叉,二阶导数在边缘点达到极值。

    经典的边缘检测方法,是对原始图像中像素的某小邻域构造边缘检测算子。首先通过平滑来滤除图像中的噪声,然后进行一阶微分或二阶微分运算,求得梯度最大值或二阶导数的过零点,最后选取适当的阈值来检测边界。

    由于各种原因,图像常常受到随机噪声的干扰。经典的边缘检测方法由于引入了各种形式的微分运算,从而必然引起对噪声的极度敏感,再加上执行边缘检测的结果常常是把噪声当做边缘检测出来,而真正的边缘也由于受到噪声干扰而没有被检测出来。因而对于有噪图像来说,一种好的边缘检测方法应具有良好的噪声抑制能力,同时又有完备的边缘保持特性。

    针对传统边缘检测方法抗噪性小的问题,本文提出了积累加权边缘检测方法。该方法既有良好的噪声抑制能力,同时又能有效保持图像的边缘特性。介绍了经典的边缘检测方法,提出了积累加权边缘检测法及其实现步骤,对积累加权边缘检测法进行了仿真,并与传统的Laplace和Sobel方法进行了比较,最后对积累加权边缘检测法的优点进行了讨论。

    2经典的边缘检测方法
    2.1经典边缘检测的基本方法

    图像的局部边缘定义为两个强度明显不同的区域之间的过渡,图像的梯度函数即图像灰度变化的速率将在这些过渡边界上存在最大值。早期的边缘检测是通过基于梯度算子或一阶导数的检测器来估计图像灰度变化的梯度方向,增强图像中的这些变化区域,然后对该梯度进行阈值运算,如果梯度值大于某个给定门限,则存在边缘。

    一阶微分是图像边缘和线条检测的最基本方法。图像函数r(x,y)在点(x,y)的梯度(即一阶微分)是一个具有方向和大小的矢量,即
    在这里插入图片描述
    以上述理论为依据,人们提出了许多算法,常用的方法有差分边缘检测、Roberts边缘检测算子、Sobel边缘检测算子、Prewit边缘检测算子、Robinson边缘检测算子、Laplace边缘检测算子等。

    所有基于梯度的边缘检测器之间的根本区别有3个:算子应用的方向;在这些方向上逼近图像一维导数的方式;将这些近似值合成梯度幅度的方式。

    限于篇幅,本文只介绍综合性能公认为最好的Laplace边缘检测算子。

    2.2Laplace边缘检测算子
    我们知道,一阶微分是一个矢量,与标量相比,其存储量大。另外,在具有等斜率的宽区域上,有可能将全区域都当做边缘检测出来。因此,有必要求出斜率的变化率,即对图像函数进行二阶微分运算:
    在这里插入图片描述
    式中:f(x,y)为图像的灰度表示。

    这就是应用Laplace算子检测边缘的形式,即二阶偏导数之和,它是一个标量,属于各向同性的运算,对灰度突变敏感。在数字图像中,可用差分来近似微分,其离散计算形式为:
    在这里插入图片描述
    也可以写成:
    在这里插入图片描述
    Laplace算子对不同的边缘类型有阶跃状边缘和屋顶状边缘两种估算模板。阶跃状边缘为:
    在这里插入图片描述
    屋顶状边缘为:
    在这里插入图片描述
    对阶跃状边缘,二阶导数在边缘点产生一个陡峭的零交叉,即边缘点两边二阶导函数取异号。Laplace算子就是据此对图像f(x,y)的每个像素取它关于x方向和y方向的二阶差分之和,这是一个与边缘方向无关的边缘检测算子。而对屋顶状边缘,在边缘点的二阶导数取极小值,这时对图像f(x,y)每个像素取它关于x方向和y方向的二阶差分之和的相反数。

    Laplace算子有两个缺点:一是边缘方向信息的丢失;二是Laplace算子为二阶差分,双倍加强了图像中的噪声影响。优点是各向同性,即具有旋转不变形。因为在微分学中,一个只包含偶次阶导数和取偶次幂的齐次阶导数的线性组合算子,一定是各向同性的。

    Laplace算子是二阶微分算子,利用边缘点处二阶导函数出现零交叉原理检测边缘。不具有方向性,定位精度高,不但检测出了绝大部分的边缘,同时基本上没有出现伪边缘。但它的检测也存在一些缺点,例如丢失了一些边缘、有一些边缘不够连续、不能获得边缘方向等信息。而且Laplace算子为二阶差分,与一阶微分比较,Laplace算子对噪声更敏感,它使噪声成分加强,因此在实际应用中必须充分注意。通常在进行微分运算之前需要对图像进行平滑。

    针对边缘检测算子对噪声十分敏感的问题,我们提出了积累加权边缘检测这种新的方法。

    3积累加权边缘检测法
    提出的模糊滤波方法利用两个模糊准则对噪声图像进行滤波,效果良好。其缺点是实现时步骤繁多,处理运算量大,极大地影响了算法的实时性。积累加权边缘检测法抽取其合理内核,并且针对有噪声污染的图像提出一种鲁棒性更强的方法,将之应用于边缘检测。

    3.1积累加权边缘检测法的实现
    3.1.1 求中心像素各方向的边缘导数

    首先,积累加权边缘检测法要求出中心像素(x,y)各方向的边缘导数。表1给出计算各方向导数时所用到的像素中心和方向(3×3大小的模块)。
    在这里插入图片描述
    考虑像素(x,y)的一个3×3的邻域,如图1(a)所示。一种简单的导数定义为像素(x,y)与这个D方向的像素的差分。这个导数值由∇D(x,y)表示。例如:
    在这里插入图片描述
    在这里插入图片描述
    图1像素(x,y)的领域和像素块
    考虑到噪声的顽固性,本文扩展了求导的规模,考虑用5×5大小的模块。表2给出计算各方向导数时所用到的像素中心和方向,计算规则与3×3大小的模块相似。

    表2计算各方向导数时所用到的像素中心和方向(5×5)
    在这里插入图片描述
    3.1.2 对经过像素(x,y)的边缘进行积累
    对求得的像素的8个方向的导数进行阈值处理。应用上述准则:如果三分之二的导数值小于阈值,认定在目前的方向上没有出现边界;如果三分之二的导数值大于阈值,认为在此方向上存在边缘。

    在每个像素(x,y)的邻域内,应用上述准则:如果8个方向中如果任一方向存在一个边缘,则对此像素位置在积累值m上加1;如果存在第2个,则再加1,依此类推。故每一个像素点的积累值m范围为0~8。

    3.1.3 对像素边缘的积累值进行加权
    由于直接利用上述结果进行作图是不现实的,会存在对比度太小、视觉上无法识别等缺点,我们采取对每个像素位置上的积累值加权的办法。可以采用线性加权,也可以采用非线性加权,但必须考虑一个准则,由于我们处理的是灰度图像,加权后的值必须在0~255范围内。我们这里采用了指数加权。由于
    在这里插入图片描述
    结合m范围为0~8,我们认为选择以2为底的对积累值进行指数加权是合适的。如果加权前的积累值为m,加权后的积累值为w,则有:
    在这里插入图片描述
    在实际操作中,由于实际图像像素点积累很难达到6~8的范围,故可适当考虑增大式(5)底数的值,使边缘图的对比度更大。

    3.1.4 利用加权后的积累值作出边缘的灰度图像
    根据加权后得到的各个像素位置的w值,作出相应的图像边缘的灰度图像。

    二、部分源代码

    lphaar = [1/sqrt(2),1/sqrt(2)];     
    hphaar = [-1/sqrt(2),1/sqrt(2)];
    hphaar2 = [1/sqrt(2),-1/sqrt(2)];
    lphaar2 = [1/sqrt(2),1/sqrt(2)];      
    
    
    x = imread('test2.jpg');
    I = im2double(x);
    it = 3;
    it2= 2;
    LH=img_lh(I,it,lphaar,hphaar);
    HL=img_hl(I,it,lphaar,hphaar);
    
    
    
    [LH_recomp,HL_recomp]=img_LH_and_HL_recomp(LH,HL,it,lphaar2,hphaar2)
    
    
     for i=1:it
         LH_recomp_decomposed{i}=rec_decomp(LH_recomp{i},it2,lphaar,hphaar);
         HL_recomp_decomposed{i}=rec_decomp(HL_recomp{i},it2,lphaar,hphaar);
     end
    
     for i=1:it
    	fused{i}=img_fusion(LH_recomp{i},HL_recomp{i},lphaar,hphaar,lphaar2,hphaar2,it2); 
    	figure
    	imshow(fused{i},[]);
     end
     
    
     %The scale multiplication is implemented using the corelation of two adjacent dwt scales
     %in this case, the correlation is computed using the two adjacent levels , 2 and 3
     scale2= (4*fused{2}+2*fused{3})/4.4721;
     %in this case, the correlation is computed using the two adjacent levels , 1 and 2
     scale1= (8*fused{1}+4*fused{2})/8.944;
    
    figure
    imshow(im2bw(scale1,0.70));%noise removed at this treshold
    figure
    imshow(im2bw(scale2,0.70));
    
     function Final=img_fusion(LH_out,HL_out,lphaar,hphaar,lphaar2,hphaar2,it2)
    
      %LH_output here
    it2=1;
    LL=[];LH=[];HL=[];HH=[];
       
        app_img = LH_out;    % Initializing the Approximation Image.
        
        for i = 1:it2
            [LL{i}, LH{i} ,HL{i} , HH{i}] = img_decomp(app_img, lphaar, hphaar);
            app_img = LL{i};
        end
        
        
        LH_final = LL{it2};
        for i = it2:-1:1
            LH_final = [LH_final,LH{i};HL{i},HH{i}];
        end
       LH_final=(LH_final-min(min(LH_final)))/(max(max(LH_final)) - min(min(LH_final)));
        
        %HL_output here 
        app_img = HL_out;    % Initializing the Approximation Image.
        
        for i = 1:it2
            [LL{i}, LH{i} ,HL{i} , HH{i}] = img_decomp(app_img, lphaar, hphaar);
            app_img = LL{i};
        end
        
        HL_final = LL{it2};
        for i = it2:-1:1
            HL_final = [HL_final,LH{i};HL{i},HH{i}];
        end
     HL_final=(HL_final-min(min(HL_final)))/(max(max(HL_final)) - min(min(HL_final)));
    
        Final = img_fuse(LH_final, HL_final);
        
        
       
        
        Final = img_recomp(Final, it2, lphaar2, hphaar2);
    Final=(Final-min(min(Final)))/(max(max(Final)) - min(min(Final)));
    end
    
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85

    三、运行结果

    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1]焦京峰,肖怀铁,付强.基于灰度图像的积累加权边缘检测方法[J].电子工程师. 2005,(10)

    3 备注
    简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 相关阅读:
    HTTP实现断点续传
    UNIAPP框架中使用BLE蓝牙连接
    nodejs+vue 医院病历管理系统
    【LeetCode Cookbook(C++ 描述)】一刷二叉树之递归遍历(DFS)(下)
    八、混合整数线性规划问题
    初探 Vue3 新特性
    Docker使用遇到问题:docker build requires exactly 1 argument(s)
    使用Easyocr处理图片遇到的问题合集
    活动回顾∣企企通亮相高质量企业数字化活动,深入探讨各领域采购数字化转型与变革
    乘方(pow) CSP-J2022
  • 原文地址:https://blog.csdn.net/TIQCmatlab/article/details/126108503