边缘检测:
https://blog.csdn.net/tigerda/article/details/61192943
常见边缘检测算子:Roberts 、Sobel 、Prewitt、Laplacian、Log/Marr、Canny、Kirsch、Nevitia
一阶微分算子:Roberts 、Sobel 、Prewitt
模板:
Roberts
|1, 0|
|0,-1|
sobel算子
|1, 0 , 1|
|1, 0 , 1|
|1, 0 , 1|
prewitt算子
|1, 0 , 1|
|1, 0 , 1|
|1, 0 , 1|
Sobel各向同性算子:
|-1 ,0, 1| |-1,-跟2,-1|
Gx=|-跟2,0,跟2| ,Gx=| 0, 0, 0|
|-1 ,0, 1| | 1, 跟2, 1|
Sobel各向同性算子的权值比普通Sobel算子的权值更准确。为什么?模板的权值是离中心位置越远则权值(看绝对值)影响越小
计算边缘幅值与方向?以Sobel算子为例。3*3Sobel两个方向的算子在图像上滑动,模板与其覆盖的图像3*3区域9个像素进行卷积,求和后得到此方向的边缘检测幅值。
|-1,0,1| |-1,-2,-1|
Gx=|-2,0,2|*f(x,y) ,Gx=| 0, 0, 0|*f(x,y)
|-1,0,1| | 1, 2, 1|
G^2=Gx^2+Gy^2
P=arctan(Gx/Gy)
f(x,y)为图像,Gx和Gy分别是水平和竖直方向算子的卷积结果,G则是最终得到的边缘幅值,θ值则是边缘方向。当然G的计算有时简化为
G=|Gx|+|Gy| 或者 G=max(|Gx|,|Gy|)
二阶微分算子:Laplacian、Log/Marr
Laplacian算子
|-1,-1,-1|
Gx=|-1, 8,-1|
|-1,-1,-1|
| 0,-1, 0|
Gx=|-1, 4,-1|
| 0,-1, 0|
|-2,-4,-4,-4,-2|
|-4, 0, 8, 0,-4|
Gx=|-4, 8,24, 8,-4|
|-4, 0, 8, 0,-4|
|-2,-4,-4,-4,-2|
Log边缘检测则是先进行高斯滤波再进行拉普拉斯算子检测
非微分边缘检测算子:Canny
算 子 | 优缺点比较 |
---|---|
Roberts | 对具有陡峭的低噪声的图像处理效果较好,但利用 Roberts算子提取边缘的结果是边缘比较粗,因此边缘定位不是很准确。 |
Sobel | 对灰度渐变和噪声较多的图像处理效果比较好, Sobel算子对边缘定位比较准确。 |
Kirsch | 对灰度渐变和噪声较多的图像处理效果较好。 |
Prewitt | 对灰度渐变和噪声较多的图像处理效果较好。 |
aplacian | 对图像中的阶跃性边缘点定位准确,对噪声非常敏感,丢失一部分边缘的方向信息,造成一些不连续的检测边缘。 |
LoG | 算 子 经 常 出 现 双 边 缘 像 素 边 界 , 而 且 该 检 测 方 法 对 噪 声 比铰 敏 感 , 所 以 很 少 用 LoG算 子 检 测 边 缘 , 而 是 用 来 判 断 边 缘 像素是位于图像的明区还是暗区。 |
Canny | 此方法不容易受噪声的干扰,能够检测到真正的弱边缘。在edge函数中,最有效的边缘检测方法是 Canny方法。该方法的优点在于使用两种不同的阈值分别检测强边缘和弱边缘,并且汉当弱边缘与强边缘相连时,才将弱边缘包含在输出图像中。因此,这种方法不容易被噪声“填充”,跟容易检测出真正的弱边缘。 |