简单的回答:灰度不连续处
边缘可以根据灰度剖面来建模
阶跃边缘 Step edge:图像灰度突然从不连续一侧的一个值变为另一侧的另一个值
斜坡边缘 Ramp edge:灰度变化不是瞬间的而是在有限距离内发生的一种阶跃边缘
山脊边缘 Ridge edge:图像灰度值突然变化,然后在很短的距离内回到开始的值;通常由图像中的线产生
屋顶边缘:灰度变化不是瞬间的而是在有限距离内发生的一种山脊边缘;通常在曲面相交处产生
边缘描述子
——边缘法向:最大灰度变化方向的单位矢量。
——边缘方向:沿着边缘的单位矢量(垂直于边缘法线)。
——边缘位置/中心:边缘所在图像中的位置
——边缘强度/幅值:沿着边缘法向的局部图像对比度
重点:所有这些信息都可以从梯度向量场计算出来!!
边缘像素是在梯度幅值局部最大的地方
梯度方向垂直于边缘方向(等价于边缘法向)
一种简单的梯度幅值边缘检测方法
图像分别和水平导数滤波器以及垂直导数滤波器进行卷积,从而计算每个像素的梯度向量
计算每个像素处的梯度幅值
如果某一像素处的幅值超过一个阈值,则报告可能的边缘点
一种简单的梯度幅值边缘检测方法
图像分别和水平导数滤波器以及垂直导数滤波器进行卷积,从而计算每个像素的梯度向量
计算每个像素处的梯度幅值
如果某一像素处的幅值超过一个阈值,则报告可能的边缘点
梯度幅值为 s q r t ( I x . 2 + I y . 2 ) sqrt(Ix.^2 + Iy.^2) sqrt(Ix.2+Iy.2)
测量每个像素处的坡度陡度(=边缘对比度)
一种简单的梯度幅值边缘检测方法
图像分别和水平导数滤波器以及垂直导数滤波器进行卷积,从而计算每个像素的梯度向量
计算每个像素处的梯度幅值
如果某一像素处的幅值超过一个阈值,则报告可能的边缘点
边缘细化和连接
平滑+阈值给我们提供了一个具有“厚”的边缘的二值mask
我们想要薄的,一个像素宽度的,连接的轮廓
一个重要的案例研究,可能是CV从业者最常用的边缘检测算法,实验一致表明它的性能非常好
J. Canny, A Computational Approach to Edge Detection, IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol 8, No. 6, Nov 1986
边缘检测包括三步:
加性的白高斯噪声:均方根噪声的幅值/单位长度为 n 0 2 n^2_0 n02
好的检测:滤波器在边缘位置(x=0)的响应必须比噪声强
好的定位:滤波器在非常接近 x=0 的地方的响应必须是最大值
低误报率:在 x=0 的合理邻域中应该只有一个最大值
Canny找到了一个线性的连续滤波器,它最大化了这三个给定的标准
最优滤波器没有闭合形式的解
然而,它看起来非常类似于高斯函数的导数
细化和连接
Canny对所有这些都有很好的回答
注意:在定阈值之前进行细化
我们想在曲线上标出幅值最大的点
我们可以通过沿着垂直于曲线的一维灰度切片寻找最大值(非极大值抑制,即搜素局部最大值,抑制极大值)来实现这一点
这些点可以形成一个像素宽度的曲线
问题:
假如阈值太大: 非常少的(或者几乎没有)边缘;误检测率高,很多间断
假如阈值太小:非常多的(所有像素)边缘;误报率高,很多额外的边缘
允许我们同时应用两者!(例如,“模糊”阈值)