1. Sobel 算子
Sobel只是Prewitt的一个扩展,即中间元素乘以2,是为了起平滑图像的作用。而在Matlab中的用法则和Prewitt算子完全相同,故此处不再赘述,仅列出其用法。
在Matlab中Sobel的调用格式如下:
BW = edge(I,'sobel')
BW = edge(I,'sobel',thresh)
[BW,thresh] = edge(I,'sobel')
BW = edge(I,'sobel',thresh,direction)
BW = edge(I,'sobel',...,OPTIONS)
1. Roberts算子
Roberts算子是边缘检测算子中最古老的一种,也是最简单的一种,因为在部分功能上的限制,所以这种检测算子的使用明显少于其他几种算子(比如Roberts算子是非对称的,且不能检测45°倍数的边缘),具体形式如下:
在Matlab中的调用方式也和上述两种算子相同。
BW = edge(I,'roberts')
BW = edge(I,'roberts',thresh)
BW = edge(I,'roberts',...,OPTIONS)
[BW,thresh] = edge(I,'roberts',...)
4.Laplacian of Gaussian 算子(简称Log算子)
基于拉普拉斯和高斯滤波的边缘检测算子,在二维空间,拉普拉斯表达式为:
由上式我们不难看出,拉普拉斯算子计算过程实质为对f(x,y)求二次导,这对于强对比边缘来说具有更好的检测作用,但是无疑也对噪声更加敏感,因此在进行拉普拉斯运算之前先进行高斯滤波以平滑图像,整个处理过程可表达为:
因此,基于高斯滤波的拉普拉斯运算的边缘检测可直接由经拉普拉斯运算后的高斯模板与输入图像卷积获得。一个5×5邻域的Log算子可表示为:
同时我们不难发现,由于拉普拉斯适用于检测较强对比度的图像边缘,而对于灰度变化相对缓慢的过渡区域边缘,其检测结果可能为一条较粗的边缘线或者一个封闭狭长的区域,狭长区域中被置0的点称为过零点或零交叉点,所以对于正常未被高对比度处理的图像来说,基于拉普拉斯边缘检测算子处理之后的边缘都存在过零点现象,我们便可通过检测过零点来检测图像的边缘。
基于高斯滤波的拉普拉斯边缘检测算法在Matlab中的具体调用格式为:
BW = edge(I,'log')
直接调用,’log’表示使用的边缘检测算子为基于高斯平滑滤波的拉普拉斯边缘检测算子,其他参数均由Matlab根据输入图像计算得出或者取默认值。
BW = edge(I,'log',thresh)
Thresh表示任何灰度值低于该阈值的边缘都不会被检测到,若未指定该阈值,则Matlab会根据输入图像自动算出
BW = edge(I,'log',thresh,SIGMA)
SIGMA为高斯滤波模板的方差,默认值为2且高斯滤波模板大小未指定时尺寸计算公式为:
N=CEIL(SIGMA*3)*2+1.
[BW,thresh] = edge(I,'log',...)
当然,如果想知道Matlab根据输入图像算出的最优thresh为何值,上述调用方法便能得到。canny边缘检测 matlab
BW = edge(I,'zerocross',thresh,H)
除此之外,若需要自己指定算子进行Log边缘检测的话,也可使用此调用方式,其中H为自己指定的算子,thresh同上。
[BW,thresh] = edge(I,'zerocross',...)
本质上,Log边缘检测算法的主体思路在于先用高斯平滑对图像进行平滑滤波,然后用拉普拉斯计算得到零交叉点,最后找出图像中的零交叉点并以此作为被检测图像的边缘。但是,LOG仅仅是对利用零交叉点法对高频噪声进行了滤除,而一幅图像中不仅仅只有高频噪声,低频同质化区域往往也是干扰检测质量的一个重要因素。于是,在基于LOG检测思想上,另一种基于高斯差分边缘检测算法被提出来;其具体实现形式为建立两个仅方差不同的高斯滤波模板,并把这两模板作差分运算,将其差分后的结果作为卷积的模板,最后得到的也是含交叉零点的边缘检测图像,因此LoG与DoG检测算法的本质不同就是卷积时的模板不同而已。其过程的数学表达式如下:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-33967-2.html
希望看到国家强盛
毕竟是中国先到美国十二海里