边缘检测有哪些步骤?canny边缘检测算法如何获取边缘?
扫描二维码
随时随地手机看文章
边缘检测在图像处理中是非常重要的,通过边缘检测,我们能够区分一张图像的边缘部分。为增进大家对边缘检测的认识,本文将对边缘检测的步骤以及canny边缘检测算法获取边缘与轮廓提取的方法予以介绍。如果你对边缘检测具有兴趣,不妨继续往下阅读哦。
一、边缘检测步骤
①滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折中。
②增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度幅值来完成的。
③检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判据是梯度幅值阈值判据。
④定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。在边缘检测算法中,前三个步骤用得十分普遍。这是因为大多数场合下,仅仅需要边缘检测器指出边缘出现在图像某一像素点的附近,而没有必要指出边缘的精确位置或方向。
边缘检测的实质是采用某种算法来提取出图像中对象与背景间的交界线。我们将边缘定义为图像中灰度发生急剧变化的区域边界。图像灰度的变化情况可以用图像灰度分布的梯度来反映,因此我们可以用局部图像微分技术来获得边缘检测算子。经典的边缘检测方法,是通过对原始图像中像素的某小邻域构造边缘检测算子来达到检测边缘这一目的的。
二、canny边缘检测算法获取边缘与轮廓提取
1.获取边缘
为了提取单像素宽边缘,必须细化梯度幅值图。在梯度幅值图像中,M[i,j]的极大值所在位置附近会产生屋脊带,只有细化这些屋脊带才能精确地确定边缘的位置,仅保留幅值局部变化最大的点,这一过程叫做非极大值抑制。在非极大值抑制过程中,Canny算子使用3×3大小,包含8个方向的邻域对梯度幅值阵列M[i,j]的所有像素沿梯度方向进行梯度幅值的插值,在每一个点上,邻域的中心像素M[i,j]与沿梯度方向的2个梯度幅值的插值结果进行比较,如果邻域中心点的幅值M[i,j]不比梯度方向上的2个插值结果大,则将M[i,j]对应的边缘标志位赋值为0,这一过程把M[i.j]宽屋脊带细化为一个像素宽,并且保留了屋脊的梯度幅值。
对经过非极大值抑制和梯度直方图分类的子图像N[i,j]分别使用高、低2个阈值thrA和thrl,将梯度小于阈值的像素灰度置为0,分割得到2个阈值边缘图像TH[i,j]和TL[i,j]。由于图像TH[i,j]是由高阈值得到,因此伪边缘很少,但TL[i,j]保留边缘信息较为全面,但也含有一些伪边缘。因此以图像TH[i,j]为基础,图像TL[i,j]为补充获得相对较为全面的边缘。
2.轮廓跟踪或轮廓提取
在对图像进行canny边缘检测后,可能会出现某些检测边缘断裂、不连续的现象,为了解决这个问题,使获得的目标检测物体的边缘能够连续并且去除多余的伪边缘,在边缘检测后,再对图像进行边界跟踪,便可使这一问题得以很好地改善。
对于二值图像,轮廓提取的基本方法是掏空内部点,即如果原图像中有一点为黑,且其他相邻的8个点都为黑,则将该点删除。
本文借鉴二值图像轮廓跟踪方法,即将每一点与其相邻的8个点作比较。具体方法为:(1)先找到第一个边界像素。按从左到右、从下到上的顺序搜索,找到的第一个白点一定是最左下方的边界点,记为A0,它的右、右上、上、左上四个相邻点中至少有一个是边界点,记为B0,从B0开始找起,按右、右上、上、左上、左、左下、下、右下的顺序找8个相邻点中的边界点C0,如果C0就是A0点,则表明已经转了一圈,结束;否则从C0点继续找,直到找到A0为止;(2)判断是否边界点:如果它的8个相邻点都不是白点,则它即为边界点。对于边界跟踪来说,跟踪后产生的轮廓边缘宽度只有一个像素,实现了边缘像素点单一、清晰,并很好地去除了伪边缘点。
以上便是此次小编带来的检测相关内容,通过本文,希望大家对边缘检测具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!