HALCON边缘检测
边缘检测的算法分类
基于查找的方法
通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向,是基于一阶导数的边缘检测算法
基于零穿越的方法
通过寻找图像二阶导数零穿越来寻找边界,通常是拉普拉斯过零点或者非线性差分表示的过零点,是基于二阶导数的边缘检测算法
Prewitt算子
通过利用像素点上下、左右邻点灰度差,在边缘处达到极值的方法检测边缘。它的方程和Sobel算子完全一样,因此都考虑了邻域信息,所不同的是平滑部分的权值有些差异,因此对噪声具有一定的抑制能力,但不能完全排除检测结果中出现的虚假边缘。Prewitt算子不仅能检测边缘点,而且能抑制噪声的影响,因此对灰度和噪声较多的图像处理得较好。
卷积模板如下
A= [ 1 1 1 0 0 0 − 1 − 1 − 1 ] \left[ \begin{matrix} &1 &1 &1\\ &0 &0 &0\\ &-1 &-1 &-1\\ \end{matrix} \right] ⎣ ⎡10−110−110−1⎦ ⎤
B= [ 1 0 − 1 1 0 − 1 1 0 − 1 ] \left[ \begin{matrix} &1 &0 &-1\\ &1 &0 &-1\\ &1 &0 &-1\\ \end{matrix} \right] ⎣ ⎡111000−1−1−1⎦ ⎤
prewitt_amp (ImageReduced, ImageEdgeAmp)
threshold (ImageEdgeAmp, Regions, 25, 80)
检出效果
Kirsch算子
Kirsch算法由K0K7八个方向的模板决定,将K0K7的模板元素分别与当前像素点的3×3模板区域的像素点相乘,然后选八个值中最大的值作为中央像素的边缘强度。
卷积模板如下
A= [ − 3 − 3 5 − 3 0 5 − 3 − 3 5 ] \left[ \begin{matrix} &-3 &-3 &5\\ &-3 &0 &5\\ &-3 &-3 &5\\ \end{matrix} \right] ⎣ ⎡−3−3−3−30−3555⎦ ⎤
B= [ − 3 5 5 − 3 0 5 − 3 − 3 − 3 ] \left[ \begin{matrix} &-3 &5 &5\\ &-3 &0 &5\\ &-3 &-3 &-3\\ \end{matrix} \right] ⎣ ⎡−3−3−350−355−3⎦ ⎤
C= [ 5 5 5 − 3 0 − 3 − 3 − 3 − 3 ] \left[ \begin{matrix} &5 &5 &5\\ &-3 &0 &-3\\ &-3 &-3 &-3\\ \end{matrix} \right] ⎣ ⎡5−3−350−35−3−3⎦ ⎤
D= [ 5 5 − 3 5 0 − 3 − 3 − 3 − 3 ] \left[ \begin{matrix} &5 &5 &-3\\ &5 &0 &-3\\ &-3 &-3 &-3\\ \end{matrix} \right] ⎣ ⎡55−350−3−3−3−3⎦ ⎤
E= [ 5 − 3 − 3 5 0 − 3 5 − 3 − 3 ] \left[ \begin{matrix} &5 &-3 &-3\\ &5 &0 &-3\\ &5 &-3 &-3\\ \end{matrix} \right] ⎣ ⎡555−30−3−3−3−3⎦ ⎤
F= [ − 3 − 3 − 3 5 0 − 3 5 5 − 3 ] \left[ \begin{matrix} &-3 &-3 &-3\\ &5 &0 &-3\\ &5 &5 &-3\\ \end{matrix} \right] ⎣ ⎡−355−305−3−3−3⎦ ⎤
G= [ − 3 − 3 − 3 − 3 0 − 3 5 5 5 ] \left[ \begin{matrix} &-3 &-3 &-3\\ &-3 &0 &-3\\ &5 &5 &5\\ \end{matrix} \right] ⎣ ⎡−3−35−305−3−35⎦ ⎤
H= [ − 3 − 3 − 3 − 3 0 5 − 3 5 5 ] \left[ \begin{matrix} &-3 &-3 &-3\\ &-3 &0 &5\\ &-3 &5 &5\\ \end{matrix} \right] ⎣ ⎡−3−3−3−305−355⎦ ⎤
kirsch_amp (ImageReduced, ImageEdgeAmp1)
threshold (ImageEdgeAmp1, Regions2, 160, 255)
检出效果