`

openCV入门----边缘检测(二):拉普拉斯算子

 
阅读更多

    上文简单讲述了一阶导数在边缘检测中的应用。而使用一阶导数进行边缘检测,往往会使得图像的细节丢失,那么此时,我们需要用到二阶导数来进行边缘检测,也就是拉普拉斯算子。

    对于二维函数的导数求法如下:
                                                   

    可以近似如下:
                                   

    于是我们得到对应的拉普拉斯滤波模板:

                  [ 0, 1, 0; 1, -4, 1; 0, 1, 0 ]

  上述模板也可以写成:

                  [ 0, -1, 0; -1, 4, -1; 0, -1, 0 ]

 

<!--EndFragment-->     openCV中拉普拉斯边缘检测的使用:

                     void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 );

      参数解释,与Sobel的应用是一致的。

      实验结果:

 laplace 3*3 边缘检测效果

 

 

一阶、二阶导数在边缘检测上的应用对比以及改进
 
  (一)、(二)主要简单叙述了一下一阶导数、二阶导数在边缘检测上的应用,实际上也是对应的边缘检测的两种实现思路:1.基于查找法的边缘检测算法:通过寻找一阶导数中的最大值和最小值来检测边界,通常是将边界定位在梯度最大的方向,是基于一阶导数的边缘检测算法;2.基于零穿越检测的边缘检测算法:通过检测拉普拉斯零点来判断边缘,是基于二阶导数的边缘检测算法。

    其实也很好理解,灰度图像中的边缘一定是变化相对比较剧烈的区域,那么这个区域灰度值的一阶导数便是取极大值或者极小值,对应的二阶导数自然是为0的。

 

   通过比对,这个两种方法各有各自的优缺点:

1>一阶导数往往会产生较宽的边缘,而二阶导数对于软边缘来说产生较细的边缘,并且可能会产生双边缘

<!--EndFragment-->

2>二阶导数对细节有较强的响应,如细线和孤立噪声点

<!--EndFragment-->3>二阶导数无法检测边缘的方向 
                          
                  (图片来源为百度文库http://www.docin.com/p-718682582.html) 

如上图所示,从左至右分别代表阶跃性边缘、屋檐性边缘,也是应用场合碰的最多的两种边缘类型,其一阶、二阶导数图像给出。

 

拉普拉斯边缘检测的改进

对于拉普拉斯边缘检测,最让人头疼的是噪声的放大!所以,人们往往在使用Laplace边缘检测之前先使用高斯滤波,于是就得到了LoG边缘检测方法。虽然看上去很简单,但是却非常的实用。

  • 大小: 2.5 KB
  • 大小: 3.9 KB
  • 大小: 147.8 KB
  • 大小: 53.5 KB
1
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics