??? 上文简单讲述了一阶导数在边缘检测中的应用。而使用一阶导数进行边缘检测,往往会使得图像的细节丢失,那么此时,我们需要用到二阶导数来进行边缘检测,也就是拉普拉斯算子。
??? 对于二维函数的导数求法如下:
???????????????????????????????????????????????????
??? 可以近似如下:
???????????????????????????????????
??? 于是我们得到对应的拉普拉斯滤波模板:
????????????????? [?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边缘检测方法。虽然看上去很简单,但是却非常的实用。
原文:http://lps-683.iteye.com/blog/2251911