边缘检测原理
《计算机视觉教程》笔记
编著:章毓晋(清华大学电子工程系)
出版社:人民邮电出版社
出版时间:2017.3
图像中的边缘是像素灰度值发生加速变化而不连续的结果。
边缘检测是常见的图像基元检测的基础,也是所有基于边界的图像分割方法的第一步。
像素灰度值的变化可利用计算导数的方法来检测,一般常使用一阶和二阶导数。
下面借助图4.1.1来介绍不同类型边缘的一些特点以及对它们进行检测的原理。
在图4.1.1中,第1排是图像中典型边缘的示例;
第2排是沿第1排中水平虚线位置得到的图像水平方向的对应剖面图;
第3和第4排分别为剖面的一阶和二阶导数。
这里考虑了3种常见的边缘剖面:
在图 4.1.1(a)中,对灰度值剖面的一阶导数在图像由暗变明的位置处有一个向上的阶跃,而在其他位置都为零。这表明可用一阶导数的幅度值来检测边缘的存在,幅度峰值一般对应边缘位置。对灰度值剖面的二阶导数在一阶导数的阶跃上升区间有一个向上的脉冲,而在一阶导数的阶跃下降区间有一个向下的脉冲。在这两个阶跃区间之间会有一个过零点,它的位置正对应原图像中边缘的位置。所以可用二阶导数的过零点检测边缘位置,而用二阶导数在过零点附近的符号确定边缘像素在图像边缘的暗区或明区。
在图4.1.1(b)中,脉冲状的剖面边缘与图4.1.1(a)所示的一阶导数形状相同,所以图4.1.1 (b)所示的一阶导数形状与图 4.1.1(a)所示的二阶导数形状相同,它的两个二阶导数过零点正好分别对应脉冲的上升沿和下降沿。通过检测脉冲剖面的两个二阶导数过零点就可确定脉冲的范围。对比前一种情况,可以看出直线段和边缘是不同的,需要用不同的检测方法。
在图 4.1.1(c)中,屋顶状边缘的剖面可看作是将脉冲边缘底部拉开而得到的,所以它的一阶导数是将图 4.1.1(b)所示的脉冲剖面的一阶导数的上升沿和下降沿分别拉伸开而得到的,而它的二阶导数是将脉冲剖面二阶导数的上升沿和下降沿拉开而得到的。通过检测屋顶状边缘剖面的一阶导数过零点可以确定屋顶的中心位置。
基于以上的讨论和检测原理,可采用许多不同的方式来检测边缘。在空域对边缘的检测常采用局部导数算子进行。下面分别对一阶导数算子和二阶导数算子进行介绍,然后讨论如何将检测出的边缘点连接成曲线或封闭轮廓并细化的技术。
边缘检测
1. 关于边缘模式的算法
边缘指的是图像内出现的明部和暗部的边界。边缘检测则是通过图像处理检测出该浓度变化的边界。可通过以下
4 个流程检测边缘。
2. 关于边缘模式的参数设置
想从倾斜边缘或多个候补中检测出任意边缘时,光靠初始值可能无法顺利进行。
此时调整设置参数,就可以稳定检测。
接下来解说常用的 2 个参数。
3. 使边缘检测更加稳定的预处理滤波器
在测量区域内向指定方向扫描进行边缘检测的区段,然后测量各个区段的边缘位置。在 1个 测量区域中可测量多个边缘位置信息,因此除了整体平均、最大、最小之外,还可以检测出以个别测量结果和全部测量结果为点群的圆形和直线。
4. 使边缘检测更加稳定的预处理滤波器
边缘检测中,如何抑制边缘偏差成为关键所在。作为使边缘检测稳定的高效滤波器,“中值”和“平均化”最为人们所熟知。接下来对这些预处理滤波器的特征和高效选定方法进行说明。
.首先明白所谓“零交叉”的概念。
在求图像边缘的时候如果计算一阶导数的边缘检测器如:(a) Roberts交叉算子(b)Sobel算子(c) Prewitt算子,会导致检测的边缘点太多;一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点,如下图所示,若用阈值来进行边缘检测,则在a和b之间的所有点都被记为边缘点,这就是为什么计算一阶导数的边缘检测器会导致检测的边缘点太多.但通过去除一阶导数中的非局部最大值,可以检测出更精确的边缘.一阶导数的局部最大值对应着二阶导数的 零交点 这意味着在边缘点处有一阶导数的峰值,同样地,有二阶导数的零交叉点.这样,通过找图像强度的二阶导数的零交叉点就能找到边缘点。在二维空间,对应二阶导数有两种算子:拉普拉斯算子和二阶方向导数。
以一维函数f(x)(阶跃边缘) 与f'(x)及f''(x)的对应关系来理解这个概念。
2.在零交叉点概念的基础上明白Canny 边缘检测器处理的图像的步骤:
step1.用高斯滤波器平滑图像.
step2.用一阶偏导的有限差分来计算梯度的幅值和方向.
step3.对梯度幅值应用非极大值抑制.
step4.用双阈值算法检测和连接边缘.
3.Canny算子中特别之处在步骤3和步骤4中体现;
首先,步骤三中不是仅仅把图像快速变化的问题转化成求幅值阵列的局部最大值问题.为确定边缘,增加了细化幅值图像中的屋脊带,即根据3*3领域中心点的扇区值决定的梯度方向,用领域中心点幅值与梯度方向上相邻的2个元素进行比较,只保留幅值局部变化最大的点.这一过程叫非极大值抑制(Non-Maxima Suppression,NMS ),它会生成细化的边缘.
另外,步骤4中用了双阈值技术,双阈值算法对非极大值抑制图像作用双阈值t1和t2,且t2约为t1的两倍,得到两个阈值边缘图像T1[i,j]和T2[i,j].由于图像T2[i,j]是用高阈值得到的,因此它含有很少的假边缘,但T2[i,j]可能在轮廓上有间断(太多的假错误).双阈值法要在T2[i,j]中把边缘连接成轮廊,当到达轮廊的端点时,该算法就在T1[i,j]的8-邻点位置寻找可以连接到轮廊上的边缘,这样,算法将不断地在T1[i,j]中收集边缘,直到将T2[i,j]中所有的间隙连接起来为止.这一算法是阈值化的副产物,并解决了阈值选择的一些问题.
边缘检测算子有哪些?它们各有什么优缺点
边缘检测算子一阶的有Roberts Cross算子,Prewitt算子,Sobel算子,Canny算子, Krisch算子,罗盘算子;而二阶的还有Marr-Hildreth,在梯度方向的二阶导数过零点。
Roberts算子
一种利用局部差分算子寻找边缘的算子,分别为4领域的坐标,且是具有整数像素坐标的输人图像;其中的平方根运算使得该处理类似于人类视觉系统中发生的过程。
Sobel算子
一种一阶微分算子,它利用像素邻近区域的梯度值来计算1个像素的梯度,然后根据一定的绝对值来取舍。
Prewitt算子
Prewitt算子是3*3算子模板。2个卷积核dx ,不要形成了Prewitt算子。与Sobel算子的方法一样,图像中的每个点都用这2个核进行卷积,取最大值作为输出值。
各个算子的优缺点:
Robert算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏感。
Prewitt算子和Sobel算子都是一阶的微分算子,而前者是平均滤波,后者是加权平均滤波且检测的图像边缘可能大于2个像素。这两者对灰度渐变低噪声的图像有较好的检测效果,但是对于混合多复杂噪声的图像,处理效果就不理想了。
LOG滤波器方法通过检测二阶导数过零点来判断边缘点。LOG滤波器中的a正比于低通滤波器的宽度,a越大,平滑作用越显著,去除噪声越好,但图像的细节也损失越大,边缘精度也就越低。所以在边缘定位精度和消除噪声级间存在着矛盾,应该根据具体问题对噪声水平和边缘点定位精度要求适当选取。