本文内容参考《数字图像处理基础》Wilhelm Burger等著。
边缘:图像中那些沿某一方向局部强度变化显著的位置。局部强度变化越强烈,越能证明这一位置存在边缘。
基于梯度的边缘检测:
将图像矩阵的一行灰度变化看作一个一维函数 f(x) ,则像素变化就是 f′(x)=dfdx(x) 。对于离散函数 f(u) ,用中心差分公式粗略估计点 u 处的切线斜率
dfdu(u)≈f(u+1)−f(u−1)(u+1)−(u−1)=f(u+1)−f(u−1)2=(−0.500.5)⋅⎛⎝⎜f(u−1)f(u)f(u+1)⎞⎠⎟
由上式可见,对原图像像素数组进行边缘检测梯度滤波,就是用线性算子
(−0.500.5) 与对应位置的像素数组做卷积线性滤波。
对图像函数局部梯度的近似是很多经典边缘检测算子的基础,不同边缘检测算子的差异在于:(1.)估算梯度分量的滤波器类型;(2.)将这些梯度分量结合起来的办法。而我们在边缘检测时,关心的主要是:(a.)边缘点的强度;(b.)边缘的方向。
(1.)Prewitt算子(滤波矩阵):
HPx=⎛⎝⎜−1−1−1000111⎞⎠⎟=⎛⎝⎜111⎞⎠⎟∗(−101)
HPy=⎛⎝⎜−101−101−101⎞⎠⎟=(111)∗⎛⎝⎜−101⎞⎠⎟
经尺度因子作用滤波算子后,对
原图像的滤波输出为
Dx=16HPx∗I,Dy=16HPy∗I
则
局部边缘强度 E(u,v) 为
E(u,v)=(Dx(u,v))2+(Dy(u,v))2−−−−−−−−−−−−−−−−−−−√
局部边缘方向角 Φ(u,v) 为
Φ(u,v)=arctan(Dy(u,v)Dx(u,v))
(2.)Sobel算子(滤波矩阵):
HSx=⎛⎝⎜−1−2−1000121⎞⎠⎟=⎛⎝⎜121⎞⎠⎟∗(−101)
HSy=⎛⎝⎜−101−202−101⎞⎠⎟=(121)∗⎛⎝⎜−101⎞⎠⎟
经尺度因子作用滤波算子后,对
原图像的滤波输出为
Dx=18HSx∗I,Dy=18HSy∗I
则
局部边缘强度 E(u,v) 为
E(u,v)=(Dx(u,v))2+(Dy(u,v))2−−−−−−−−−−−−−−−−−−−√
局部边缘方向角 Φ(u,v) 为
Φ(u,v)=arctan(Dy(u,v)Dx(u,v))
(3.)改进的Sobel算子(滤波矩阵):
HS′x=132⎛⎝⎜−3−10−30003103⎞⎠⎟
HS′y=132⎛⎝⎜−303−10010−303⎞⎠⎟
经尺度因子作用滤波算子后,对
原图像的滤波输出为
Dx=HS′x∗I,Dy=HS′y∗I
则
局部边缘强度 E(u,v) 为
E(u,v)=(Dx(u,v))2+(Dy(u,v))2−−−−−−−−−−−−−−−−−−−√
局部边缘方向角 Φ(u,v) 为
Φ(u,v)=arctan(Dy(u,v)Dx(u,v))
(4.)Roberts算子(滤波矩阵):使用两个非常小的 2×2 滤波器沿图像的对角线方向估算方向梯度
HR1=(0−110)
HR2=(−1001)
经尺度因子作用滤波算子后,对
原图像的滤波输出为
Dx=12HR1∗I,Dy=12HR2∗I
则
局部边缘强度 E(u,v) 为
E(u,v)=(Dx(u,v))2+(Dy(u,v))2−−−−−−−−−−−−−−−−−−−√
局部边缘方向角 Φ(u,v) 为
Φ(u,v)=arctan(Dy(u,v)Dx(u,v))
一个滤波器如果对类似边缘的结构相应越强,那它对方向性就越敏感。方向不敏感的滤波器趋向于对非边缘结构有良好的响应,而最具识别能力的边缘检测滤波器,通常只对一个比较狭小的角度范围内的边缘有相应。
(5.)罗盘算子(滤波矩阵):使用一系列敏感方向范围较窄的滤波器,如下述的8个方向跨距为 45o 的滤波器。
HS0=⎛⎝⎜−1−2−1000121⎞⎠⎟,HS4=⎛⎝⎜121000−1−2−1⎞⎠⎟
HS1=⎛⎝⎜−2−10−101012⎞⎠⎟,HS5=⎛⎝⎜21010−10−1−2⎞⎠⎟
HS2=⎛⎝⎜−101−202−101⎞⎠⎟,HS6=⎛⎝⎜10−120−210−1⎞⎠⎟
HS3=⎛⎝⎜012−101−2−10⎞⎠⎟,HS7=⎛⎝⎜0−1−210−1210⎞⎠⎟
每个方向的输出为
D0=I∗HS0,D1=I∗HS1,D2=I∗HS2,D3=I∗HS3,D4=−D0,D5=−D1,D6=−D2,D7=−D3
点
(u,v) 处的
边缘强度
ES(u,v)=max(|D0(u,v)|,|D1(u,v)|,|D2(u,v)|,|D3(u,v)|)
局部的边缘方向
ΦS(u,v)=π4j,j=argmax0≤i≤7Di(u,v)
基于一阶导数的边缘检测算子得到的边缘是与灰度过渡范围等宽的,因此边缘无法被精确定位。
基于二阶导数的边缘检测:
函数的二阶导数可以度量局部曲率,边缘通常存在于图像函数的二阶导数的零点位置(过零点处)。此外,由于二阶导数通常会放大图像噪声,所以需要用合适的低通滤波器做预平滑处理。
多尺度边缘检测技术:
边缘并不是仅仅存在于某个固定分辨率或尺度上,而是遍及多种可能的尺度。所以,多尺度边缘检测技术首先检测各种尺度下的边缘,然后在每个图像位置上判断哪一个尺度上的那一条边缘是主要的。
(1.)Canny算子:在不同分辨率的图像上使用一系列的相对大尺寸的有向滤波器进行滤波,然后将这些滤波结果融合起来成为一张正常的边缘图。它是一种基于一阶导数的梯度方法,使用二阶导数的过零点精确定位边缘。