目录
一、边缘分割评判标准
- 要对边缘的错误检测率尽可能的低;
- 检测出来的边缘要尽可能接近真实边缘;
- 单边缘相应准则,对同一边缘要有低的相应次数,即对但边缘最好只有一个相应。
二、一些边缘分割算法的缺点(sobel prewitt)
- 没有充分利用边缘的梯度方向(仅仅是xy方向或者是45 135度方向);
- 最后输出的边缘二值图,只是简单地利用阈值进行处理,如果阈值过大,则会损失很多边缘信息,如果过小,则会有很多噪声。
三、Canny 算法
针对以上两个缺点,canny 算法做出了改进,提出了:
1、基于边缘梯度方向的非极大值抑制;
2、双阈值的滞后阈值处理。
(一)高斯滤波-高斯模板哪里来的
通常对图像先进行高斯滤波,滤去噪声;高斯滤波要用高斯模板
例如:
高斯模板来源于高斯函数,通过选取不同的sigma,得到不同的模板,得到模板后,进行归一化,成为最终的现在我用使用的高斯滤波模板。
例如选取sigma为1.4,得到5*5模板(x,y)的坐标带入进去得到
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
1 | 0.0121 | 0.0261 | 0.0337 | 0.0261 | 0.0121 | |
2 | 0.0261 | 0.0561 | 0.0724 | 0.0561 | 0.0261 | |
3 | 0.0337 | 0.0724 | 0.0935 | 0.0724 | 0.0337 | |
4 | 0.0261 | 0.0561 | 0.0724 | 0.0561 | 0.0261 | |
5 | 0.0121 | 0.0261 | 0.0337 | 0.0261 | 0.0121 | |
6 |
然后进行归一化处理,然后进行约等于,得到5*5模板
(二)Sobel算子
用3*3 Sobel 算子模板求得x以及y方向上的梯度,以及两方向梯度的平方和;例如现在有一个图像的数字化信息是这样的:
经过卷积后,得到x以及y方向的梯度——dx dy:
以及dx和dy的平方和开方:
Sobel 算法的话,到了这里基本上就要结束了,只需要将以上数值缩放至 0-255,然后设置
國值进行2值化就完成了。下面我们看一下Canny算法的过程。
(三)非极大值抑制
首先求出 angle:angle 本质上来说就是梯度的方向;然后根据得到的方向,对该方向的值进行比对,非极大值要抑制为0,极大值保留。
根据angle来进行相应方向上的大小比较,如果和相应方向上的两个值进行对比,不是极大值,那么这一点置零;是极大值则保留。如下图:
我们可以看到,在我们写程序过程中,不同角度比对不同位置的数值,如下图:
全部比对后,完成了非极大值的抑制。
然后将所有数值 convertTo 到0-255区间,得到了非极大值抑制的图像。
·加入插值算法的非极大值抑制
根据 ratio = x/y 来得到系数,然后进行插值,之后在进行比对。
(四)双阈值的滞后阈值处理
然后进行双阈值二值化,设置低阈值为40,高域值为150;这一过程的思路是首先选定边缘强度大于高阈值的所有确定边缘点,然后在边缘强度大于低阈值的情况下尽可能延长边缘,如果最终能够连接到强边缘点,则这些点保留。
具体实现来说:小于低阈值的边缘点直接剔除;大于高阈值的点确认为边缘点;
重点:对强边缘进行延伸(trace 函数),只有大于低阈值的点都进行保留,直到没有为止。