Introduction
基本步骤:
- 高斯模糊(Gaussian Smooth):平滑图像,去除噪声(高频信息)
- 梯度检测(Gradient Detection):得到对应图像每个像素的梯度方向矩阵和梯度强度矩阵
- 非最大化抑制(Non-Maximum Suppression):
- 双阈值(Double Threshold):
步骤 Steps
高斯滤波 Gaussian Filtering
首先,生成高斯模板,确定两个参数:
-
scale:高斯模板的维度,通常是奇数(2k+1),影响平滑程度
-
σ:标准差,同样会影响平滑程度
然后根据公式生成模板:
Gaussiani,j=2πσ21e2σ2u2+v2(0)
其中,u=i−scale/2,v=j−scale/2
归一化(normalization):
Gaussiani,j=sumGaussiani,j(1)
其中,sum 为 ∑i,jscaleGaussiani,j。
梯度检测 Gradient Detection
使用边缘检测算子对图像进行卷积,计算出每个像素对应位置的梯度幅值(Gradient)以及梯度方向(Gradient Direction)。
首先,水平方向算子卷积得到 dxi,j :
sobelx=⎩⎨⎧−1−2−1000121⎭⎬⎫(0)
垂直方向算子得到 dyi,j:
sobely=⎩⎨⎧10−120−210−1⎭⎬⎫(1)
然后,计算梯度幅值:
weighti,j=dxi,j2+dyi,j2(2)
计算梯度方向:
gradienti,j=dyi,jdxi,j(3)
最终得到两个矩阵:
非最大化抑制 Non-Maximum Suppression
判定规则 Rule
确定一个点是否为边缘点,需要确定:这个点的梯度幅值在梯度方向上是不是最大的。
通过和梯度正负方向上的两个点的梯度幅值进行比较做出判断:
确定梯度方向上两点 Determine Neighbours
8 邻域中的像素构成 4 对点,对应 4 个基本梯度方向,如下:
确定梯度方向上临近两点:
- 取最靠近梯度方向的基本方向的两个点,例如上图 W 和 E
- 构成梯度方向所在区域的两个基本方向,根据梯度方向(上图 θ )计算出比值进行插值(interpolation),如上图,NE 和 E 插值得到 P1, W 和 SW 得到 P2
双阈值 Double Threshold
判断方式如下:
-
if weight>roof:这个像素是一个边缘像素
-
if weight<floor:这个像素不属于任何边缘
如果处于高阈值和低阈值的中间的话,那么:
- 如果 8 领域中含有边缘点的话,那么我们认为这个点也是一个边缘点
- 如果没有,那么这是一个孤立点,我们不认为这是一个边缘点
Fin